mariadb還原發生的問題

最近發現舊的moodle被通知有bug需要更新,於是就把原來的moodle資料庫做備份、還原,

但是以前我用的是不好的方法:複製/var/lib/mysql/moodle的整個目錄

升級moodle看到了幾個要修正的狀況,於是自己亂搞,居然把mariadb弄到不能啟動了!!!

好吧,乾脆重新安裝mariadb,but 居然出現設定安裝錯誤的訊息,安裝失敗。

這下慘了!!!

參考了一些網站資料,原來要先完全清除,原來的/var/lib/mysql 資料庫都要清空,於是我mv /var/lib/mysql /var/lib/mysql.back ,總算將mariadb 安裝起來了。

然後我將原來的moodle、lifetype、xoops目錄搬回原位,又開始了惡夢!server 出現table doesn’t exist in engine。

這時我傻傻的沒有上網查資料,因為我有用phpmyadmin備份moodle過,有.sql的檔案,於是傻傻的使用

mysqldump -u root -p moodle < moodle.sql

奇怪!沒有反應!!!上網查了半天,原來這是mysql的還原指令,mariadb的還原指令是

mysql -u root -p moodle –force < moodle.sql

–force是忽略錯誤訊息,硬是還原了回來。

moodle還原回來了,可是xoops卻還是死的!!!還是table doesn’t exist in engine

用關鍵字 table doesn’t exist in engine 搜尋,找到 http://blog.752club.com/mariadb-mysql-table-doesnt-exist-in-engine-error/

出現這種情形,倒也不是MariaDB的關係,而是InnoDB這個資料庫引擎,以往舊的MySQL主要採MyISAM引擎,資料庫檔案有.MYD(資料)與.MYI(索引)兩個型式,此架構用複製貼上就不會有什麼問題。而被新版MariaDB與MySQL採用的InnoDB引擎,則是.frm與.ibd,若要使用複製貼上的方式備份,除了備份以上檔案外,還需將data目錄底下的ibdata1也複製,才能正確復原。

還好我剛剛沒把壞掉的資料庫刪除,先把新建好的備份

mv ibdata1 ibdata1.new ;mv ib_logfile0 ib_logfile0.new ;mv ib_logfile1 ib_logfile1.new ;

把舊的複製過來

cp -a /var/lib/mysql.back/ibdata1 /var/lib/mysql ;cp -a /var/lib/mysql.back/ib_logfile0 /var/lib/mysql ;cp -a /var/lib/mysql.back/ib_logfile1 /var/lib/mysql ;

/etc/init.d/mysql restart

xoops復活了!!but,就是這個but:moodle又死了!!原來是我們修復xoops之前,有重新匯入moodle資料庫,所以ibdata1、ib_logfile0、ib_logfile1有更新過,這下簡單了,因為xoops復活,我重新做文字備份

mysqldump  -u root -p xoops > xoops.sql

然後把ibdata1.new、ib_logfile0.new、ib_logfile1.new改回來,重新把xoops.sql匯入資料庫,

mysql –force -u root -p xoops < xoops.sql

重啟mariadb,所有的資料庫總算沒問題了。(花了我3天!!)

分類: server。這篇內容的永久連結