linux 定时记录mysql主从同步延迟
#!/bin/bash
# 配置部分
MYSQL_USER="root"
MYSQL_PASS="123456"
MYSQL_HOST="127.0.0.1"
MYSQL_PORT=3306
# 输出目录
OUTPUT_DIR="/path/to/logs"
# 如果目录不存在则创建
mkdir -p "${OUTPUT_DIR}"
# 无限循环,每隔30秒执行一次
while true
do
# 获取当前时间
NOW=$(date +"%Y-%m-%d %H:%M:%S")
# 获取今天的日期,用于生成文件名
TODAY=$(date +"%Y-%m-%d")
# 日志文件名
OUTPUT_FILE="${OUTPUT_DIR}/mysql_delay_log_${TODAY}.txt"
# 查询Seconds_Behind_Master
DELAY=$(mysql -u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST} -P${MYSQL_PORT} -e "SHOW SLAVE STATUS\G" 2>/dev/null | grep 'Seconds_Behind_Master' | awk '{print $2}')
# 如果查询不到,标记为N/A
if [ -z "$DELAY" ]; then
DELAY="N/A"
fi
# 写入文件
echo "${NOW} Seconds_Behind_Master: ${DELAY}" >> "${OUTPUT_FILE}"
# 等待30秒
sleep 30
done
telnet/ping网络连通情况
#!/bin/bash
# 配置部分
TELNET_HOST="110.22.33.2"
TELNET_PORT=443
PING_HOST1="www.baidu.com"
PING_HOST2="www.baidu.com"
INTERVAL=30
OUTPUT_DIR="/path/to/logs"
mkdir -p "${OUTPUT_DIR}"
while true
do
NOW=$(date +"%Y-%m-%d %H:%M:%S")
TODAY=$(date +"%Y-%m-%d")
LOG_FILE="${OUTPUT_DIR}/check_log_${TODAY}.log"
# Telnet检测
nc -z -w3 ${TELNET_HOST} ${TELNET_PORT} >/dev/null 2>&1
if [ $? -eq 0 ]; then
TELNET_STATUS="OK"
else
TELNET_STATUS="FAIL"
fi
# Ping检测函数
ping_check() {
local host=$1
local result=$(ping -c 1 -W 3 $host 2>/dev/null)
if [ $? -eq 0 ]; then
echo "$result" | grep 'rtt min' | awk -F '/' '{print $5" ms"}'
else
echo "TIMEOUT"
fi
}
PING1_STATUS=$(ping_check ${PING_HOST1})
PING2_STATUS=$(ping_check ${PING_HOST2})
# 写日志
echo "${NOW} TELNET ${TELNET_HOST}:${TELNET_PORT}=${TELNET_STATUS} PING1 ${PING_HOST1}=${PING1_STATUS} PING2 ${PING_HOST2}=${PING2_STATUS}" >> "${LOG_FILE}"
# 清理超过3天的日志
find "${OUTPUT_DIR}" -name "check_log_*.log" -mtime +2 -delete
sleep ${INTERVAL}
done
如果运行报错:

原因:Windows(或用 Windows 编辑器)里写的脚本,保存时带了 Windows 的换行符(CRLF),导致脚本的第一行
#!/bin/bash 变成了 #!/bin/bash^M
执行
sed -i 's/\r//' check_mysql_delay.sh
去除 ^M
715

被折叠的 条评论
为什么被折叠?



