主从复制错误(持续更新)
1、Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
看字面意思是因为找不到二进制日志而导致的。
解决:
show slave status\G查看Slave_IO_Running Slave_SQL_Running 。确认IO线程出现错误。那么就是说bin log出现了问题。
登录主库,进入data目录查看是否存在二进制日志。如果存在,说明文件没有损坏,那么就是从库定位出现问题了。show master status;查看当前日志pos。
登录从库,先停止复制:stop slave; 然后重新change master to定位到主库。然后start slave;
2、主从复制错误,跳过错误。
(1)传统方法:
stop slave sql_thread;
set global sql_slave_skip_counter=1;
start slave sql_thread;
(2)开启GTID后的方法:
show slave status \G; 查看当前在执行的GTID事务号。Retrieved_Gtid_Set:字段。
停止SLAVE进程:STOP SLAVE;
SET SESSION GTID_NEXT=‘’ (查出来的Retrieved_Gtid_Set:字段,如:a986a264-7dbc-11e8-bc4b-000c292c5e19:1-8),那么就是跳过:a986a264-7dbc-11e8-bc4b-000c292c5e19:8(去掉“1-”)
BEGIN; COMMIT; 设置一个空事务
SET SESSION GTID_NEXT = AUTOMATIC; 恢复事务
启动SLAVE:START SLAVE;
GTID跳过报错:
Error executing row event: '@@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON.'
解决:
先关闭GTID模式。
stop slave sql_thread;
set GLOBAL GTID_MODE = ON_PERMISSIVE;
set GLOBAL GTID_MODE = OFF_PERMISSIVE;
set GLOBAL GTID_MODE = OFF;
start slave sql_thread;
然后再次开启。
在安装MySQL Utilities工具 的情况下,可以使用mysqlslavetrx工具进行跳过错误,以便继续复制:
mysqlslavetrx --gtid-set=af6b22ee-7b0b-11e4-aa8d-606720440b68:7-9 --slaves=user:pass@localhost:3311,user:pass@localhost:3312 --dryrun
--gtid-set:要跳过的全局事务标识符(GTID)集。
--slaves:从服务器的连接信息。在逗号分隔列表中列出多个从站。
--dryrun:在干运行模式下执行该实用程序,显示为每个从站跳过的事务(GTID),但没有有效地跳过它们。此选项可用于验证是否跳过了正确的事务。
--verbose,-v:定要显示的信息量。多次使用此选项可增加信息量。例如,-v
= verbose,-vv
= more verbose,-vvv
= debug。详细模式。