编写一个shell脚本监测mysql是否发生了主备切换、并输出主备切换完成总共耗时多长时间
时间: 2023-09-12 15:05:28 浏览: 135
用shell写一个mysql数据备份脚本
### 回答1:
#!/bin/bash
# 记录开始时间
start_time=`date +%s`
# 检查MySQL主备切换是否完成
mysql -uroot -p123456 -e "show slave status \G" | grep "Seconds_Behind_Master" | awk '{print $2}'
# 记录结束时间
end_time=`date +%s`
# 计算主备切换完成总共耗时多长时间
cost_time=`expr $end_time - $start_time`
echo "主备切换完成总共耗时 $cost_time 秒"
### 回答2:
编写一个shell脚本监测MySQL主备切换是否发生,并输出主备切换完成总共耗时的脚本如下:
```shell
#!/bin/bash
# 设置MySQL主备切换前的状态
current_status=$(mysql -uroot -ppassword -e "SHOW SLAVE STATUS\G;" | grep "Master_Host")
previous_status=$current_status
# 检查主备切换是否发生,每隔1秒检查一次
while true
do
sleep 1
current_status=$(mysql -uroot -ppassword -e "SHOW SLAVE STATUS\G;" | grep "Master_Host")
if [[ $previous_status != "$current_status" ]]; then
break
fi
done
# 获取主备切换完成时的时间戳
start_time=$(date +%s)
# 检查主备切换是否完成
while true
do
sleep 1
current_status=$(mysql -uroot -ppassword -e "SHOW SLAVE STATUS\G;" | grep "Slave_SQL_Running")
if [[ $current_status == *"Yes"* ]]; then
break
fi
done
# 获取主备切换完成后的时间戳
end_time=$(date +%s)
# 计算主备切换耗时,以秒为单位
time_diff=$((end_time - start_time))
# 输出主备切换耗时
echo "主备切换完成耗时:$time_diff 秒"
```
在脚本中,我们首先获取MySQL主备切换前的状态,然后使用一个循环每秒钟检查一次主备切换是否发生。一旦发生主备切换,我们记录切换开始时间戳。
接着,我们通过循环每秒钟检查主备切换是否完成。一旦主备切换完成,我们记录切换完成时间戳。
最后,我们计算切换完成时间与开始时间的差值,即主备切换耗时,并输出结果。
### 回答3:
这是一个用bash编写的脚本,通过监测MySQL日志来检测是否发生了主备切换,并计算出主备切换完成的总共耗时。
```shell
#!/bin/bash
# 检测MySQL是否发生了主备切换
check_mysql_failover() {
local mysql_log="/var/log/mysql/error.log" # MySQL日志文件路径
local failover_start_time=""
local failover_end_time=""
local failover_duration=""
# 搜索日志中是否存在"Failover succeeded"的关键词
grep_result=$(grep -i "Failover succeeded" "$mysql_log")
# 如果找到了关键词,则表示发生了主备切换
if [[ ! -z "$grep_result" ]]; then
# 提取切换开始和结束时间
failover_start_time=$(echo "$grep_result" | awk '{print $1, $2}')
failover_end_time=$(date "+%Y-%m-%d %H:%M:%S")
# 计算切换耗时
start_timestamp=$(date -d "$failover_start_time" "+%s")
end_timestamp=$(date -d "$failover_end_time" "+%s")
failover_duration=$((end_timestamp - start_timestamp))
echo "发生主备切换!"
echo "切换开始时间:$failover_start_time"
echo "切换结束时间:$failover_end_time"
echo "切换耗时:$failover_duration 秒"
else
echo "未发生主备切换"
fi
}
# 调用函数进行监测
check_mysql_failover
```
此脚本首先设置MySQL日志文件的路径,然后搜索日志中是否存在"Failover succeeded"的关键词。如果找到了关键词,则表示发生了主备切换。脚本会提取切换的开始时间和结束时间,然后通过计算时间戳的差值得出切换的耗时。最后,脚本会输出切换的开始时间、结束时间和耗时。如果没有找到关键词,则表示未发生主备切换。
阅读全文