【发布时间】:2010-11-20 13:56:46
【问题描述】:
我在 cron 作业中使用 mysqldump 来备份超过 200 万行的数据库。
它创建一个文本文件,可用于从命令行恢复数据记录。
我认为在还原之前编辑转储作为更改值和表或列名称的一种快速方式会很有用 - 至少在我了解更多并有信心使用 ALTER 进行此操作之前和更新。
编辑大文本文件并不困扰我,但我惊讶地发现在我的数据库的 250 兆字节转储中,只有大约 300 行。每行大约有 80 万个字符长。
是否有另一种生成转储的方法可以更好地控制行长?
或者我应该使用 sed 或 Perl 等工具对转储进行后处理?
【问题讨论】:
-
考虑 ;在查询之间作为您的行尾序。
-
实际上,我使用 Perl 并说 $line =~ s{\).\(}{),\n(}g; 所以我得到了很多额外的行。
-
也就是说 ;在每个 INSERT into table_name VALUES (..),(..),(..) .. (..) 的末尾已经是我的 eol;整个文件282行,252行以;结尾我选择在逗号后插入换行符
-
您确定您的实际数据中没有括号-逗号-括号序列吗?
-
这是
mysqldump中的一个已知缺点。是first reported in 2004。在 2011 年,Tim Riker 和 Lon Binder 都建议使用 1 行补丁来修复它。令人难以置信的是,mysqldump开发人员/维护人员尚未实现此仍然。由于最初的错误报告已关闭(错误且无济于事),因此现在正在跟踪该问题here。