1. 程式人生 > >mysql資料庫叢集的故障恢復

mysql資料庫叢集的故障恢復

問題:伺服器宕機之後資料庫無法啟動(資料庫檔案損壞,非正常重啟導致的檔案損壞)

描述:資料庫是mycat+mysql的讀寫分離叢集

解決方式

尋找問題的過程

伺服器宕機了之後,重啟全部的mysql,mycat,keepalived,haproxy。然後通過虛擬ip訪問資料庫,可用正常連線,但是查詢資料的時候報錯:

去到mycat的日誌

mycat/log/mycat.log。

看見無法獲取一些資料庫的連線。

登陸到相應的伺服器後,檢視mysql的監聽狀態

netstat -antp | grep mysql

發現有幾個埠沒有監聽,即相應的mysql服務沒有啟動

啟動是使用mysqld_multi的方式啟動的多例項,報錯資訊在mysql資料夾下的mysqld_multi.log

mysql的報錯日誌在這個日誌裡面有路徑可以找

找到報錯日誌之後,翻到最後的err

百度了一下是資料庫檔案損壞,實際上大概意思是innodb的頁損壞。

因為是讀寫分離的資料庫,所以去相應的資料庫上可以找資料,備份過來,然後直接重灌資料庫,進行資料恢復。下面是沒有從庫(或者主庫)的恢復方式。

1、設定innodb_force_recovery=6(my.cnf,一般在/etc/my.cnf) 2、啟動mysql 3、匯出資料-> mysqldump -u root -p123456 --all-databases > all.sql 4、去除innodb_force_recovery設定 5、刪除資料庫(data等資料夾) 6、重新安裝mysql 7、重新設定密碼-- mysqladmin -u使用者名稱 -p舊密碼 password 新密碼  

8、重新設定使用者-- 登陸密碼,登陸許可權等 9、匯入資料 mysql -u root -p123456 < "D:\MySQL 5.5\bin\all.sql"

如果是從庫的備份資料恢復,需要新增相應的讀寫使用者然後設定許可權,一般讀寫用的是不同使用者,從庫只有讀使用者,主庫只有寫使用者。

然後全部恢復之後再進行訪問,就可以了。

注:除了資料庫之外,伺服器重啟的時候,發現mycat和mysql都無法啟動,mysql報錯資訊是無法開啟mysqld_multi.log,實際上是因為檔案系統被設定成只讀的了。。這個時候檢視許可權還是一切正常的,但是已經無法寫入了,即使是root,難道是把硬碟拔了嗎。。。聯絡相應的人處理了之後,可以啟動。