我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
我正在办公室运行一台服务器来处理一些文件,并将结果报告给远程MySQL服务器。
文件处理需要一段时间,进程中途死亡,并出现以下错误:
2006, MySQL server has gone away
我听说过MySQL的设置,wait_timeout,但是我需要在我办公室的服务器或远程MySQL服务器上更改它吗?
当前回答
发生这种错误主要有两个原因。
你的内存太小了。 尝试连接时,数据库连接将被关闭。
您可以尝试下面的代码。
# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
try:
self.cursor.execute(sql_string, sql_vars)
return self.cursor.fetchall()
except (AttributeError, MySQLdb.OperationalError):
self.__init__()
self.cursor.execute(sql_string, sql_vars)
return self.cursor.fetchall()
不管背后的原因是什么,它都能减轻错误,尤其是第二个原因。
如果是由低RAM引起的,则必须从代码或数据库配置提高数据库连接效率,或者仅仅提高RAM。
其他回答
如果你使用xampp服务器:
打开xampp -> mysql -> bin -> my.ini
参数如下:
max_allowed_packet = 500M
innodb_log_file_size = 128M
这对我帮助很大:)
在我的情况下,它是低值的open_files_limit变量,这阻止了mysqld访问数据文件。
我用:
mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 1185 |
+------------------+-------+
1 row in set (0.00 sec)
在我将变量改为大值后,我们的服务器再次活跃起来:
[mysqld]
open_files_limit = 100000
在MAMP(非专业版)中我添加了
--max_allowed_packet=268435456
到 ...\MAMP\bin\startMysql.sh
更多细节请点击这里
对我来说,它有助于修复一个innodb表的损坏的索引树。我用这个命令本地化了这样一个表
mysqlcheck -uroot --databases databaseName
结果
mysqlcheck: Got error: 2013: Lost connection to MySQL server during query when executing 'CHECK TABLE ...
如下所示,我只能从mysqld日志/var/log/mysqld.log中看到哪个表造成了问题。
FIL_PAGE_PREV links 2021-08-25T14:05:22.182328Z 2 [ERROR] InnoDB: Corruption of an index tree: table `database`.`tableName` index `PRIMARY`, father ptr page no 1592, child page no 1234'
mysqlcheck命令并没有修复它,但帮助揭示了它。 最终,我通过mysql命令行中一个常规的mysql命令来修复它
OPTIMIZE table theCorruptedTableNameMentionedAboveInTheMysqld.log
对我来说是内存问题。
我甚至在拥有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