【问题标题】:Mysql server has gone away - During mysqldumpMysql 服务器已消失 - 在 mysqldump 期间
【发布时间】:2018-05-25 00:49:45
【问题描述】:

每天晚上(太平洋标准时间晚上 8 点)我都会对我的生产数据库(innoDB 引擎)进行全局备份。

这里是mysqldump命令:

mysqldump -u$MYSQLUSER -p$MYSQLPWD -h$MYSQLHOST -Q -c -C --add-drop-table --add-locks --quick --lock-tables surveys > $MYSQLBACKUPDIR/surveys.$NOW.sql;

备份大约需要 45 分钟并生成一个 480 MB 的 sql 文件。 在此备份期间,我网站的某些用户可能会遇到错误 (500)

这是我在 apache 错误日志中找到的内容:

[Sun Dec 10 20:32:58.028079 2017] [:error] [pid 10921] DBD::mysql::db commit failed: MySQL server has gone away at /var/www/---.pl line 17.\n

这是我试图解决这个问题的方法:

  • 在 mySQL 配置中提高值(wait_timeout、max_allowed_pa​​cket)
  • 清理我的数据库,删除了 1/5 的旧记录(备份文件从 600MB 到 480)

但是没有成功:(

【问题讨论】:

  • 一般情况下,当我收到MySQL server has gone away 错误时,是在某个时间段内没有任何活动的数据库打开连接。您的备份是否有可能在某个时候被阻塞(停止并等待另一个进程)?

标签: mysql dump


【解决方案1】:

这可能是锁定表,但我可能错了。您可以使用:
--single-transaction --lock-tables=false,而不是您的参数 --lock-tables。这样,您的转储将保持一致,但不会长时间锁定表。
另外 - 如果可以,请尝试使用 innobackupex。但是备份和恢复单个数据库比使用 mysqldump 复杂得多。这里有一些细节:https://www.percona.com/forums/questions-discussions/percona-xtrabackup/10131-backing-up-and-restoring-a-single-database

【讨论】:

  • 谢谢! lock-tables=false 不是兼性的吗?在文档中,我可以阅读“--single-transaction 选项和--lock-tables 选项是互斥的,因为 LOCK TABLES 会导致任何未决事务被隐式提交。”
  • 你是对的,但是这里我设置了lock-tables=false——意思是“不锁表”,实际上是通过单事务来保证的。我把它放在那里是为了让我更加确定;)
  • Jarek,今晚没有 SQL 错误,似乎成功了 :) 谢谢你的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2011-06-07
  • 2010-12-20
  • 2013-06-13
相关资源
最近更新 更多