mysql主从同步异常原因及恢复

 更新时间:2025年08月10日 10:33:44   作者:漠效  
本文介绍了MySQL主从复制过程中常见的同步异常问题及其解决方法,包括auto.cnf配置问题、my.cnf配置问题及主库重启等场景下可能出现的问题及应对措施,感兴趣的可以了解一下

前言

mysql数据库做主从复制,不仅可以为数据库的数据做实时备份,保证数据的完整性,还能做为读写分离,提升数据库的整体性能。但是,mysql主从复制经常会因为某些原因使主从数据同步出现异常。因此,下面介绍的是mysql主从同步异常的原因及恢复的方法。

auto.cnf 配置问题

这个问题是在部署主从复制的时候,可能会遇到的

【1】报错

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work

【2】分析:

当mysql做了主从时,每个mysql都会有个uuid 作为唯一标识的。上面是由于主从复制的mysql数据库了相同的UUID,所以,只需要修改auto.cnf配置文件即可。

【3】解决方法

<1>查找auto.cnf文件的位置(位置一般为:/var/lib/mysql/auto.cnf)

find / -iname auto.cnf

<2>将文件中的uuid修改为不同数值。

my.cnf配置问题

这个问题也是在部署主从复制的时候,可能会遇到的

【1】报错

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

【2】分析

在mysql的主从配置中,每台mysql数据库的my.cnf中的server-id 必须是唯一,但是有的时候可能因为粗心而配成了相同的数值,也有可能mysql没有加载到my.cnf 文件中的server-id。

【3】解决方法

<1>找到mysql的配置文件my.cnf(默认位置为:/etc/my.cnf)

find / -name my.cnf

<2>修改从服务器的my.cnf配置文件中的server-id(注意要改为与主服务器不同的)

<3>在从服务器的数据库中直接添加server_id(此server_id数值与my.cnf中的一致)

mysql>  set global server_id=2;
mysql>  start slave;

主库重启(数据库服务器宕机)

重点问题

这个问题常见于运维mysql数据库主从的过程中,一般都是由于数据库的误操作引起的,也有可能是数据库服务器因某些原因宕机或重启引起的。

数据库备份一定要定期进行,确保数据万无一失 .

【1】报错

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘binlog truncated in the middle of event; consider out of disk space on master; the first event ‘mysql-bin.001989’ at 9179, the last event read from ‘./mysql-bin.001989’ at 9179, the last byte read from ‘./mysql-bin.001989’ at 9179.’

【2】分析

由报错可看出是由于从库的二进制文件位置与主库的不一致导致的

【3】解决方法

<1>查看主库的二进制文件的位置

mysql -uroot -p'.....'    进入数据库

show master status;   查看主库

重点关注:
File 与 Position

<2>查看从库的状态

show slave status\G ;

重点关注下列两个的状态[yes/no]:
Slave_IO_Running
Slave_SQL_Running

<3>解决方法一:

忽略错误后,继续同步
(适用于主库与从库数据相差不大;要求数据可以不完全统一,数据要求不严格的情况)

{1}进入从库操作:

mysql -uroot -p‘...'

{2}停止从库同步

stop slave;     

{3}跳过1步错误(后面的数字可更改)

set global sql_slave_skip_counter =1;        

{4}开启从库

start slave;    

{5}查看从库状态

show slave status\G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
即为正常

<4>解决方法二

重新做主从,完全同步
(适用于主库从库的数据相差较大;要求数据完全统一的情况 )

{1}先进入主库,进行锁表,此处锁定为只读状态,防止数据写入 (可选,因如有数据库备份,可直接利用备份)

flush tables with read lock; 

{2}进行数据备份,把数据备份为.sql的文件(可选,因如有数据库备份,可直接利用备份)

mysqldump -uroot -p‘密码'  --all-databases > mysql.back.sql 

{3}进入主库,进行解锁(可选,因如有数据库备份,可直接利用备份)

unlock tables;

{4}把mysql的备份文件传输到从库服务器上(位置任意,但要能找到)

