时间:2021-07-01 10:21:17 帮助过:7人阅读
- <code class="language-shell">mysql>stop slave;
- mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; #跳过一个事务
- mysql>start slave;</code>
- <code class="language-shell">vi /etc/my.cnf
- [mysqld]
- #slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
- #slave-skip-errors=all #跳过所有错误</code>
下面模拟一个错误场景
环境(一个已经配置好的主从复制环境)
master数据库IP:192.168.247.128
slave数据库IP:192.168.247.130
mysql版本:5.6.14
binlog-do-db = mydb
在master上执行以下语句:
- <code class="language-shell">mysql>use mysql;
- mysql>create table t1 (id int);
- mysql>use mydb;
- mysql>insert into mysql.t1 select 1;</code>
在slave上查看复制状态
- <code class="language-shell">mysql> show slave status \G
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.247.128
- Master_User: repl
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin.000017
- Read_Master_Log_Pos: 2341
- Relay_Log_File: DBtest1-relay-bin.000011
- Relay_Log_Pos: 494
- Relay_Master_Log_File: mysql-bin.000017
- 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: 1146
- Last_Error: Error ‘Table ‘mysql.t1‘ doesn‘t exist‘ on query. Default database: ‘mydb‘. Query: ‘insert into mysql.t1 select 1‘
- Skip_Counter: 0
- Exec_Master_Log_Pos: 1919
- Relay_Log_Space: 1254
- 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: 1146
- Last_SQL_Error: Error ‘Table ‘mysql.t1‘ doesn‘t exist‘ on query. Default database: ‘mydb‘. Query: ‘insert into mysql.t1 select 1‘
- Replicate_Ignore_Server_Ids:
- Master_Server_Id: 1
- Master_UUID: f0f7faf6-51a8-11e3-9759-000c29eed3ea
- Master_Info_File: /var/lib/mysql/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: 131210 21:37:19
- Master_SSL_Crl:
- Master_SSL_Crlpath:
- Retrieved_Gtid_Set:
- Executed_Gtid_Set:
- Auto_Position: 0
- 1 row in set (0.00 sec)</code>
由结果可以看到,Read_Master_Log_Pos: 2341,Exec_Master_Log_Pos: 1919 时出错了Last_SQL_Error: Error ‘Table ‘mysql.t1‘ doesn‘t exist‘ on query.
因为只对mydb记录了binlog,当在mydb库操作其它数据库的表,但该表在slave上又不存在时就出错了。
我们可在看看binlog里的事务内容,这里一行代表一个事务
- <code class="language-shell">mysql> SHOW BINLOG EVENTS in ‘mysql-bin.000017‘ from 1919\G
- *************************** 1. row ***************************
- Log_name: mysql-bin.000017
- Pos: 1919
- Event_type: Query
- Server_id: 1
- End_log_pos: 1999
- Info: BEGIN
- *************************** 2. row ***************************
- Log_name: mysql-bin.000017
- Pos: 1999
- Event_type: Query
- Server_id: 1
- End_log_pos: 2103
- Info: use `mydb`; insert into mysql.t1 select 1
- *************************** 3. row ***************************
- Log_name: mysql-bin.000017
- Pos: 2103
- Event_type: Xid
- Server_id: 1
- End_log_pos: 2134
- Info: COMMIT /* xid=106 */
- *************************** 4. row ***************************
- Log_name: mysql-bin.000017
- Pos: 2134
- Event_type: Query
- Server_id: 1
- End_log_pos: 2213
- Info: BEGIN
- *************************** 5. row ***************************
- Log_name: mysql-bin.000017
- Pos: 2213
- Event_type: Query
- Server_id: 1
- End_log_pos: 2310
- Info: use `mydb`; insert into t1 select 9
- *************************** 6. row ***************************
- Log_name: mysql-bin.000017
- Pos: 2310
- Event_type: Xid
- Server_id: 1
- End_log_pos: 2341
- Info: COMMIT /* xid=107 */
- 6 rows in set (0.00 sec)</code>
由上面的结果可知,我们需要跳过两个事务(Pos: 1999 insert,Pos: 2103 commit)
跳过操作:
- <code class="language-shell">mysql>stop slave;
- mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 2; 跳过一个事务
- mysql>start slave;
- mysql> show slave status\G
- ERROR 2006 (HY000): MySQL server has gone away
- No connection. Trying to reconnect...
- Connection id: 3
- Current database: mydb
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.247.128
- Master_User: repl
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin.000017
- Read_Master_Log_Pos: 3613
- Relay_Log_File: DBtest1-relay-bin.000018
- Relay_Log_Pos: 283
- Relay_Master_Log_File: mysql-bin.000017
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Replicate_Do_DB:
- Replicate_Ignore_DB:
- Replicate_Do_Table:
- Replicate_Ignore_Table:
- Replicate_Wild_Do_Table:
- Replicate_Wild_Ignore_Table:
- Last_Errno: 0
- Last_Error:
- Skip_Counter: 0
- Exec_Master_Log_Pos: 3613
- Relay_Log_Space: 458
- 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: 0
- Master_SSL_Verify_Server_Cert: No
- Last_IO_Errno: 0
- Last_IO_Error:
- Last_SQL_Errno: 0
- Last_SQL_Error:
- Replicate_Ignore_Server_Ids:
- Master_Server_Id: 1
- Master_UUID: f0f7faf6-51a8-11e3-9759-000c29eed3ea
- Master_Info_File: /var/lib/mysql/master.info
- SQL_Delay: 0
- SQL_Remaining_Delay: NULL
- Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
- Master_Retry_Count: 86400
- Master_Bind:
- Last_IO_Error_Timestamp:
- Last_SQL_Error_Timestamp:
- Master_SSL_Crl:
- Master_SSL_Crlpath:
- Retrieved_Gtid_Set:
- Executed_Gtid_Set:
- Auto_Position: 0
- 1 row in set (0.01 sec)</code>
复制状态正常。
mysql主从复制跳过错误项
标签:ase int 文件 nlog lang my.cnf error: erro event