加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

处理mysql使用GTID主从复制错误问题

发布时间:2022-06-20 14:28:11 所属栏目:MySql教程 来源:互联网
导读:做MySQL主从的话肯定会遇到很多同步上的问题,大多数都是由于机器宕机,重启,或者是主键冲突等引起的从服务器停止工作,这里专门收集类似问题并提供整理解决方案,仅供参考. 1、主从网络中断,或主服务器重启,或从服务器重启,从会根据配置文件中的时间,默认1分钟,
  做MySQL主从的话肯定会遇到很多同步上的问题,大多数都是由于机器宕机,重启,或者是主键冲突等引起的从服务器停止工作,这里专门收集类似问题并提供整理解决方案,仅供参考.
 
  1、主从网络中断,或主服务器重启,或从服务器重启,从会根据配置文件中的时间,默认1分钟,去自动重连主服务器,直到网络和服务均可正常连接,连接正常后可自动继续同步之前文件,不需要任何人工干预.
 
  2、当主从因为人为原因出现不同步的时候,可以用下面命令进行同步:
 
  LOAD DATA FROM MASTER;
 
  LOAD TABLE TBLNAME FROM MASTER;
 
  注意,上面命令会对主数据库进行锁操作,如果数据库极大,建议在停机的时候进行,或者用短锁备份查看 show master status; 后,拷贝数据库的方式进行.
 
  3、当 BIN-LOG 里面出现 SQL 级别错误导致主从不能同步的时候,可以用下面方法掠过该错误语句行,继续同步:
 
  stop slave;
 
  set global sql_slave_skip_counter=1;
 
  start slave;
 
  原因也说的很清楚了,不支持GTID_MODE 模式运行的数据库,那怎么办呢?
 
  下面就讲一下GTID模式的主从错误跳过方法,多余的话不说了,直接上方法,按顺序执行即可,首先确定GTID点,也就是同步出错的点记录下来,方法如下,在查看之前您必须先登录MySQL,代码如下:
 
  mysql> show slave statusG;
 
  查看一下信息并记录下来:
 
  Executed_Gtid_Set: 7f8d9eb8-a7fe-11e2-84fd-0015177c251e:1-260
 
  接下来重置 slave上的 master和slave的.
 
  NOTE:注意这里说的是从服务器上的master 和 slave,如果是主主复制就会很麻烦,这里注意了,reset master会导致此slave上所有的slave重置,reset master的主要目的是使gtid_executed为空。这里不能简单的使用change master to来切换,这样做表面上不会报错,但是实际上slave并不会更新,服务器会参考show slave statusG中的Executed_Gtid_Set参数来获取数据,代码如下:
 
  mysql> reset master;
  Query OK, 0 rows affected (0.20 sec)
  mysql> stop slave;
 
  CHANGE MASTER TO MASTER_HOST=’192.168.1.136′, MASTER_PORT=3306, MASTER_USER=’dbadmin’,MASTER_PASSWORD=’123456′, master_auto_position=1;
 
  然后重启slave,代码如下=:
 
  start slave;
 
  show slave statusG;
 
  怎么样? 问题解决了吧? 什么? 还报错? 那你仔细看一下报错的是不是和上一条不一样了呢? 就证明已经跳过上条错误了, 您需要做的就是继续重复上面操作, 直到跳过所有错我,别嫌麻烦,毕竟数据很重要哦!
 
  意思就是从上的server_id和主的一样的,经查看发现从上的/etc/my.cnf中的server_id=1这行我没有注释掉(在下面复制部分我设置了server_id),于是马上把这行注释掉了,然后重启mysql,发现还是报同样的错误。
 
  使用如下命令查看了一下server_id,代码如下:
 
  mysql> show variables like 'server_id';
  +---------------+-------+
  | Variable_name | Value |
  +---------------+-------+
  | server_id | 1 |
  +---------------+-------+
  1 row in set (0.00 sec)
  发现,mysql并没有从my.cnf文件中更新server_id,既然这样就只能手动修改了,代码如下:
 
  mysql> set global server_id=2; #此处的数值和my.cnf里设置的一样就行
 
  mysql> slave start;
 
  如此执行后,slave恢复了正常,不过稍后蚊子使用/etc/init.d/mysqld restart重启了mysql服务,然后查看slave状态,发现又出现了上面的错误,然后查看server_id发现这个数值又恢复到了1.
 
  一些错误处理和日常维护,检查从服务器一般使用show slave status命令来检查,代码如下:
 
  mysql> SHOW SLAVE STATUSG
  *************************** 1. row ***************************
  Slave_IO_State: Waiting for master to send event
  Master_Host: 192.168.0.100
  Master_User: root
  Master_Port: 3306
   Relay_Master_Log_File: mysql -bin. 003
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  Replicate_Do_DB:
  Replicate_Ignore_DB:
  Last_Errno: 0
  ….. 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读