恢復 mysql 數據庫 - mysql/mysqldump 給出“表 <database>.<tablename> 不存在 (1146)”
背景故事
Ubuntu 死了(無法啟動),我無法修復它。我啟動了一張 live cd 來恢復重要的東西並將其保存到我的 NAS。我備份的其中一件事是 /var/lib/mysql。
因為我使用的是 Ubuntu 10.0.4,所以重新安裝了 Linux Mint,這是嘗試新發行版的好機會(我不喜歡 Unity)。現在我想恢復我的舊媒體維基,所以我關閉了 mysql 守護程序,
cp -R /media/NAS/Backup/mysql/mediawiki@002d1_19_1 /var/lib/mysql/
正確設置文件所有權和權限,並啟動 mysql 備份。問題
現在我正在嘗試導出數據庫,以便可以恢復數據庫,但是當我執行 mysqldump 時出現錯誤:
$ mysqldump -u mediawikiuser -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz Enter password: mysqldump: Got error: 1146: Table 'mediawiki-1_19_1.archive' doesn't exist when using LOCK TABLES
我嘗試過的事情
我嘗試使用
--skip-lock-tables
,但我得到了這個:Error: Couldn't read status information for table archive () mysqldump: Couldn't execute 'show create table `archive`': Table 'mediawiki-1_19_1.archive' doesn't exist (1146)
我嘗試登錄到 mysql,我可以列出應該存在的表,但嘗試
describe
與select
轉儲相同的方式出錯:mysql> show tables; +----------------------------+ | Tables_in_mediawiki-1_19_1 | +----------------------------+ | archive | | category | | categorylinks | ... | user_properties | | valid_tag | | watchlist | +----------------------------+ 49 rows in set (0.00 sec) mysql> describe archive; ERROR 1146 (42S02): Table 'mediawiki-1_19_1.archive' doesn't exist
我相信 mediawiki 是使用 innodb 和二進制數據安裝的。
我搞砸了還是有辦法恢復這個?
發現有人問類似的問題:MySQL > 表不存在。但它確實(或應該)。
Mike Dacre的答案解決了我的問題。問題是 ib_logfile0 和 ib_logfile1(可能還有 mysql/ 根目錄中的一些其他 ib* 文件)與我新安裝的 mysql 不一致。您不能只從舊的 mysql/ 目錄中放入 db 文件並期望它能夠工作。
我為恢復數據庫所做的是在全新安裝時備份我目前的 /var/lib/mysql/ :
$ sudo service mysql stop # Stop mysql. Command could be different on different distros $ sudo mv /var/lib/mysql ~/mysql.bku
然後將緊急備份目錄複製到/var/lib
$ sudo cp -R /media/NAS/Backup/mysql /var/lib/
然後適當地設置權限(如果需要,請參閱 ~/mysql.bku/ 以供參考)。可能有更有效的命令,但我包括我所知道的完整性,以防經驗較少的人可能需要它。
$ sudo chown -R mysql:mysql /var/lib/mysql $ sudo find /var/lib/mysql/ -type d -exec chmod 700 {} \; $ sudo find /var/lib/mysql/ -type f -exec chmod 660 {} \; $ sudo chmod 644 /var/lib/mysql/debian-5.1.flag # Not sure what this is but the permissions were a bit different so include it just in case
並再次啟動mysql
$ sudo service mysql start # Again command might be different on different distros
然後我備份了我需要的數據庫:
$ mysqldump -u root -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz
完成後,我將 mysql/ 目錄放回原處,然後從轉儲文件中導入數據庫。
$ sudo service mysql stop $ sudo mv /var/lib/mysql ~/mysql-discard # Too nervous to start typing "sudo rm -r /" for /var/lib/mysql, so move it away instead $ sudo mv ~/mysql.bku /var/lib/mysql $ sudo service mysql start
問題解決了,我現在可以正確導出數據庫,並且 mysql 也可以正常執行。剩下的就是遵循從備份恢復 wiki指南。