1. 程式人生 > >mysql主主復制匯總整理

mysql主主復制匯總整理

str 結果 文件名 brush 命令 常見 ast status 解決方法

mysql主主復制匯總整理

一、Mysql主主、主從復制主要思路:

1、mysql復制實質:

就是其他的MySQL數據庫服務器將這個數據變更的二進制日誌在本機上再執行一遍,因此非常重要的一點是mysql數據庫中必須要開啟二進制日誌

2、Mysql主從復制:

就是A為主數據庫,B為從數據庫,BA中數據變更的二進制日誌在它數據庫中重新執行一遍;(B只會隨著A改變,A不會隨著B改變

3、Mysql主主復制:

就是A數據庫、B數據庫互相同步數據,AB都將彼此的數據變更的二進制日誌在自身數據庫中重新執行一遍,就是兩個主從復制的整合;(AB互相跟隨彼此進行改變

二、Mysql主主復制操作步驟:

假定A庫、B庫要實現主主復制:

1、在主庫中創建從庫登錄的賬號、密碼,並對賬號進行授權:

創建賬號:

CREATE USER ‘myuser‘@‘localhost‘ IDENTIFIED BY ‘mypassword‘;

授權:

技術分享圖片

2、修改mysql配置文件:一般Linux中的MySQL配置文件都在/etc/my.cnf(windows中的配置文件為mysql.ini

A庫配置文件增加以下配置信息:(信息見mysql_copy_update_info.txt文件)

#註意在mysql配置文件中填寫一下信息的位置,必須為此位置,即[mysqld]標簽下面
[mysqld]

#任意自然數n,只要保證兩臺MySQL主機不重復就可以了
server-id=1

#起始值。一般填第n臺主MySQL。此時為第一臺主MySQL
auto_increment_offset=1

#步進值auto_imcrement。一般有n臺主MySQL就填n
auto_increment_increment=2

#開啟二進制日誌
log-bin=mysql-bin

log-error=/mysqldata/mysqld.log

pid-file=/mysqldata/mysqld.pid

#與此從庫相對應的主庫的ip地址
master-host=192.168.15.185

#在相對應的主庫中,此庫可登錄的賬號
master-user=backup

#在相對應的主庫中,此庫可登錄的密碼
master-password=123456


#在相對應的主庫中登錄的端口號
master-port=3306

#要同步的數據庫,默認所有庫,指定多個庫添加新行就可以
replicate-do-db=phpcmsv9

#不要同步的數據庫,指定多個庫添加新行就可以
replicate-ignore-db=mysql

master-connect-retry=60

B庫配置文件增加的配置信息與A庫中增加信息完全一致,除了server-idauto_increment_offset不同外;

3、設置編碼格式(否則中文容易出現亂碼):

增加的配置信息如下圈出信息,如果有些標簽[]中在mysql配置文件中默認沒有的,自己手動添加(詳情見character_encoding_info.txt文件)

[mysql]

default-character-set=utf8

[mysqld]

default-character-set = utf8
character_set_server = utf8

[mysqld_safe]

default-character-set = utf8

[mysql.server]

default-character-set = utf8

[client]

default-character-set = utf8

4、重新啟動mysql數據庫:

Mysql命令:service mysqld restart;

5、查看相對應的主庫的二進制文件名及其位置:

在主庫中用mysql命令:show master status;

技術分享圖片

6、在本庫中告知相對應主庫二進制文件名及其位置的信息:

A為主庫,B為從庫時,在B庫中執行mysql命令:(詳細信息請見文件change_master_to_info.txt文件)

change master to master_host=‘172.20.109.14‘,master_user=‘mysql913‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000056‘,master_log_pos=151744220;

技術分享圖片

B為主庫,A為從庫,在A庫中執行同上命令,參數進行適當修改;

7、分別啟動各自的slave

分別在各自庫中執行mysql命令:slave start;

8、查看slave啟動後的狀態:

分別在各自庫中執行mysql命令:SHOW SLAVE STATUS\G;

主要是觀察:

(1)紅圈的兩個參數是否都是YES,如果不是,那麽就是出現了異常,查看第一行的錯誤提示,進行異常處理,對於常見的異常處理見四中進行解決;

(2)紅線為復制的數據庫,查看是否是自己需要復制的數據庫,如果不正確,那麽久需要修改mysql的配置文件中的信息,重新從頭執行一遍;

技術分享圖片

9、完成主主復制配置,進行數據測試:

三、Mysql主從復制操作步驟:

與上述主主復制步驟類似,只是主主復制對兩個庫都進行操作,主從復制只需要對從庫進行change master to操作,對主庫只需要配置開啟二進制、server-id即可,對從庫配置信息同上;

四、如何在現有主主上添加庫:

1、在使用的mysql上先根據需要創建庫,並創建需要的表添加數據;

2、在另一臺mysql上同樣創建對應的庫,並將對應庫中的數據copy過來;

3、分別修改mysql的配置文件中的replicate-do-db新增加一行,值就是要新添加的庫,然後重新啟動mysql服務;

4、然後通過linux命令進入mysql,查看slave是否正確啟動,如果啟動有異常進行處理,確保正常啟動;

5、新添加的庫就到了主主復制鏈中,進行測試即可;

五、如何在現有主主上去掉某個庫:

1、分別修改mysql對應的配置文件,將需要去掉的庫的replicate-do-db註釋掉或者刪掉;

2、重新啟動mysql服務;

3、進去mysql中,分別查看mysql的日誌文件信息:change master status

4、分別重新執命令行start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=216,將從庫中讀取二進制日誌信息位置切換到對應主庫現有位置中去;

5、完成對某個庫的去掉功能;

六、Mysql主主和主從復制常見異常處理:

1、Slave_IO_State: Waiting to reconnect after a failed registration on master異常:

解決方法:

對應主庫從新對對應賬號執行授權命令

grant replication slave on *.* to "repl‘@‘%‘ identified by ‘sangfordb‘;

FLUSH PRIVILEGES;

然後重新stop slave 和start slave就可以

2、Slave_IO_State:connecting to master

解決方法:

原因是此賬號無法連接主庫,查看賬號遠程登錄?Linux防火墻端口開放?

3、slave_sql_runningNO異常:

解決方法:

跳過執行報錯的sql就好了,在從庫中執行mysql命令:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1(等號後為幾看自己有幾個錯誤了,不知道的就嘗試,直到SHOW SLAVE STATUS查看結果該異常解決掉為止)

4、Slave啟動正常,就是不同步數據:

原因:出現此情況的原因就是,從庫中獲取主庫的二進制信息的文件名和位置與主庫中最新數據位置不一致;

解決方法:查看主庫的二進制文件名和信息:change master status;然後在從庫中執行:start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=216;命令,將從庫中獲取主庫二進制文件信息更新到主庫現有狀態,如果是主主復制那就在兩臺mysql中分別執行即可;

七、Mysql主主和主從復制服務器異常停止後處理思路:

(1)mysqlslave出現異常管理員如何獲知:

1slave異常獲知:編寫一個shell腳本,用nagios監控slave的兩個yesSlave_IOSlave_SQL進程),如發現只有一個或零個yes,就表明主主或主從出問題了,發短信警報;

(2)管理員手動處理異常的步驟:

直接將出現異常的那臺服務器或mysql重新啟動就好了,另一臺數據庫中改動的數據會自動同步到重新啟動的mysql庫中;

八、Mysql主主復制中某個庫或某個表因為數據原因不能同步異常

1、將該庫或該表未同步的數據導出.sql文件,通過命令:

mysqldump -uroot -p --master-data --single-transaction -R --databases zzcp03 > zzcp03.sql

2、在導出的sql裏面查找當前的日誌文件以及位置(change master to )

3、將另外對應的數據庫中slave stop了,然後讓salvesql文件中的位置處開始,通過命令實現:

start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=769;

4、然後讓salve start起來;

5、查看兩臺mysql中的slave是否正常啟動,不是不正常進行處理,確保正常啟動,這樣就可以完成該表的數據同步了;

附兩個功能代碼:

導出某個庫或表在slave不同步信息期間的增、刪、修數據信息,並且帶有二進制文件信息:

mysqldump -uroot -p --master-data --single-transaction -R --databases zzcp03 > zzcp03.sql 

讓slave獲取的master二進制信息從指定的位置處開始:

start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=769;

mysql主主復制匯總整理