每天一次,我用cron重启我的mysql。有时,服务挂起,无法启动。所以,我需要检查mysql是否正在运行(如同:service mysqld status),如果它没有运行则启动mysqld。有人可以为这个动作建议一个简单的脚本吗?
答案 0 :(得分:1)
首先创建一个bash脚本
#!/bin/bash
UP=$(service mysql status|awk '{ print $1}');
if [ "$UP" != 'SUCCESS!' ];
then
echo "MySQL is down.";
sudo service mysql start
else
echo "All is well.";
fi
第二次添加一个crontab,每3分钟运行一次
*/3 * * * * /home/user/scripts/monitor.sh > /dev/null 2>&1
注意:此解决方案必须根据yor发行版进行编辑(service,/ etc / init.d / systemctl,mysql,mysqld)
原始回答(我认为是使用Cpanel,因为它标记了cpanel)
Cpanel允许您控制某些服务,并通过chksrvd轻松添加其他服务。 Mysql为此您只需配置它。
主页>>服务配置>>服务经理
Alli可以为此监控配置MySQL,如果它们试图通过系统解除摔落。
https://documentation.cpanel.net/display/CKB/TailWatch
最好修改/var/lib/mysql/.err generalemnte中的MySQL日志
答案 1 :(得分:-1)
简单的答案:您可以使用一个命令,而不是使用bash的脚本,并将其添加到cron作业中。
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
详细答案:
如果MySQL退出,则可能是服务器配置(Apache | nginx)或MySQL配置有问题。 DOS攻击或系统进程可能会导致系统资源使用量激增(请参见图片)。最终结果是MySQL进程被内核关闭。对于长期解决方案,应该考虑优化您的Apache或MySQL配置。
还有其他一些关于Stack Overflow这些主题的讨论,以及MySQL手册和Percona博客:
MySQL手册-MySQL如何使用内存:
https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
Percona服务器:使用Percona线程池提高可伸缩性
https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/
Percona-配置最佳MySQL内存使用的最佳做法:
https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/
如何使用MySQLTuner优化MySQL性能:
https://www.linode.com/docs/databases/mysql/how-to-optimize-mysql-performance-using-mysqltuner/
Apache内存使用情况配置:
https://serverfault.com/questions/254436/apache-memory-usage-optimization
Apache性能调整手册:
https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
调整Apache服务器:
https://www.linode.com/docs/web-servers/apache-tips-and-tricks/tuning-your-apache-server/
但是,关于您的原始问题,是的,您可以编写一个临时解决方案的脚本,以检查MySQL服务是否已加载并处于活动状态,如果未加载并处于活动状态则将重新启动MySQL。
您没有提及正在使用的操作系统。这将有助于给您特定的命令。我会给你一个CentOS linux的例子。
查看命令systemctl status mysql
的以下输出。您可以在顶部看到该服务已加载和活动。
[root@centos-mysql-demo ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-06-18 18:28:18 UTC; 924ms ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3350 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 3273 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3353 (mysqld)
CGroup: /system.slice/mysqld.service
└─3353 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Jun 18 18:28:11 centos-mysql-demo systemd[1]: Starting MySQL Server...
Jun 18 18:28:18 centos-mysql-demo systemd[1]: Started MySQL Server.
如果未加载该服务,则显示以下命令:
systemctl status mysqld || systemctl restart mysqld
将完成重新启动过程的技巧。您可以提出以下建议:
* * * * * systemctl status mysqld || systemctl restart mysqld
但是,如果mysql已加载,但服务未活动,则您的cron将不执行任何操作。因此,您应该使用更详细的命令,例如:
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
在这种情况下,如果服务已加载但无效,例如DOS攻击可能离开您的mysql服务的状态,则该命令还将重新启动mysql。使用--quiet
标志仅指定命令仅返回状态代码,而不向屏幕输出任何内容。如果省略--quiet
标志,您将看到active
或inactive
的状态输出。
您也可以创建一些交换空间,以向服务器添加更多可用的RAM资源,尽管Apache和MySQL手册均指定您不希望这些应用程序需要交换空间。
sudo dd if=/dev/zero of=/swapfile count=2096 bs=1MiB
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon --show
swapon --summary
free -h