天天看點

資料庫多源複制同步錯誤修複

報錯是這樣的:

發現有一個資料庫報錯了。報錯如下。

Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000029, end_log_pos 6389312. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

解決方法:

進入從伺服器,mysql

1.檢視從庫狀态

mysql> show slave status;

2.按照從庫的提示查找原因。

select * from performance_schema.replication_applier_status_by_worker\G

是說主庫某個表删除時,從庫卻找不到删除的記錄。

網上對類似問題有修複的方法。

<a href="http://blog.csdn.net/u011277123/article/details/53487831">http://blog.csdn.net/u011277123/article/details/53487831</a>

<a href="http://www.bcty365.com/content-35-5816-1.html">http://www.bcty365.com/content-35-5816-1.html</a>

MySQL5.7多源複制(Multi-Source Replication)

因一下沒看明白。(後續實踐,再補充)

3.先停止主從同步。

mysql&gt; stop slave;

4.用navicate工具把資料庫同步。

navicate的菜單欄,工具-&gt;資料同步。

先 結構同步,再 資料同步。

然後,同步完後,到主庫。用指令。

mysql&gt;SHOW MASTER STATUS;

因為我這裡做的是多源複制。是以把兩個資料庫同步後,先後記錄下來。

得到:

'mysql-bin.000029', '20698487', 

'mysql-bin.000042', '84950954',

5.清空原來的同步設定

mysql&gt;reset slave all;

6.再設定同步。

下面的ip位址,username,password,是舉例的。大家按自己的來。

change master to master_host='192.168.0.1',master_user='username1',master_port=3306,master_password='password1',master_log_file='mysql-bin.000029',master_log_pos=20698487 for channel 'databasename1';

change master to 

master_host='192.168.0.2',master_user='username2',master_port=3306,master_password='password2',master_log_file='mysql-bin.000042',master_log_pos=84950954 for channel 'databasename2';

7.啟動同步

mysql&gt; start slave;

8.檢視同步狀态

同步恢複正常了。

補充:可以單獨

START SLAVE; //啟動所有線程所有通道的複制,常用

START SLAVE SQL_THREAD; //啟動所有通道的SQL_THREAD線程

START SLAVE IO_THREAD; //啟動所有通道的IO_THREAD線程

START SLAVE FOR CHANNEL 'master_3306';

START SLAVE SQL_THREAD FOR CHANNEL 'master_3306';

START SLAVE IO_THREAD FOR CHANNEL 'master_3306';

停止複制指令也START類似,把START換成STOP;

重置可以選擇重置所有和重置單一通道:

RESET SLAVE;

RESET SLAVE FOR CHANNEL CHANNELNAME;

對于多源複制的幾點說明:

使用多源複制要避免源庫是有同名 的庫,這樣在複制時會發生錯誤

對于mysql庫,建議使用REPLICATE_IGNORE_DB将其屏蔽掉,在MySQL5.7裡,已經支援動态對這些參數的操作

CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (mysql);

在主庫上對mysql庫進行操作時,需要加use mysql,否則不會進行過濾

對于REPLICATE_DO_DB也一樣,在操作時需要use db,否則不會進行同步

對于主從複制中出錯,不管是基于binlog_position還是GTID,和普通一對一複制解決思路一樣,隻是在啟動複制的時候單獨啟動這一通道,等這一通道複制沒問題後,再啟動其它通道。例master_3307出錯,本例是基于binlog_position:

STOP SLAVE;

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

START SLAVE FOR CHANNEL 'master_3307';

     本文轉自phpervip 51CTO部落格,原文連結:http://blog.51cto.com/phpervip/2064296,如需轉載請自行聯系原作者