今天突然发现我的两台MySQL服务器数据不会同步了,对于主备一致性不严格的数据库,当出现同步错误之类时,跳过错误SQL修复同步问题,可通过以下解决方法:
登录从服务器检查同步状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: No
Exec_Master_Log_Pos: 114676856
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '193' for key 'PRIMARY'' on query. Default database: 'ssldb'. Query: 'insert slave_no_skip1 values (193,'y10')'
1 row in set (0.00 sec)
4、导致错误的语句是: insert slave_no_skip1 values (193,'y10');
OK,有了以上几个内容就好办了,着手解决问题吧。
接下来切换到主服务器:
mysql> SHOW BINLOG EVENTS in 'mysql-bin.000005‘ from 114676856 limit 5;
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| mysql-bin.000005 | 114676856 | Query | 1 | 114676857 | use `ssldb`; insert slave_no_skip1 values (193,'y10') |
发现第一行就是执行错误的行,下面就简单了。
我们可以利用SET GLOBAL sql_slave_skip_counter命令来跳过这个错误,从而回到正常的运行轨道中。
在 从服务器键入以下命令:站长教学网 eduyo.com
slave stop; 停止同步
SET GLOBAL sql_slave_skip_counter =1 执行跳过错误, 后面的参数可以理解为 上面SHOW BINLOG命令显示结果的第几行,例如错误出现在第几行就写几。
slave start; 开始同步,问题解决。
当
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
时,即说明同步又运行起来了
(责任编辑:ken)