【发布时间】:2017-02-04 21:42:42
【问题描述】:
我正在尝试执行以下操作,但不断收到“MySQL 服务器已消失”
- 从 informix 数据库中读取大约 100,000 行(每行大约 400 个字符)。 这个没有问题
- 将 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.ini 或 mysql.cnf
有什么建议吗?
【问题讨论】:
-
为体面的托管付费:P
-
如果您在 MySQL 中占用了大量资源,那么它只会切断您的连接(因此“MySQL 已消失”)。你需要放慢速度,也许在里面放一些睡眠,这样 MySQL 就有时间处理你的请求。
-
如果您尝试一次插入一行会发生什么?如果您尝试一次插入多行,您可能会遇到服务器超时。
-
单个 MySQL 查询可以插入多少行通常是有限制的,可能是 100 或 1000(不确定)尝试将其拆分为多个插入。
-
您是否像这样验证过 max_allowed_packet SHOW VARIABLES LIKE 'max_allowed_packet'; 请参阅:mariadb.com/kb/en/mariadb/server-system-variables