在生产环境中,很多人会经常遇到Mysql自动停止的情况,这其中当然也包括mariadb数据库,究其原因还是内存耗尽,导致数据库停止工作。主要提示为“can't connect to local mysql server through socket……”。还有的是这样提示的“Error establishing a database connection”如下图所示:
我看大部分人的解决办法几乎都是这样的:
service mysqld restart
然而,用这样的方法确实可以解决问题,但是治标不治本,尤其是想wordpress这样的程序,消耗内存极其严重,你不知道他什么时候就会自动停止,这样的解决方法无非就几个。
1、升级服务器硬件,加大内存。
2、优化程序,减少内存开销
3、监控mysql进程是否为启动,如果停止,则自动启动数据库,下面贴出代码
- #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH pgrep -x mysqld /dev/null if [ $? -ne 0 ] echo At time:$(date) :MySQL is stop . /var/log/mysql_messages service mysqld start fi
或者使用下面的代码:
pgrep -x mysqld &> /dev/null if [ $? -ne 0 ];then bash /www/server/panel/script/rememory.sh /etc/init.d/mysqld start fi
把上面的代码加入到计划任务,每隔几分钟检测一次,这样就比较稳妥了。现在用宝塔的人比较多,如果你用的是宝塔,把上面的代码从“计划任务”=》“添加计划任务”,然后填写你的任务名称,选择好时间,最后加入上面的代码,完工!