seopc流量排名官網(wǎng)超級seo外鏈
今天介紹兩種mysql主從同步跳過錯誤的方法:
一、兩種方法介紹
1、跳過指定數(shù)量的事務(wù):
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳過一個事務(wù)
mysql>slave start
2、修改mysql的配置文件,通過slave_skip_errors參數(shù)來跳所有錯誤或指定類型的錯誤
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳過指定error no類型的錯誤
#slave-skip-errors=all #跳過所有錯誤
二、試驗環(huán)節(jié)
下面模擬一個錯誤場景
1、環(huán)境(一個已經(jīng)配置好的主從復(fù)制環(huán)境)
master數(shù)據(jù)庫IP:192.168.0.201
slave數(shù)據(jù)庫IP:192.168.0.202
mysql版本:8.0.23
binlog-do-db = mydb
2、在master上執(zhí)行以下語句:
mysql>use mysql;
mysql>create table t1 (id int);
mysql>use mydb;
mysql>insert into mysql.t1 select 1;
在slave上查看復(fù)制狀態(tài)
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.200Master_User: slave1Master_Port: 3306Connect_Retry: 60Master_Log_File: master-bin.000084Read_Master_Log_Pos: 19843Relay_Log_File: slave-relay-bin.000004Relay_Log_Pos: 1982Relay_Master_Log_File: master-bin.000084Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1146Last_Error: Error 'Table 'mysql.t1' doesn't exist' on query. Default database: 'mydb'. Query: 'insert into mysql.t1 select 1'Skip_Counter: 0Exec_Master_Log_Pos: 2319Relay_Log_Space: 2145Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_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: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 1146Last_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: 2013306Master_UUID: ed5a23af-1650-11ee-84bd-0242ac110002Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Master_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: 231210 21:37:19Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0
1 row in set (0.00 sec)
由結(jié)果可以看到,Read_Master_Log_Pos: 19843,Exec_Master_Log_Pos: 2319時出錯了Last_SQL_Error: Error ‘Table ‘mysql.t1’ doesn’t exist’ on query.
因為只對mydb記錄了binlog,當(dāng)在mydb庫操作其它數(shù)據(jù)庫的表,但該表在slave上又不存在時就出錯了。
如果在配置文件中忽略了該錯誤,則主從集群不會因為上述問題而停止工作。