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

下午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.主配置a1
vi /etc/my.cnf
 
確定以下參數
 
server-id       = 1
# 啓動logbin
log-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       = 3
log-bin=mysql-bin
expire-logs-days  = 7
replicate-ignore-db=mysql,test
log-slave-updates
 
 
3.從配置a2
 
vi /etc/my.cnf
server-id       = 2
replicate-ignore-db=mysql,test
# 僅作爲從配置logbin好像不需要開(事實證明需要開)
log-bin=mysql-bin
expire-logs-days  = 7
# 這個沒必要開
# log-slave-updates
 
 
不同的地方就是原來的主庫也啓動從複製
 

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,…等等

這樣自增長主鍵不會重複

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章