gpt4 book ai didi

mysql - 即使使用 max_allowed_pa​​cket 参数,在使用 mysqldump 时也会丢失与 mysql 的连接

转载 作者:行者123 更新时间:2023-11-29 01:35:06 28 4
gpt4 key购买 nike

我想在我的远程服务器数据库中转储特定表,这工作正常,但其中一个表有 900 万行,我得到:

Lost connection to MySQL server during query when dumping table `table_name` at row: 2002359

所以在网上阅读后我明白我需要增加我的 max_allowed_pa​​cket,并且可以将它添加到我的命令中。

所以我运行以下命令来转储我的表:

mysqldump -uroot -h my.host -p'mypassword' --max_allowed_packet=512M db_name table_name | gzip  > dump_test.sql.gz

出于某种原因,我仍然得到:

Lost connection to MySQL server during query when dumping table `table_name` at row: 2602499

我做错了什么吗?

这很奇怪,只有 900 万条记录...不是太大。

最佳答案

尝试将--quick 选项添加到您的mysqldump 命令;它在大 table 上效果更好。它将结果集中的行流式传输到输出,而不是吞噬整个表,然后将其写出。

 mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
gzip > dump_test.sql.gz

您还可以尝试将 --compress 选项添加到您的 mysqldump 命令。这使得它使用更加网络友好的压缩连接协议(protocol)连接到您的 MySQL 服务器。请注意,您仍然需要 gzip 管道; MySQL 的压缩协议(protocol)不会导致转储从 mysqldump 压缩出来。

也有可能是服务器与 mysqldump 客户端的连接超时。您可以尝试重置超时持续时间。通过其他方式连接到您的服务器并发出这些查询,然后运行您的 mysqldump 作业。

这些将超时设置为一个日历日。

    SET GLOBAL wait_timeout=86400;
SET GLOBAL interactive_timeout=86400;

最后,如果您的服务器远离您的机器(通过路由器和防火墙),某些东西可能会中断 mysqldump 的连接。一些劣质路由器和防火墙对 NAT(网络地址转换) session 有时间限制。他们应该在使用时让这些 session 保持事件状态,但有些则不然。或者,您可能正在达到公司为外部连接配置的时间或大小限制。

尝试登录到离服务器较近的机器并在其上运行 mysqldump。然后使用其他方式(sftp?)将您的 gz 文件复制到您自己的机器上。

或者,您可能需要对该文件的转储进行分段。您可以这样做(未调试)。

mysqldump  -uroot -h my.host -p'mypassword'  \ 
db_name table_name --skip-create-options --skip-add-drop-table \
--where="id>=0 AND id < 1000000" | \
gzip....

然后用这些行重复。

          --where="id>=1000000 AND id < 2000000" | \

--where="id>=2000000 AND id < 3000000" | \
...

直到你得到所有的行。颈部疼痛,但它会起作用。

关于mysql - 即使使用 max_allowed_pa​​cket 参数,在使用 mysqldump 时也会丢失与 mysql 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53091734/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com