- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的远程服务器数据库中转储特定表,这工作正常,但其中一个表有 900 万行,我得到:
Lost connection to MySQL server during query when dumping table `table_name` at row: 2002359
所以在网上阅读后我明白我需要增加我的 max_allowed_packet,并且可以将它添加到我的命令中。
所以我运行以下命令来转储我的表:
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_packet 参数,在使用 mysqldump 时也会丢失与 mysql 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53091734/
我是一名优秀的程序员,十分优秀!