概述
mysql雙主配置很簡單全跨,似乎大家都只關(guān)心他的安裝和部署努溃,大家可以用他來做雙活的方案泽本,并沒有深刻的思考過生產(chǎn)環(huán)境后續(xù)管理的風險和如何規(guī)避這些問題蠢琳。
配置重點
1. 配置文件
log-slave-updates = true
auto_increment_offset = 1 #另外一個主B是2,其他一樣疑苔。
auto_increment_increment = 2
replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = undolog
replicate_wild_ignore_table = mysql.%
replicate_wild_ignore_table = sys.%
replicate_wild_ignore_table = information_schema.%
replicate_wild_ignore_table = performance_schema.%
replicate_wild_ignore_table = undolog.%
2. 其他配置甫匹,如果是生產(chǎn)環(huán)境改造的話,需要特別注意
- service_id當然不能一樣惦费。
- masterB是用masterA的xtrabackup備份恢復生成兵迅。 mysqldump默認參數(shù)其實很不到位的,當然大部分情況mysqldump沒啥問題薪贫。但是如果有下面的問題的話恍箭,mysqldump要慎用:
(1) .你剛好有存儲過程,mysqldump需要加另外的參數(shù)。
(2) .你剛好不是utf8mb4后雷,原庫要支持表情季惯,然后mysqldump剛好默認是utf8的話,就沒有了臀突。
(3). 你在調(diào)試的是生產(chǎn)環(huán)境勉抓,加--master-data=2來記錄binlog點,鎖表業(yè)務(wù)就會找上門來候学。 - binlog這些當然是兩邊都要開
管理上需要注意的問題
1. 不要發(fā)放DDL賬號藕筋,避免開發(fā)人員自行變更數(shù)據(jù)庫表結(jié)構(gòu),導致1167錯誤
雙主如果一邊更新表結(jié)構(gòu)梳码,一邊在寫入隐圾,即使你認為你的的sql沒有問題。但是mysqlbinlog的寫入日志不是這樣的掰茶,比如row格式暇藏,需要回放的日志如下下面,你修改表結(jié)構(gòu)之前是可以插入的濒蒋,中間查多一列的話盐碱,你的列對不上了,導致1167錯誤沪伙。目前有兩種辦法可以規(guī)避這個問題:
- 這種表結(jié)構(gòu)更新可以鎖表瓮顽,不讓另外一邊寫入再執(zhí)行。
- 還有一種辦法是列只可以在最后加列围橡,要有默認值暖混。這樣即使表結(jié)構(gòu)發(fā)生了變更,中繼日志還是可以回放的翁授。不至于雙主同步報錯拣播。
2. 雙主有忽略庫
如果忽略了一些庫,比如mysql的庫收擦,創(chuàng)建賬號的時候诫尽,就需要兩邊創(chuàng)建。