MySQL报2002 Connection refused错误 如何确认是否为内存不足导致
问题根因验证方法
确认是否为内存不足触发OOM Killer
- 执行如下命令查看系统日志是否有OOM杀掉MySQL的记录:
如果返回结果中存在grep -i 'oom-killer' /var/log/syslog dmesg | grep -E 'mysql|oom'Out of memory: Killed process xxx (mysqld)相关内容,即可确认是内存不足导致系统主动杀死MySQL进程,对应你日志中的code=killed, signal=KILL(信号9就是系统强制终止进程的标记)。 - 也可以安装系统监控工具查看历史内存占用:
观察MySQL崩溃时间段的内存可用量,如果接近0即可验证内存不足的猜想。sudo apt update && sudo apt install sysstat -y sar -r
永久解决方案
方案1:添加Swap分区(零成本,优先推荐)
1GB内存的DigitalOcean基础款默认未开启Swap分区,添加2GB Swap可以有效缓解内存不足的问题,操作步骤:
# 创建2G大小的Swap文件 sudo fallocate -l 2G /swapfile # 设置正确权限 sudo chmod 600 /swapfile # 格式化Swap sudo mkswap /swapfile # 启用Swap sudo swapon /swapfile # 写入fstab保证重启后生效 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
方案2:优化MySQL内存配置
编辑MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,调整以下参数适配小内存环境:
innodb_buffer_pool_size = 64M innodb_log_file_size = 32M max_connections = 50 key_buffer_size = 16M query_cache_size = 16M
修改完成后重启MySQL生效:sudo systemctl restart mysql。你的站点月访问仅3000次,以上参数完全可以满足需求。
方案3:配置服务自动重启
配置systemd让MySQL崩溃后自动拉起,避免手动操作:
执行sudo systemctl edit mysql,在打开的文件中添加以下内容:
[Service] Restart=always RestartSec=5 StartLimitInterval=0
保存后重载配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart mysql
后续MySQL只要异常退出都会自动重启。
方案4:升级服务器配置
如果预算允许,直接升级到2GB内存的服务器,是最彻底的解决方案。
你之前调整端口、修改通信命令的操作没有作用,因为问题本质是MySQL进程被系统终止,端口监听自然不存在,才会返回连接拒绝的报错,和端口配置无关。
内容的提问来源于stack exchange,提问作者Buggy Uigy
相关产品推荐
相关产品推荐

