下午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
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,…等等 這樣自增長主鍵不會重複 |