【问题标题】:MySQL server has gone away - shared accountMySQL 服务器已消失 - 共享帐户
【发布时间】:2017-02-04 21:42:42
【问题描述】:

我正在尝试执行以下操作,但不断收到“MySQL 服务器已消失”

  1. 从 informix 数据库中读取大约 100,000 行(每行大约 400 个字符)。 这个没有问题
  2. 将 100,000 行插入到共享 hostgator acct 上托管的 MySQL 表中

我收到“MySQL 服务器已消失”,然后更新了我的 INSERT 以使用 INSERT command

例如:$queryMySQL = INSERT into table (field1, field2, field3,...) values ('A', '2017-02-01', ..), ('B', '2017-02-01', ..), ('C', '2017-02-01', ...),...'

这不起作用,所以我尝试打开持久连接 ini_set('mysqli.reconnect', 'on');和$db_mysqli = new mysqli('p:'.$host, $Username,$Pswd,$database);

这没有帮助,所以我尝试插入 50,000 而不是 100,000(我不想这样做)但仍然得到 MySQL server has gone away

由于这是一个共享的 hostgator 帐户,我无法访问 php.inimysql.cnf

有什么建议吗?

【问题讨论】:

  • 为体面的托管付费:P
  • 如果您在 MySQL 中占用了大量资源,那么它只会切断您的连接(因此“MySQL 已消失”)。你需要放慢速度,也许在里面放一些睡眠,这样 MySQL 就有时间处理你的请求。
  • 如果您尝试一次插入一行会发生什么?如果您尝试一次插入多行,您可能会遇到服务器超时。
  • 单个 MySQL 查询可以插入多少行通常是有限制的,可能是 100 或 1000(不确定)尝试将其拆分为多个插入。
  • 您是否像这样验证过 max_allowed_pa​​cket SHOW VARIABLES LIKE 'max_allowed_pa​​cket'; 请参阅:mariadb.com/kb/en/mariadb/server-system-variables

标签: php mysql mysqli


【解决方案1】:

为什么会发生

如果您向服务器发送查询,您也可能会收到这些错误 不正确或太大。如果 mysqld 得到一个太大的数据包。 或乱序,它假定某些地方出了问题 客户端并关闭连接。

可以做什么

避免这个问题的简单方法是确保 max_allowed_pa​​cket 在 mysqld 服务器中设置得比在 客户端,并且所有客户端都使用相同的值 max_allowed_pa​​cket。

你能做什么?

由于您已经在使用主机,请请求主机支持来解决此问题。好吧,如果他们不能,您可以减少查询大小,如果它不能解决您的问题,请尝试更改主机。

MYSQL Reference

【讨论】:

  • 我最终创建了一个数组,每个元素由 1,000 行的“INSERT”组成。然后遍历数组并为每个元素 1)打开连接,2)$db_mysqli->query($queryInserts($i)),3)关闭连接。
  • 是的,这似乎合乎逻辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2011-06-07
  • 2010-12-20
  • 2013-06-13
  • 2015-01-15
  • 2016-03-06
相关资源
最近更新 更多