我在 cron 作业中使用 mysqldump 来备份超过 200 万行的数据库。
它创建一个文本文件,可用于从命令行恢复数据记录。
我认为在还原之前编辑转储作为一种更改值和表或列名称的快速方式会很有用 - 至少在我了解更多并有信心使用 ALTER 完成之前和更新。
编辑大文本文件并不困扰我,但我惊讶地发现在我的数据库的 250 兆字节转储中,只有大约 300 行。每行大约有 80 万个字符长。
是否有另一种生成转储的方法可以更好地控制行长?
或者我应该使用 sed 或 Perl 等工具对转储进行后处理?
最佳答案
默认情况下,mysqldump
每个表只生成一个INSERT
命令,导致每个表插入一行(很长)行那被甩了。这本质上是因为“批量”插入比为每个表中的每条记录生成单独的 INSERT
查询要快得多。
所以,并不是 mysqldump
创建了任意长的行,你可以强加一些其他的截止长度。排长队是有原因的。
如果将 INSERT
分解为多行真的很重要,您可以使用:
mysqldump --extended-insert=FALSE --complete-insert=TRUE ...
但是请注意,以这种格式恢复表会花费更长的时间。
https://stackoverflow.com/questions/1293529/