设为首页 收藏本站
查看: 1301|回复: 0

[经验分享] MySQL GTID模式 主从复制跳过错误事务

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-1-4 10:05:09 | 显示全部楼层 |阅读模式
今天在做基于GTID模式的主从复制时,发现一个跳过主从复制的错误日志的方法,希望发表出来对大家能有帮助。

首先在master端配置了复制账号copy并只给了REPLICATION权限。当前状态是主从复制正常。当我在master端删除''@'$hostname',''@'localhost'这样的匿名账号时从端开始复制模式开始报错。

分析应该是copy权限不够,REPLICATION权限应该不能删除mysql库中用户。所以从端会出错。错误信息如下:
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.101.200.210
                  Master_User: copy
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: 210-log-bin.000003
          Read_Master_Log_Pos: 2796
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 414
        Relay_Master_Log_File: 210-log-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1396
                   Last_Error: Worker 1 failed executing transaction '' at master log 210-log-bin.000003, end_log_pos 694; Error 'Operation DROP USER failed for ''@'shangjia1.test.com'' on query. Default database: 'mysql'. Query: 'drop user ""@'shangjia1.test.com''
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 537
              Relay_Log_Space: 3891
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1396
               Last_SQL_Error: Worker 1 failed executing transaction '' at master log 210-log-bin.000003, end_log_pos 694; Error 'Operation DROP USER failed for ''@'shangjia1.test.com'' on query. Default database: 'mysql'. Query: 'drop user ""@'shangjia1.test.com''
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 200210
                  Master_UUID: 4540fbfd-b055-11e5-8b5d-0050568b7072
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State:
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp: 160101 15:37:10
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: 4540fbfd-b055-11e5-8b5d-0050568b7072:3-12
            Executed_Gtid_Set: 4540fbfd-b055-11e5-8b5d-0050568b7072:1-2:12,
4e555522-b055-11e5-8b5d-0050568b4f5b:1-2
                Auto_Position: 1
1 row in set (0.01 sec)

所以我在主端先给了copy用户所有权限,所有权限包括了REPLICATION CLIENT(客户端)、REPLICATION SLAVE(服务端)、SUPER(管理)和RELOAD四个权限。具体权限问题请参阅这位网友的介绍
http://www.iyunv.com/thread-160014-1-1.html
给了权限后重启slave后还是会报上面1396错误。
此时我就比较郁闷了。后来就想是否可以跳过这个错误呢?
mysql主从复制时跳过指定的错误请认真阅读这位网友的文章

http://www.iyunv.com/thread-160013-1-1.html

具体操作是,在日志中找到错误代码然后指定跳过的错误代码即可。
我的错误代码是1396.
2016-01-01 15:25:55 28177 [Note] Slave SQL thread initialized, starting replication in log '210-log-bin.000003' at position 537, relay
log '/data/mysql/relay-log/slave-relay-bin.000002' position: 414
2016-01-01 15:25:55 28177 [ERROR] Slave SQL: Worker 1 failed executing transaction '' at master log 210-log-bin.000003, end_log_pos 69
4; Error 'Operation DROP USER failed for ''@'shangjia1.test.com'' on query. Default database: 'mysql'. Query: 'drop user ""@'shangjia1
.test.com'', Error_code: 1396
2016-01-01 15:25:55 28177 [Warning] Slave SQL: ... The slave coordinator and worker threads are stopped, possibly leaving data in inco
nsistent state. A restart should restore consistency automatically, although using non-transactional storage for data or info tables o
r DDL queries could lead to problems. In such cases you have to examine your data (see documentation for details). Error_code: 1756
2016-01-01 15:35:41 28177 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013)
2016-01-01 15:35:41 28177 [Note] Slave I/O thread killed while reading event
2016-01-01 15:35:41 28177 [Note] Slave I/O thread exiting, read up to log '210-log-bin.000003', position 2796
2016-01-01 15:37:10 28177 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is
therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Synta
x' in the MySQL Manual for more information.
2016-01-01 15:37:10 28177 [Note] Slave I/O thread: connected to master 'copy@10.101.200.210:3306',replication started in log '210-log-
bin.000003' at position 2796
2016-01-01 15:37:10 28177 [Note] Slave SQL thread initialized, starting replication in log '210-log-bin.000003' at position 537, relay
log '/data/mysql/relay-log/slave-relay-bin.000002' position: 414
2016-01-01 15:37:10 28177 [ERROR] Slave SQL: Worker 1 failed executing transaction '' at master log 210-log-bin.000003, end_log_pos 69
4; Error 'Operation DROP USER failed for ''@'shangjia1.test.com'' on query. Default database: 'mysql'. Query: 'drop user ""@'shangjia1
.test.com'', Error_code: 1396
2016-01-01 15:37:10 28177 [Warning] Slave SQL: ... The slave coordinator and worker threads are stopped, possibly leaving data in inco
nsistent state. A restart should restore consistency automatically, although using non-transactional storage for data or info tables o
r DDL queries could lead to problems. In such cases you have to examine your data (see documentation for details). Error_code: 1756

所以在/etc/my.cnf中定义如下
slave-skip-errors = 1396 至于为什么跳过指定的错误代码,请查阅http://www.iyunv.com/thread-160013-1-1.html的文章。
然后重启mysql服务即可。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-160015-1-1.html 上篇帖子: 浅析mysql主从复制中复制用户的权限管理 下篇帖子: 使用phpMyAdmin时出现PHP 5.3+is required的解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表