2012-02-21 114 views
1

我进口使用大型mysql数据库,如何恢复?

的mysql -uroot -ppassword DBNAME

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

+0

你能打破转储吗? – Karlson 2012-02-21 16:51:32

+0

我也很想知道这个答案。我知道使用phpMyAdmin时可以恢复导入,但我不确定使用MySQL命令行工具时恢复是否会起作用。 – Richard 2012-05-10 16:18:18

回答

-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> resume.sql
  • OR;如别人所说,使用忽略线选项的mysqlimport

希望这有助于

+0

不,它与数据库的连接超时,它会在某处保持活动或超时设置。 – Owl 2016-08-03 10:00:12

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 
0

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

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