如何处理mysqldump创建的巨大行长

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我在cron作业中使用mysqldump备份超过二百万行的数据库。

我认为,在还原之前编辑转储文件将是有用的。速战速决更改值和表名或列名的方法--至少在我了解更多并对使用ALTER和UPDATE时变得自信之前。

编辑大型文本文件并不困扰我,但我惊讶地发现250兆字节把我的数据库转储,只有大约300条线路...。每一行大约有800 k字符长。

是否有另一种方法来生成对行长度有更多控制的转储?

或者,我应该使用sed或Perl之类的工具对转储进行后处理吗?

提问于
用户回答回答于

默认情况下,mysqldump只生成一个INSERT命令每张表,为每个被转储的表生成一行(非常长的)插入数据。这主要是因为“批处理”插入比生成单独的插入要快得多。INSERT查询每个表中的每条记录。

所以,不是因为mysqldump已经创建了任意长的行,可以只增加一些其他的截止长度。这句台词很长是有原因的。

如果这真的很重要INSERT将其分解为多行,可以用以下方法表示:

mysqldump --extended-insert=FALSE --complete-insert=TRUE ...

但是,请注意,以这种格式还原表将花费更长的时间。

用户回答回答于

今天,我正在浏览MySQL源代码,寻找解决这个问题的方法。最大行长由变量opt强制执行,它应该与MySQL服务器的缓冲区大小相匹配。它是可笑的大。

但不管怎样,这是一个选择,所以就这么做:

mysqldump --net_buffer_length=5000 ...

最小值为4096。

扫码关注云+社区