scp -r /root/mysql.bask.sql root@node2:/tmp/ 

{5}进入从库,停止从库的状态

stop slave; 

清除slave上的同步位置,删除所有旧的同步日志,使用新的日志重新开始.(使用前先停止slave服务)

reset slave;(可选)

{6}在从库中导入数据备份

source /tmp/mysql.back.sql ;

mysql -uroot -p‘....'  database -f < /tmp/mysql.bask.sql   
(-f 为跳过错误的Sql,继续往下执行,可不加)

{7}设置从库同步

change master to master_host = '主库的IP', master_user = '设置主从时设定的主库的用户', master_port=主库的端口, master_password='主库设定的密码', master_log_file = 'mysqld-bin.001989', master_log_pos=24110520; 

注意:
master_log_file与master_log_pos 是主库show master status信息里的| File与Position

{8}重新开启从库同步

start slave;  

{9}查看同步状态
mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

到此这篇关于mysql主从同步异常原因及恢复的文章就介绍到这了,更多相关mysql主从同步异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Mysql的root账户密码忘记了怎么解决(百分百教会你重置!)

    Mysql的root账户密码忘记了怎么解决(百分百教会你重置!)

    mysql是常用的数据库,很多程序员在使用的过程中会出现root用户密码忘记的事情,这篇文章主要给大家介绍了关于Mysql的root账户密码忘记了该怎么解决的相关资料,文中介绍的方法百分百教会你如何重置,需要的朋友可以参考下
    2024-05-05
  • Linux环境下安装mysql5.7.36数据库教程

    Linux环境下安装mysql5.7.36数据库教程

    大家好,本篇文章主要讲的是Linux环境下安装mysql5.7.36数据库教程,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误

    关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误

    这篇文章主要介绍了关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • mysql中合并两个字段的方法分享

    mysql中合并两个字段的方法分享

    mysql中怎么合并两个字段为一个字段呢?试了好多方法,结果还是不是我想要的
    2012-08-08
  • mysql 快速解决死锁方式小结

    mysql 快速解决死锁方式小结

    本文讲述了在MySQL中识别和终止导致死锁的SQL语句,通过SHOWENGINEINNODBSTATUS和INFORMATION_SCHEMA表,可以找到死锁的具体事务,感兴趣的可以了解一下
    2024-11-11
  • MySQL由浅入深探究存储过程

    MySQL由浅入深探究存储过程

    这篇文章主要介绍了MySQL存储过程,存储过程,也叫做存储程序,是一条或者多条SQL语句的集合,可以视为批量处理,但是其作用不仅仅局限于批量处理
    2022-11-11
  • MySQL中预处理语句prepare、execute与deallocate的使用教程

    MySQL中预处理语句prepare、execute与deallocate的使用教程

    这篇文章主要介绍了MySQL中预处理语句prepare、execute与deallocate的使用教程,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-08-08
  • MySQL 丢失数据的原因及解决

    MySQL 丢失数据的原因及解决

    这篇文章主要介绍了MySQL 丢失数据的原因及解决,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05
  • mysql使用GROUP BY分组实现取前N条记录的方法

    mysql使用GROUP BY分组实现取前N条记录的方法

    这篇文章主要介绍了mysql使用GROUP BY分组实现取前N条记录的方法,结合实例形式较为详细的分析了mysql中GROUP BY分组的相关使用技巧,需要的朋友可以参考下
    2016-06-06
  • 如何配置全世界最小的 MySQL 服务器

    如何配置全世界最小的 MySQL 服务器

    Intel Edison 是一个小巧的计算机基于 22 nm 的 Silvermont 双核 Intel Atom CPU 主频 500MHz运行 Linux (叫做 Yocto 的基于 Ubuntu 的发布版)。为了对 Edison 进行编程,我们需要一块接口板。可以选择的板子包括兼容Arduino的接口板 (包含了 SD 卡) 还有 Intel 接口板。
    2016-04-04

最新评论