restart
- pt-slave-restart 监视一个或多个 MySQL 复制的从是否有错误,如果复制停止,则尝试重新启动复制。
基本使用语法为:pt-slave-restart [OPTIONS] [DSN]
下面列表列出部分options,更加详细的请使用pt-slave-restart --help进行查看
OPTIONS:
类型备注:s=string, i=integer, f=float, h/H/a/A=comma-separated list, d=DSN, z=size, m=time
DSN为要操作的数据库和表。
DSN:
- 基本使用样例
- 跳过错误(--skip-count )
目前,有数据库test,存在如下表t_goods:
CREATE TABLE `t_goods` (
`goodid` int NOT NULL,
`goodname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`goodid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
表中有数据如下:
1 电视
2 冰箱
假设,我们在Slave上,先执行如下插入SQL:
INSERT INTO t_goods VALUES(3,'烤箱');
在Master上,后执行如下插入SQL:
INSERT INTO t_goods VALUES(3,'烤箱');
INSERT INTO t_goods VALUES(4,'电脑');
INSERT INTO t_goods VALUES(5,'手机');
则引发主从复制错误,这里,我们比较明确知道错误原因,则需要跳过发生错误的语句即可:
pt-slave-restart h=192.168.246.136,u=root,p=Ygzlpaul*2022 --skip-count=1
打印如下信息:
2022-11-19T23:32:29 h=192.168.246.136,p=...,u=root m_slave-relay-bin.000011 2871 1062
验证Slave状态,正常
2.2 跳过GTID (--master-uuid )
模拟发生错误同2.1,只是这里开启了GTID模式,则,我们需要查看并找到错误的GTID值:
8c17f5a5-55f6-11ed-a854-000c295b9532:5
pt-slave-restart h=192.168.246.136,u=root,p=Ygzlpaul*2022 --master-uuid=8c17f5a5-55f6-11ed-a854-000c295b9532
注1:上面仅仅需要UUID值,而无需TID值
打印如下信息:
2022-11-20T00:16:40 h=192.168.246.136,p=...,u=root m_slave-relay-bin.000002 1536 1062
验证Slave状态,正常
注2:需要在Slave上,先执行如下SQL:SET GLOBAL slave_parallel_workers=0
否则,会报告如下错误:
Cannot skip transactions properly because GTID is enabled and slave_parallel_workers > 0. See 'GLOBAL TRANSACTION IDS' in the tool's documentation.