Slave_SQL线程异常终止处理之跳过错误

手动跳过1个或更多个事务

/* 传统点位模式复制 */
SQL>set global sql_slave_skip_counter=1;
SQL>start sql_thread;

/* GTID模式复制 */
SQL>set gtid_next='e29d3917-9dbb-11e9-8b64-e4434b6e2c80:11103335-16054791';
SQL>begin;commit;
SQL>set gtid_next='AUTOMATIC';

自动连续跳过错误

若是一直报错,然则,这些报错又可以忽略可以怎么处置,此时也有许多方式,通常使用的是如下几种:

方式一:  使用pt-slave-restart工具跳过对应错误

然则使用pt-slave-restart工具跳过报错时,必须关闭多线程复制,由于工具分不清到底哪个线程复制出了问题,然后会报类似如下的报错:

Cannot skip transactions properly because GTID is enabled and slave_parallel_workers > 0.  See 'GLOBAL TRANSACTION IDS' in the tool's documentation

处置步骤为:

/*  暂停并行复制  */
SQL> set global slave_parallel_workers=0;

/*  使用pt-slave-restart工具跳过错误(填写错误号)*/
pt-slave-restart  --user=root --password='Admin@123' --socket=/data/mysql3306/tmp/mysql.sock  --error-numbers=1062

/* 不再报错时,再开启并行复制 */
mysql> set global slave_parallel_workers=8;

 

方法二:在设置文件里设置跳过指定错误

在设置文件[mysqld]项里加入参数slave-skip-errors

slave-skip-errors=1032,1062

然则,此方式存在一个致命瑕玷:该参数是静态参数,无法动态修改,需要修改设置文件后重启数据库方可生效。

 

幂等模式

由于手动跳过事务时,会忽略相同事务下的其他正常的SQL在从库的应用;pt-slave-restart工具需要住手多线程复制,影响从库应用速率;设置slave-skip-errors又需要重启数据库方可生效。那么有没有一种方式既不会跳过多余的SQL,又无需重启数据库也不影响从库应用SQL的速率呢?谜底是有的,也就是将slave_exec_mode参数设置为IDEMPOTENT,即幂等模式(默以为严酷模式STRICT)。

/*  在线动态修改 */
SQL > set global slave_exec_mode='IDEMPOTENT';

 

改为幂等模式后,可以忽略1032及1062的错误,对统一事务内的其他SQL无影响,依旧能正常执行。

 

附pt工具安装错误排查

percona-toolkit执行时遇到install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted错误

执行pt-table-checksum报错如下:

[root@db ~]# pt-table-checksum S=/data/mysql/mysqldata3306/sock/mysql.sock,h=localhost

11-01T17:07:02 install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted.

Compilation failed in require at (eval 14) line 3.

 

 at /usr/local/bin/pt-table-checksum line 1623

 

 

而主机上已经安装了相应的软件包:

[root@db ~]# rpm -qa | grep -i mysql

perl-DBD-MySQL-4.013-3.el6.x86_64

mysql-libs-5.1.73-8.el6_8.x86_64

 

发现系统没有加载mysql的动态链接库:

[root@db ~]# ldconfig -p | grep mysql

 

那就添加一下:

[root@db ~]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

[root@db ~]# ldconfig

[root@db ~]# ldconfig -p | grep mysql

    libmysqlclient.so.20 (libc6,x86-64) => /usr/local/mysql/lib/libmysqlclient.so.20

 

 

再次执行pt-table-checksum仍然报错:

[root@db ~]# pt-table-checksum S=/data/mysql/mysqldata3306/sock/mysql.sock,h=localhost

11-01T17:07:02 install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted.

Compilation failed in require at (eval 14) line 3.

 

 at /usr/local/bin/pt-table-checksum line 1623

 

这里需要把libmysqlclient.so文件复制一份到/usr/lib64/mysql/libmysqlclient.so.18

如果还是没有找到:

找到 mysql的动态链接库:

[root@db ~]# ldd /usr/lib64/perl5/auto/DBD/mysql/mysql.so

    linux-vdso.so.1 =>  (0x00007ffecb770000)

    libmysqlclient.so.18 => not found --还是没有找到

    libz.so.1 => /lib64/libz.so.1 (0x00007f3be2321000)

需要重装下perl-DBD-MySQL包

[root@db lib]# yum reinstall perl-DBD-MySQL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值