我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。

文件处理需要一段时间,进程中途死亡,并出现以下错误:

2006, MySQL server has gone away

我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?


当前回答

如果你使用xampp服务器:

打开xampp -> mysql -> bin -> my.ini

参数如下:

max_allowed_packet = 500M

innodb_log_file_size = 128M

这对我帮助很大:)

其他回答

我也遇到了这个错误。但是,即使增加了max_allowed_packet或my.cnf中的任何值,错误仍然存在。

我所做的是对我的数据库进行故障排除:

我检查了错误持续存在的表 然后我检查了每一行 有些行可以读取,有些行错误只会显示 似乎这些行中存在导致此错误的值 但是,即使只选择主列,错误仍然会出现(SELECT primary_id FROM table)

我想到的解决方案是重新导入数据库。好在我有这个数据库的备份。但是我只是删除了有问题的表,然后导入了这个表的备份。这解决了我的问题。


我对这个问题的看法是:

始终有数据库备份。手动或通过CRON作业 我注意到在受影响的行中有一些特殊字符。因此,当我恢复该表时,我立即将该表的排序规则从latin1_swedish_ci更改为utf8_general_ci 在我的数据库工作正常之前,我的系统突然遇到这个问题。也许这也与我们的主机提供商升级MySQL数据库有关。所以经常备份是必须的!

在docker-compose.yml中添加以下设置时,我也遇到了同样的问题:

db:
    image: mysql:8.0
    command: --wait_timeout=800 --max_allowed_packet=256M --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
      - ./docker/mysql/dump:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

取消my.ini/my.cnf中下面的ligne的注释,这将把你的大文件分割成小部分

# binary logging format - mixed recommended
# binlog_format=mixed

TO

# binary logging format - mixed recommended
binlog_format=mixed

对我来说是内存问题。

我甚至在拥有12个CPU核心和32 GB RAM的服务器上也遇到了同样的问题。我做了更多的研究,试图释放RAM。下面是我在Ubuntu 14.04上使用的释放RAM的命令:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

而且,它修复了一切。我把它设置在cron下,每小时运行一次。

crontab -e

0 * * * * bash /root/ram.sh;

并且,你可以使用这个命令来检查有多少可用的空闲RAM:

free -h

你会得到这样的结果:

             total       used       free     shared    buffers     cached
Mem:           31G        12G        18G        59M       1.9G       973M
-/+ buffers/cache:       9.9G        21G
Swap:         8.0G       368M       7.6G

我在MySQL命令行中使用了以下命令来恢复一个超过7GB的MySQL数据库,它是有效的。

set global max_allowed_packet=268435456;