考驗mysql主從同步的事情發生了

來源:互聯網
上載者:User

下午3點,伺服器當機,隔了幾分鐘之後恢複,遠端連線Windows虛擬機器,顯示非順利關機,應該是機房跳閘了

 

網站有些不正常,應該是非順利關機資料庫損壞所致,需要修複資料

登入從伺服器,show slave status\G,顯示同步狀態還是正常的

於是關閉主伺服器的mysql,運行

/mysql/bin/myisamchk -r /mysql/data/bbs/*.MYI

修複資料庫

完成之後開啟mysql

service mysql start

網站正常了,再登入從伺服器查看show slave status\G

 

Slave_IO_Running: No

Slave_SQL_Running: Yes

同步居然出問題了

令一台從伺服器出的問題剛好相反,此從庫位於最末端,和主從庫是一台伺服器,也因為掉電資料損毀了

 

Slave_IO_Running: Yes

Slave_SQL_Running: No

 

 

為什麼修複之前同步是正常的,這個有點搞不明白了

 

 

當時主伺服器掛掉之後本來考慮立即將串連資料庫改到從庫上面,但因為配置的不是互為主從模式,而從和主目前同步是正常的,如果這樣切換回來又需要重新設定主從,所以還是選擇耽誤些時間修複主要資料庫,誰知道修複之後同步反而終止了

 

有個問題需要搞明白:

今後肯定要修改為互為主從模式,已方便主庫出狀況的時候隨時切換,然後修複主庫之後切換回來,但不知道這樣會不會依然出現上述狀況

 

看來今晚又要熬夜做配置了

 

先整理下互為主從的配置步驟:

三台msyql伺服器,兩台互為主從,另一台隨便作為哪個主的從都可以,只是用來做資料定時備份。互為主從的伺服器要求能隨時切換,肯定不能是同一台伺服器裡的虛擬機器,因為母機當掉了兩台mysql也都當掉,就失去了切換的意義

 

伺服器A:58.55.142.168

兩台mysql伺服器a1和a2處於內網

a1:10.0.0.82

a2:10.0.0.81

伺服器B1:161.18.41.72

 1.主配置a1vi /etc/my.cnf 確定以下參數 server-id       = 1# 啟動logbinlog-bin=mysql-bin# 記錄檔保留天數,以免日誌持續增長撐滿硬碟expire-logs-days  = 7# 需要同步資料庫,多個資料庫用逗號分開發現啟用了replicate-do-db=bbs,ucenter居然不能同步,還是換回replicate-ignore-db=mysql,test這個參數,好在重新啟用之後同步正常了,但是和主庫之間少了些資料)# replicate-do-db=bbs,ucenter# 排除同步資料庫replicate-ignore-db=mysql,test# 配置從庫上的更新操作是否寫入二進位檔案。# 如果這台從庫,還要做其他從庫的主庫,那麼就需要打這個參數,以便從庫的從庫能夠進行日誌同步。log-slave-updates  2.主配置B1 vi /etc/my.cnf確定以下參數 server-id       = 3log-bin=mysql-binexpire-logs-days  = 7replicate-ignore-db=mysql,testlog-slave-updates  3.從配置a2 vi /etc/my.cnfserver-id       = 2replicate-ignore-db=mysql,test# 僅作為從配置logbin好像不需要開事實證明需要開)log-bin=mysql-binexpire-logs-days  = 7# 這個沒必要開# log-slave-updates  同步設定參考:http://tt520.blog.51cto.com/4530575/1122155不同的地方就是原來的主庫也啟動從複製 

CHANGE MASTER TO MASTER_HOST='161.18.41.72', MASTER_PORT=3306,MASTER_USER='slave', MASTER_PASSWORD='123456';

start slave;

另外以前的從庫必須刪除data目錄下的master.info,relay-log.info,localhost-relay-bin.xxxxx這些檔案

然後啟動mysql重新設定從複製

 

CHANGE MASTER TO MASTER_HOST='58.55.142.168', MASTER_PORT=3306,MASTER_USER='slave', MASTER_PASSWORD='123456';

start slave;

 

 

需要注意的地方,配置同步時主庫必須鎖表,防止資料寫入,等兩邊庫都顯示同步狀態正常再解鎖,擔心鎖表失效的話可以暫時斷開網站與mysql的串連是一樣的

  

 2013.01.20 測試結果:

10.0.0.81 本地從庫沒過多久就同步出錯,不知道是不是因為用網頁串連資料庫查看同步狀況導致,好像discuz論壇點擊就產生寫操作,我把資料庫鎖定為唯讀狀態無法訪問

161.18.41.72 同步正常,但把網站串連切換到這個庫的時候,主庫10.0.0.82顯示同步狀態正常,但沒有同步他的資料,切換回來兩邊同步狀態都報錯了

 

Slave_IO_Running: Yes

Slave_SQL_Running: No

互為主從配置看來失敗了,目前看來上述配置依然是單一主從配置

 

 

 

 

 用兩台虛擬機器測試互為主從,修改了一些配置

10.0.0.81

10.0.0.83

 

10.0.0.81 vi /etc/my.cnf

 

server-id = 1

log-bin=mysql-bin

replicate-ignore-db = test,mysql,information_schema,performance_schema

log-slave-updates

auto_increment_offset = 1

auto_increment_increment = 2 slave-skip-errors=all  

10.0.0.83 vi /etc/my.cnf

 

server-id = 3

log-bin=mysql-bin

replicate-ignore-db = test,mysql,information_schema,performance_schema

log-slave-updates

 

auto_increment_offset = 2

auto_increment_increment = 2

slave-skip-errors=all

 

 

 

 

分別在兩邊的資料庫插入資料,檢測同步成功

 

log-slave-updates  不加上=on參數也能用

slave-skip-errors=all 跳過錯誤,以免錯誤引起同步終止

 

這兩個參數主要解決Mysql複製技術中的主鍵衝突

auto_increment_offset = N     第N台機器

auto_increment_increment = 5  總共多少台機器

假設有5台機器,因此,第一台機器的序列為:1,6,11,…;第二台機器的序列為:2,7,12,…;第三台機器的序列為:3,8,13,…等等

這樣自增長主鍵不會重複

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.