最近發現舊的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天!!)