mysqldump 错误 2013

gar*_*ink 19 mysql mysqldump backup

我安装了一个数据库,我想在 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
Run Code Online (Sandbox Code Playgroud)

它运行不到 30 秒并得到如上所示的错误。

DB 的总大小为 1.3GB,其中 maia_mail 表为 1.0GB

my.cnf我有这些设置:

[mysqld]
max_allowed_packet      = 1300M
[mysqldump]
max_allowed_packet      = 1300M
Run Code Online (Sandbox Code Playgroud)

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

Rol*_*DBA 15

我可以很容易地建议更改 InnoDB 设置,这可能只是为了让 mysqldump 正常工作。您可能不喜欢我对建议的看法,但我相信这是您最好(唯一)的选择。它是这样的:

建议 #1:禁用扩展插入

mysqldump 的默认设置包括在单个 INSERT 中将数百或数千行聚集在一起。这称为扩展插入。它导致一些超出 max_allowed_pa​​cket 的超限

我回复了一个帖子Sep 01, 2011MySQL 服务器已经消失,阻碍了大型转储的导入),我讨论了为导入大型 mysqldump 做同样的事情。我相信禁用扩展 INSERT 也有助于创建一个麻烦的 mysqldump。

mysqldump -u root --skip-extended-insert -p maia > maia.sql
Run Code Online (Sandbox Code Playgroud)

坏消息:这是为每一行创建一个 INSERT 命令的作用。这肯定会增加执行 mysqldump 所需的时间。因此,它也将增加重新加载所需的时间(可能增加 10-100 倍。

skip-extended-insert之前讨论过

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

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

mysqldump -u root --skip-extended-insert --hex-blob -p maia > maia.sql
Run Code Online (Sandbox Code Playgroud)

坏消息:它会使 mysqldump 膨胀一点

试一试 !!!

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


rea*_*dha 6

我在尝试转储 12 GB 数据库时也遇到了同样的错误。我做了以下更改以使其工作。

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

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

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

Jes*_*nga 6

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

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

[mysqldump]
max_allowed_packet=1024M 
Run Code Online (Sandbox Code Playgroud)

  • 这些部分应该是相反的。 (2认同)