写一个shell脚本 监控mysql
时间: 2023-06-02 21:05:10 浏览: 65
的运行状态,如果mysql宕机,则重启mysql。请问该怎么做?
很好,这是一个技术类问题,我可以回答。您可以编写一个类似下面这样的脚本来监控和重启MySQL:
```
#!/bin/bash
# MySQL进程名
MYSQL_PROCESS_NAME='mysqld'
# 检查MySQL进程是否正常运行
if ps ax | grep -v grep | grep $MYSQL_PROCESS_NAME > /dev/null
then
echo "MySQL is running"
else
echo "MySQL is not running"
# 重启MySQL
service mysql restart
fi
```
您可以将以上代码保存为一个脚本文件,比如"mysql_monitor.sh",然后添加执行权限:
```
chmod +x mysql_monitor.sh
```
接着,您可以使用cron定时执行该脚本,确保MySQL一直处于正常运行状态。
相关问题
写个linux监控mysql是否安装的shell脚本
可以的,以下是一个简单的 shell 脚本,用于检查 MySQL 是否已安装在 Linux 系统中:
```
#!/bin/bash
if [ -x "$(command -v mysql)" ]; then
echo "MySQL 已安装"
else
echo "MySQL 未安装"
fi
```
该脚本使用 `command -v` 命令来检查 `mysql` 命令是否可用,如果可用,则说明 MySQL 已安装。如果不可用,则说明 MySQL 未安装。
shell脚本实现mysql锁表监控
可以使用以下shell脚本实现mysql锁表监控:
```bash
#!/bin/bash
# MySQL连接信息
MYSQL_USER="your_mysql_user"
MYSQL_PASS="your_mysql_password"
MYSQL_HOST="your_mysql_host"
MYSQL_PORT="your_mysql_port"
MYSQL_DB="your_database_name"
# 获取锁表数据
LOCK_TABLES=$(mysql -u $MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST -P $MYSQL_PORT -e "SELECT CONCAT(TABLE_SCHEMA,'.',TABLE_NAME) AS TABLE_NAME, COUNT(*) AS LOCK_COUNT FROM INFORMATION_SCHEMA.INNODB_LOCKS WHERE LOCK_MODE = 'X' GROUP BY TABLE_SCHEMA,TABLE_NAME ORDER BY LOCK_COUNT DESC" $MYSQL_DB)
# 检查是否存在锁表
if [[ -z "$LOCK_TABLES" ]]; then
echo "No tables are currently locked."
else
echo "Locked tables:"
echo "$LOCK_TABLES"
fi
```
将上述脚本保存为一个文件,例如`mysql_lock_monitor.sh`,然后在命令行中执行该文件即可,如下所示:
```bash
sh mysql_lock_monitor.sh
```
该脚本会连接到指定的MySQL数据库,并查询当前被锁定的表数据。如果不存在锁表,则输出"No tables are currently locked.",否则输出"Locked tables:"及具体的锁表数据。