WordPress 的 MySQL 崩溃通常是由于数据库负载过高、查询性能差或服务器资源不足等问题导致的。以下是一些优化 MySQL 以提高稳定性的方案。
一、检查 MySQL 崩溃原因
1. 查看 MySQL 错误日志
tail -n 50 /var/log/mysql/error.log
常见错误:
Out of memory
:内存不足Too many connections
:连接数超限InnoDB crash recovery
:InnoDB 崩溃恢复
2. 查看 MySQL 进程状态
mysqladmin processlist
- 如果
State
显示Waiting for table level lock
,可能是锁争用问题。 - 如果有大量
Sleep
连接,可能是连接管理问题。
3. 检查磁盘空间
df -h
du -sh /var/lib/mysql
- 确保 MySQL 数据目录所在磁盘有足够空间。
二、优化 MySQL 配置
修改 MySQL 配置文件(一般是 /etc/mysql/my.cnf
或 /etc/my.cnf
),然后重启 MySQL 使其生效。
1. 调整 InnoDB 缓存
[mysqld]
innodb_buffer_pool_size = 2G # 设置为物理内存的 50%-70%
innodb_log_file_size = 256M # 日志文件大小
innodb_flush_log_at_trx_commit = 2 # 降低磁盘 IO 压力
2. 优化连接管理
max_connections = 200 # 限制最大连接数
wait_timeout = 60 # 关闭空闲连接
interactive_timeout = 60
3. 调整查询缓存
query_cache_type = 1
query_cache_size = 64M
4. 调整临时表
tmp_table_size = 64M
max_heap_table_size = 64M
三、优化 WordPress 及数据库
1. 清理 WordPress 数据库
清理修订版本
DELETE FROM wp_posts WHERE post_type = 'revision';
删除过期的 transient 数据
DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
优化数据库表
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_comments, wp_commentmeta, wp_options, wp_users;
2. 使用数据库索引
ALTER TABLE wp_postmeta ADD INDEX meta_key_index (meta_key);
ALTER TABLE wp_comments ADD INDEX comment_approved_index (comment_approved);
3. 禁用不必要的 Heartbeat API
define('WP_POST_REVISIONS', false);
define('AUTOSAVE_INTERVAL', 300);
4. 使用对象缓存
define('WP_CACHE', true);
define('ENABLE_CACHE', true);
define('WP_REDIS_HOST', '127.0.0.1');
四、优化服务器环境
1. 增加 PHP-FPM 进程
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
然后重启 PHP-FPM:
systemctl restart php7.x-fpm
2. 使用 Nginx 代替 Apache
如果使用 Apache,建议切换到 Nginx 以减少服务器负载。
3. 升级服务器
- 至少 4GB RAM
- 使用 SSD 代替 HDD,提高数据库访问速度
- 升级到 MariaDB 10.5+ 或 MySQL 8.0
五、使用监控工具
1. 实时查看 MySQL 性能
mysqladmin status
2. 使用 mytop
监控
apt install mytop -y # Ubuntu
yum install mytop -y # CentOS
mytop -u root -p yourpassword
3. 安装 mysqltuner
进行自动优化建议
wget http://mysqltuner.pl/ -O mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl
总结
- 检查 MySQL 错误日志,找出崩溃原因
- 优化 MySQL 配置文件(调整
innodb_buffer_pool_size
、max_connections
、tmp_table_size
等) - 清理 WordPress 数据库(删除修订版、无用 transient、优化表)
- 添加索引(提高查询速度)
- 使用 Redis/Memcached 缓存
- 调整 PHP-FPM 及服务器配置
- 升级硬件(RAM、SSD、数据库版本)
- 使用监控工具(
mysqltuner
、mytop
)优化 MySQL 运行状况
如果 MySQL 仍然崩溃,可以考虑 切换到 Managed Database 或 使用更强的服务器 来减少维护成本。