mysql reset slave reset master
- 1、问题背景
- 2、问题分析
- 3、解决方法
- 3.1、锁定主库,手动同步主库数据到从库,使得主从数据库数据一致
- 3.1、从机执行stop slave、reset slave
- 3.2、从机上再次指定主机的binlog文件名和偏移量
- 3.3、从机执行 start slave
- 3.4、查看从机同步状态
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一主一从 同步不正常问题。