导入mysql数据中断,如何恢复?

时间:2012-02-21 14:15:36

标签: mysql database import

我使用

导入了一个大型的mysql数据库 mysql -uroot -ppassword dbName

数据库在此过程中已经消失,可能是由于几天后超时...
有没有办法恢复它?或者我运气不好,需要删除现有的数据库并重新导入?

4 个答案:

答案 0 :(得分:1)

在命令行上使用“--ignore”选项可以帮助“恢复”导入。

语义是它应该忽略任何已经导入的数据,只导入那些尚未存在的数据。

以下是ignore选项的MYSQL文档: http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#option_mysqlimport_ignore

答案 1 :(得分:1)

我正在使用INSERT IGNORE INTO通过流编辑(sed)我的转储文件,如下所示:

nice gunzip < dumpfile.sql.gz | sed -e "s|^INSERT INTO |INSERT IGNORE INTO |g" | nice mysql -uroot -p"password" DBName

答案 2 :(得分:0)

如果您知道查询的最后一个插入点,请将mysqldump文件拆分到该点之前,并将insert替换为insert ignore。在尝试每个事务时,您可能不想插入忽略整个数据集。

此外,mysql服务器已经消失,也可能表示违反max_allowed_packet大小。

答案 3 :(得分:-1)

“数据库已经消失”通常表示服务器崩溃,检查你的mysql日志/var/log/mysqld.log或者如果没有运行;

SELECT * FROM GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'LOG_ERROR';

我从来没有断开客户端连接,即使是在网络上运行一周。它看起来像你在本地连接所以不太可能断开连接。

如果您想恢复,可以执行以下操作;

  • 检查错误日志以查看错误原因并首先解决此问题
  • Grep转储文件; grep -irH'DROP TABLE'
  • 比较恢复到grep结果的表格;记下最后一场比赛的行
  • 从最后一个匹配的db(包括)创建一个新文件; tail --lines = + 10000 database.sql&gt; resume.sql
  • OR;正如其他人所说,使用mysqlimport
  • 中的ignore-lines选项

希望这有帮助