Mat*_*hew 6 mysql linux database-restore database-backup
背景故事
Ubuntu 死了(无法启动),我无法修复它。我启动了一张 live cd 来恢复重要的东西并将其保存到我的 NAS 中。我备份的其中一件事是/var/lib/mysql。
使用 Linux Mint 重新安装,因为我使用的是 Ubuntu 10.0.4,这是尝试新发行版的好机会(我不喜欢 Unity)。现在我想恢复我的旧 mediawiki,所以我关闭了 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
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情
我尝试使用,--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)
Run Code Online (Sandbox Code Playgroud)
我尝试登录到 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
Run Code Online (Sandbox Code Playgroud)
我相信 mediawiki 是使用 innodb 和二进制数据安装的。
我搞砸了还是有办法恢复这个?
发现有人问类似的问题:MySQL > 表不存在。但确实如此(或者应该如此)。
迈克·达克雷(Mike Dacre)的答案解决了我的问题。问题是 ib_logfile0 和 ib_logfile1 (可能还有 mysql/ 根目录中的其他一些 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
Run Code Online (Sandbox Code Playgroud)
然后将紧急备份目录复制到/var/lib
$ sudo cp -R /media/NAS/Backup/mysql /var/lib/
Run Code Online (Sandbox Code Playgroud)
然后适当设置权限(如果需要可以参考~/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
Run Code Online (Sandbox Code Playgroud)
并再次启动mysql
$ sudo service mysql start # Again command might be different on different distros
Run Code Online (Sandbox Code Playgroud)
然后我备份了我需要的数据库:
$ mysqldump -u root -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz
Run Code Online (Sandbox Code Playgroud)
完成后,我将 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
Run Code Online (Sandbox Code Playgroud)
问题解决了,我现在可以正确导出数据库,并且 mysql 也可以正常运行。剩下的就是按照从备份恢复 wiki指南进行操作。
| 归档时间: |
|
| 查看次数: |
37106 次 |
| 最近记录: |