恢复mysql数据库 – mysql / mysqldump给出“table <database>。<tablename>不存在(1146)”

背景故事

Ubuntu死了(不会启动),我无法修复它。 我启动了一个现场光盘恢复重要的东西,并将其保存到我的NAS。 我备份的其中一个是/ var / lib / mysql。

重新安装了Linux Mint,因为我在Ubuntu 10.0.4上,这是尝试一个新的发行版(我不喜欢Unity)的好机会。 现在我想恢复旧的mediawiki,所以我closures了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) 

我试图login到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 / root目录中的其他一些ib *文件)与我的新安装的mysql不一致。 你不能只放在旧的MySQL /目录的数据库文件,并期望它的工作。

我所做的恢复数据库是在全新的安装中备份我当前的/ 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 /以供参考)。 这可能会有更高效的命令,但我包括我所知道的完整性,以防经验较less的人可能需要它。

 $ 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 。

你可以试试:

  1. 确保表的数据文件实际上存在于/var/db/mysql ,或者是你的特定安装/发行版放在哪里。
  2. 仔细阅读mysql错误日志,通常在上面的目录中。
  3. 使用mysqlcheck --repair 。
  4. 把mySQL离线并运行一个myisamchk 。
  5. 希望你在其他地方有一个好的备份,或者归档表不是非常重要的。