Linux

恢復 mysql 數據庫 - mysql/mysqldump 給出“表 <database>.<tablename> 不存在 (1146)”

  • June 19, 2016

背景故事

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 &gt; 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,我可以列出應該存在的表,但嘗試describeselect轉儲相同的方式出錯:

mysql&gt; show tables;
+----------------------------+
| Tables_in_mediawiki-1_19_1 |
+----------------------------+
| archive                    |
| category                   |
| categorylinks              |

...

| user_properties            |
| valid_tag                  |
| watchlist                  |
+----------------------------+
49 rows in set (0.00 sec)

mysql&gt; 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 &gt; 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指南。

引用自:https://serverfault.com/questions/449201