mysqldump错误2013


18

我已经安装了一个数据库,我想在mysql中进行备份。问题是mysqldump导出“ maia_mail”表失败

# mysqldump -u root -p maia > maia.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `maia_mail` at row: 15

它运行不到30秒,并且如上所述出现错误。

数据库的总大小为1.3GB,其中maia_mail表为1.0GB

my.cnf我有这些设置:

[mysqld]
max_allowed_packet      = 1300M
[mysqldump]
max_allowed_packet      = 1300M

请就如何转储数据库提出建议或提供一些指导?


170GB可用空间。无论我转储到机器db上还是远程,这都是相同的
garfink 2015年

因此主要是varchar数据的电子邮件副本
garfink

1300M是最近的更改,当它也设置为默认的16M时也存在问题。更改为1300M后,服务器也已重新启动。
garfink 2015年

我设置回16M默认值。转储结果在第15行上出现相同的错误2013
garfink 2015年

Answers:


13

我可以轻松地建议更改InnoDB设置,这可能只是为了使mysqldump正常工作而费力的小事。您可能不喜欢我的建议,但我相信这是您最好的选择。它去了:

建议#1:禁用扩展插入

mysqldump的默认设置包括在单个INSERT中将数百行或数千行聚集在一起。这被称为扩展的INSERT。这会导致超出max_allowed_pa​​cket的部分溢出

我回答了一个帖子Sep 01, 2011MySQL服务器已经消失,阻止了大型转储的导入),在这里我讨论了导入大型mysqldump的相同操作。我相信禁用扩展INSERT也将有助于创建麻烦的mysqldump。

mysqldump -u root --skip-extended-insert -p maia > maia.sql

坏消息:在为每行创建INSERT命令时,该怎么做。这肯定会增加执行mysqldump的时间。因此,重新加载所花费的时间也会增加(可能增加10-100倍)。

skip-extended-insert之前讨论过

建议2:将二进制数据转储为十六进制(可选)

为了使mysqldump的二进制数据更具字节可移植性,请以十六进制格式转储此类数据

mysqldump -u root --skip-extended-insert --hex-blob -p maia > maia.sql

坏消息:它将使mysqldump膨胀更多

试试看 !!!

旁注:max_allowed_pa​​cket的最大大小为1G


5

尝试转储12 GB数据库时,我也遇到相同的错误。我进行了以下更改以使其起作用。

  1. 将max_allowed_pa​​cket配置为1024M
  2. 将net_read_timeout配置为7200
  3. 将net_write_timeout配置为7200

注意:我知道超时值太高(7200秒,即20小时)。但是我这样做是故意的,只是为了排除任何机会。我正在寻找最佳超时值。


2
对于其他用户:这些是在服务器上设置的,而不是在mysqldump配置文件中设置的。此外,7200秒是2小时,而不是20小时
Mark

设置全局net_read_timeout = 120; 设置全局net_write_timeout = 900; 为我工作
kasi

2

只需在my.ini(Windows)或my.cnf(Linux)配置文件中包括以下内容。

[mysqld]
max_allowed_packet=1024M 

[mysqldump]
max_allowed_packet=1024M 
net_read_timeout=3600 
net_write_timeout=3600

2
这些部分应该相反。
OrangeDog

1

确保您有足够的内存进行转储。请在进行转储时继续检查内存,例如,使用以下命令:

free -mt

如果在转储时内存耗尽,您将得到

mysqldump:错误2013:连接断开


1

我发现:

--max-allowed-packet=1G --net-buffer-length=32704

...尽管网络读/写超时更改,TCP keepalive等,也可以使它在以前(可靠)的地方工作。

max_allowed_packet单独的设置并不能使其起作用,因此如果net_buffer_length使用该设置可能不是必需的。- 拉尔夫·波顿

进行修改max-allowed-packetnet-buffer-length似乎比禁用扩展插入要好得多。- 克里斯托弗

另请参见max_allowed_pa​​cket足够大,为什么我需要更改它?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.