mysql reset slave Last_IO_Error: Got fatal error 1236 from master when reading data from binary log
其中 Master_Log_File: mysql-bin.000022 显示当前I/O线程当前正在读取的主服务器二进制日志文件的名称。reset slave会删除从机本地的relay log文件,reset slave之后 ,再次查看从机的relay log文件。mysql一主一从集群,查看从库的状态,同步进程没有在正常工作,表现在 Slave_IO_Running: No、Slave_SQL_
mysql reset slave reset master
1、问题背景
mysql一主一从集群,查看从库的状态,同步进程没有在正常工作,表现在 Slave_IO_Running: No、Slave_SQL_Running: No
而且报错了:Last_IO_Error: 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 master status;
show slave status;
Master_Log_File
显示当前I/O线程当前正在读取的主服务器二进制日志文件的名称
Read_Master_Log_Pos
显示当前同步到主服务器上二进制日志的偏移量,I/O线程已经读取的位置,单位是字节。
Relay_Log_File
显示Slave的SQL线程当前正在读取和执行的中继日志文件的名称。
Relay_Log_Pos
显示在当前的中继日志中,Slave的SQL线程已读取和执行的中继日志的偏移量。
Relay_Master_Log_File
显示Slave中继日志同步到Master的二进制日志文件。
2、问题分析
查看从机的relay log文件
查看主机的binlog文件
1.File:当前正在写入的二进制日志文件名。
2.position:当前正在写入的二进制日志文件的位置。
3. Binlog Do DB:指定需要写入二进制日志的数据库名,
4. Binlog lgnore DB:指定不需要写入二进制日志的数据库名。
show slave status\G; 查看得知
Master_Log_File: mysql-bin.000022
Read_Master_Log_Pos: 5914662
Relay_Log_File: localhost-relay-bin.000019
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000009
其中 Master_Log_File: mysql-bin.000022 显示当前I/O线程当前正在读取的主服务器二进制日志文件的名称。上面通过查看主机的binlog文件 并没有1个名称为 mysql-bin.000022的文件。所以本篇开头说的报错正好能解释通了::Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’。
这个报错意思是从机的I/O线程读取主机的binlog文件时,找不到mysql-bin.000022文件名。
3、解决方法
3.1、锁定主库,手动同步主库数据到从库,使得主从数据库数据一致
参考 链接: mysql主从 添加从库服务器 主库服务器已有数据情况下 的1 、2 章节。
3.1、从机执行stop slave、reset slave
stop slave;
reset slave;
reset slave会删除从机本地的relay log文件,reset slave之后 ,再次查看从机的relay log文件。发现只剩下3个。这3个通过reset slave删除不了,暂不知道什么原因;通过rm 命令手动删除即可。
reset slave之后查看 show slave status \G;
3.2、从机上再次指定主机的binlog文件名和偏移量
主机上mysql命令行执行show master status;
查看主机上正在写入的binlog文件名和偏移量
正在写入的binlog文件名是mysql-bin.000113,偏移量是497920。这两个值配置从库时需要用到。
从机mysql命令行执行
change master to master_host='x.x.x.x',master_port=3306,master_user='root',master_password='yourMysqlPassWord', master_log_file='mysql-bin.000113',master_log_pos=497920;
3.3、从机执行 start slave
start slave
3.4、查看从机同步状态
从机上执行
show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这2个参数都为yes表明同步状态正常,至此解决了mysq一主一从 同步不正常问题。
3.5、恢复主库写操作
unlock tables;
作用是恢复主库的写操作。
4、主从复制测试
4.1、主库插入1条数据
在主库的banji表中插入1条数据。
show full processlist;
显示主库哪些线程正在运行,返回的结果是实时变化的;
Master has sent all binlog to slave; waiting for more updates 表明本次同步信息已经发送完毕。
4.2、 从库确认是否同步了这条数据
查看从库的banji表中是否同步了主库插入的那条数据。
show full processlist;
显示从库哪些线程正在运行,返回的结果是实时变化的;
Slave has read all relay log; waiting for more updates 表明本次同步信息已经接收完毕。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)