天天看點

記一次 MariaDB 崩壞 恢複

檢查日志的時候發現 mariadb 報了好多錯,最近一段時間 一直有崩潰的;并且正好趕上要修改資料庫看表字段,較多表要修改。

雖然修改表理論上是不會蹦了書庫的,單最後結果是崩潰頻率增加,當天下午到晚上就起不來資料庫庫了,我也要崩了!!!∑(゚Д゚ノ)ノ

1. 解決啟動崩潰

然後 根據錯誤查找解決辦法:

140605 13:39:32 [ERROR] Plugin 'InnoDB' init function returned error.
140605 13:39:32 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140605 13:39:32 [ERROR] Unknown/unsupported storage engine: InnoDB
140605 13:39:32 [ERROR] Aborting      

解決辦法: 删日志》》 資料庫資料檔案夾下的 ib_logfile0,ib_logfile1 檔案,删除後果然可以了;

但是很快又蹦了,并且啟動不了,根據錯誤訓示,加 innodb_force_recovery 參數 ;

然後嘗試,從1到6,一直試到5 才能啟動。

2. 備份

然後趕快備份咯。

mysqldump -uusername -ppswd dbname > 20210712.dbname.sql      

這樣單庫備份過程中經常遇到備份到某個表時資料庫又蹦了,添加忽略參數忽略這個表吧:

mysqldump -uuser -ppswd dbname --ignore-table=dbname.t1 --ignore-table=dbname.t2 --ignore-table=dbname.t3 --ignore-table=dbname.t4 --ignore-table=dbname.t5 > 20210712.dbname.sql      

但是後來遇到 一個庫裡好多個表會蹦庫~!

這招不行,重新來過的過程和次數太折磨人了~~~ 庫大,耗時

并且這些表也是重要的表,要備份的!

遂嘗試了 單個表備份,發現這會蹦的表,單個備份時竟然不蹦了~!!

于是,寫腳本吧,一個庫的表一個批次:

mysqldump -uusername -ppswd dbname t1 >> 20210712.dbname.sql
mysqldump -uusername -ppswd dbname t2 >> 20210712.dbname.sql
mysqldump -uusername -ppswd dbname t3 >> 20210712.dbname.sql      

注意: 是雙箭頭重定向符号

儲存為 bk_dbname ,然後執行 bash bk_dbname

3. 重建立庫

把原資料檔案夾 改名,重建立立一個同樣名稱的檔案夾,改權限 

chown -R mysql.mysql /var/lib/mysql      

建立初始資料,和 初始化mysql 等

mysql_install_db
mysql_secure_installation      

然後連接配接上 建立各個資料庫, 然後還原

mysql -hhostname -uusername -ppassword dbname < backupdb.sql      

4. 最後發現,可以更簡單的操作

配置多執行個體,可以直接從壞庫導入到新庫!

echo dump table  t1
mysqldump -c -n --insert-ignore  -uuser -ppswd -S/data/3308/mysql.socket dbnamet1| mysql -uuser -ppswd dbname
echo dump table  t2
mysqldump -c -n --insert-ignore  -uuser -ppswd -S/data/3308/mysql.socket dbnamet2| mysql -uuser -ppswd dbname      

-S 參數指定 壞庫的 socket 檔案路徑

多執行個體(飛機傳送),配置上并不複雜,新版更輕松。

PS: 最後, 檢查日志, 是一個表的索引壞了引起崩潰,然後其他表也出現了索引壞了,最後大蹦.

--- auth:lzpong