今天查看从库状态的时候发现

  1. *************************** 1. row ***************************
  2. Slave_IO_State: Waiting for master to send event
  3. ...
  4. Slave_IO_Running: Yes
  5. Slave_SQL_Running: NO
  6. Replicate_Do_DB:
  7. ...
  8. Skip_Counter: 0
  9. Exec_Master_Log_Pos: 890230198
  10. Relay_Log_Space: 35074175
  11. ...

这里标识几个状态

Slave_IO_State : Waiting for master to send event 代表数据库执行正常
Slave_SQL_Running : NO 代表从库运行异常
Exec_Master_Log_Pos : 890230198 : 不动

因为卡主在 Exec_Master_Log_Pos 位置不动, 代表执行异常, 出现的错误是mysql 执行失败, 出现错误, 由于知道是什么位置, 于是使用了一个笨办法找到了执行 pos 的位置

mysql> show binlog events in 'mysql-bin.000053' limit 7034300, 1000

找到了执行失败的sql

890230167    use `fadan_v4`; update `pt_order` set `last_log` = '游戏角色变动:[飞将 ->飞将电话:18620806845]', `pt_order`.`updated_at` = '2021-02-26 09:48:53' where `id` = 4914426
890230198    COMMIT /* xid=1637645127 */
890230263    SET @@SESSION.GTID_NEXT= 'aedf6a09-4067-11e6-b439-00163e080caf:59716071'
# 意思是在执行以下 sql 的时候出现的问题
890230414    use `mysql`; REVOKE ALL PRIVILEGES ON  *.* FROM 'liex_repl'@'%'
890230479    SET @@SESSION.GTID_NEXT= 'aedf6a09-4067-11e6-b439-00163e080caf:59716072'

考虑到可能是执行sql 的时候没有权限, 因为运行的是子账号, 所以无权执行 mysql 表, 所以导致无法执行

解决方法: 编辑 my.cnf, 忽略掉 mysql 表的同步(非业务逻辑需要), 重启 mysqld, 开启 slave 即可

replicate_wild_ignore_table=mysql.%

查看 slave 状态

mysql> show slave status\G;
*************************** 1. row ***************************
# 执行状态
               Slave_IO_State: Waiting for master to send event
...
              Master_Log_File: mysql-bin.000053
          Read_Master_Log_Pos: 927644340
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 37414556
        Relay_Master_Log_File: mysql-bin.000053
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
# mysql 的配置
...
  Replicate_Wild_Ignore_Table: mysql.%
                   Last_Errno: 0

参考