【问题标题】:WordPress database error MySQL server has gone away for queryWordPress 数据库错误 MySQL 服务器已消失以进行查询
【发布时间】:2013-03-28 23:14:41
【问题描述】:

我经常收到此错误,以至于 php_error 日志文件每 2 秒增加 1MB。 而且网站速度很慢。

我已尝试将此行添加到 wp-db.php

$this->query("set session wait_timeout=600" );

但它没有帮助。

Web服务器是IIS 7,最新版本的mysql和wordpress

【问题讨论】:

  • “MySQL 服务器已消失”表示数据库服务器不断超时或以其他方式关闭连接。你在共享主机上吗?也许您的共享数据库服务器超出了它的容量。
  • 不,这是一个专用的 windows 服务器
  • 你正在运行库存 WP 吗?写得不好的插件可以用繁重的查询猛击数据库服务器。在此问题开始之前您是否进行了任何更改?
  • 我已经更新了一些插件,但是wp非常无响应,因为我安装了windows 2008 server和mysql 5.2,在2003 server上没问题。

标签: php mysql database


【解决方案1】:

在我的例子中,我有一个从 5.7 导入到 8.0 的巨大数据库(4.5 GB),当运行wp search-replace 时,wp-cli 对大型表的查询出现错误MySQL server has gone away。所以我将/etc/mysql/conf.d/custom.cnf 更改为以下内容:

[mysqld]

datadir = /var/lib/mysql/
socket = /var/run/mysqld/mysqld.sock
pid_file = /var/run/mysqld/mysqld.pid

tmp_table_size = 256M
max_heap_table_size = 256M
max_connections = 2000
open_files_limit = 100000

innodb_buffer_pool_instances = 8

# since 8.0 takes care of:
# innodb_buffer_pool_size
# innodb_log_file_size
# innodb_log_files_in_group
# innodb_flush_method
#https://dev.mysql.com/doc/refman/8.0/en/innodb-dedicated-server.html:
#Only consider enabling innodb_dedicated_server if the MySQL instance resides on a dedicated server where it can use all available system resources. For example, consider enabling if you run MySQL Server in a Docker container or dedicated VM that only runs MySQL. Enabling innodb_dedicated_server is not recommended if the MySQL instance shares system resources with other applications.
innodb_dedicated_server = On

innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1

max_connections = 500

从那时起,不仅 sql 文件的导入速度提高了 10 倍(利用整台机器的 50-60 GB 内存只需 10 分钟),而且 wp-cli 的查询现在运行没有任何问题。

不过,帮助我摆脱错误的关键设置 (innodb_dedicated_server = On) 仅适用于仅运行 MySQL 的 docker 容器和 VPS/专用服务器。如果 mysql 服务器在一台机器/一个容器中与其他服务器(PHP、Nginx 等)一起运行,那么您需要调整 innodb_dedicated_server 自己处理的四个值。

【讨论】:

    【解决方案2】:

    此技巧适用于所有 WordPress 版本。打开您的 Wordpress 目录。该目录将包含文件夹:

    wp-admin
    wp-content
    wp-includes
    

    打开 wp-includes。搜索 wp-db.php 文件。如果找到该文件,请使用文本编辑器打开它。使用文本编辑器的搜索工具,搜索:

    $this->ready = true;
    

    找到该行后,在找到的行之后添加以下行:

    //WP Query Gone Away Error Fix
    $this->query("set session wait_timeout=600");
    

    您也可以关注https://subinsb.com/fix-wordpress-error-mysql-server-has-gone-away链接查看更多详情。

    【讨论】:

    • 我找到了几篇关于这个错误的出版物,但没有一个像你的那样清晰准确。谢谢!
    • 非常清晰,更重要的是,似乎奏效了。干杯伙伴。
    【解决方案3】:

    运行SHOW STATUS WHERE Variable_name LIKE '%onn%' 以查看您有多少打开的连接。我的看起来像这样:

    Variable_name        Value
    Aborted_connects         1
    Connections            629
    Max_used_connections     3
    Ssl_client_connects      0
    Ssl_connect_renegotiates 0
    Ssl_finished_connects    0
    Threads_connected        2
    

    运行SHOW PROCESSLIST 以查看哪些进程处于活动状态。

    问题可能是您打开了太多连接而没有关闭它们。运行这些命令至少可以深入了解可能存在的问题。

    【讨论】:

    • Aborted_connects 1 连接数 1556 Max_used_connections 18 Ssl_client_connects 0 Ssl_connect_renegotiates 0 Ssl_finished_connects 0 Threads_connected 9
    • 我的邮件服务器好像打开了很多进程,我认为有人在向我的服务器发送垃圾邮件。
    • 我已经安装了 PHP 的 APC 缓存扩展和 WP 的 W3 缓存,现在运行速度很快,没有错误:www.paper-backgrounds.com
    • 酷网站。用<?=date("Y");?> 更新您当年的版权。
    • Connections 是自实例启动以来尝试的连接数。除以平均每秒连接的正常运行时间。显示“正常运行时间”等全局状态;自实例启动后将给您几秒钟。
    猜你喜欢
    • 2014-02-12
    • 2012-06-28
    • 2011-12-18
    • 1970-01-01
    • 2011-10-12
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多