我有一个ruby脚本的cron作业,它每10分钟在一个表中执行一次crud操作。问题是,同时buff/cache和shared在5天后增加,可用空间接近零,mysql开始失败。
[root@openldap ~]# free -m
total used free shared buff/cache available
Mem: 2048 227 0 1792 1820 1820
Swap: 2048 0 2048
- MySQL服务器已离开(Mysql2::Error::ConnectionError(
- MySQL客户端未连接(Mysql2::错误((
- 无法通过套接字'/var/lib/MySQL/MySQL.sock'(111(连接到本地MySQL服务器(Mysql2::Error::ConnectionError((
- Mysql启动失败(无法重新启动Mysql(
有人能告诉我这里的问题吗?很抱歉,如果问题含糊不清,我可能不明白你需要知道什么。感谢
让我总结一下问题:
- 接近零的可用内存
- MySQL服务器已离开(Mysql2::错误::ConnectionError((
- MySQL客户端未连接(Mysql2::错误((
- 无法通过套接字'/var/lib/MySQL/MySQL.sock'(111(连接到本地MySQL服务器(Mysql2::Error::ConnectionError((
- Mysql启动失败(无法重新启动Mysql(
答案:
- 接近零的可用内存:
您的内存不低也不接近零(读取:https://linuxatemyram.com/),事实上,您甚至还没有进行交换(交换使用=0(,并且您的可用内存仍然是1820(2048的89%(
快速解释:linux(甚至windows(会用磁盘缓存填充它的空RAM空间。当您需要更多空间时,这些缓存可以(并且将自动(被删除。参见CCD_ 1字段(空闲+缓冲区/高速缓存(;免费的";你的记忆力。
- MySQL服务器已离开(Mysql2::Error::ConnectionError(
我假设您的脚本总是在后台(或前台(运行,而不是使用cron,并且在脚本启动时打开mysql连接,然后重用该连接,例如:
# pseudocode
conn = OpenMySQLConnection(host,user,pass,db)
while true {
conn.query(sql)
sleep(10 minute)
}
conn.close()
这种代码会让mysql服务器在超时的情况下关闭它的连接,因为这是因为你正在打开连接,进行查询,然后在10分钟内不进行任何查询。在mysql的默认设置中。相反,您可以尝试:
# pseudocode
while true {
conn = OpenMySQLConnection(host,user,pass,db)
conn.query(sql)
sleep(10 minute)
conn.close()
}
我亲身经历过这种";mysql服务器消失了";在我的项目中有一个错误,即物联网设备打开(并且很长一段时间没有关闭(mysql连接。当我像上面一样将代码从open-loop-sleep
更改为loop-open-query-close
时,它解决了我的问题。
其他原因(我认为不太可能(如下:https://matomo.org/faq/troubleshooting/faq_183/
- MySQL客户端未连接(Mysql2::错误((
我怀疑当mysql服务器关闭它的连接时,你会得到MySQL client is not connected (Mysql2::Error))
,而这个错误MySQL client is not connected (Mysql2::Error))
发生在你试图对关闭的mysql连接执行查询时
- 无法通过套接字'/var/lib/MySQL/MySQL.sock'(111(连接到本地MySQL服务器(Mysql2::错误::ConnectionError((
我怀疑这个错误是上述错误的另一个变体。看看我提出的解决方案是否能解决所有问题。
- Mysql启动失败(无法重新启动Mysql(
请检查您的服务日志(例如,对于带有systemd:systemctl status mysqld
、journalctl -xe
、service status mysqld
的发行版(中的mysql错误消息,并将其发布在您的问题中。