记录一次mysql主从

发布于:2025-02-10 ⋅ 阅读:(34) ⋅ 点赞:(0)

这段脚本用于自动跳过 MySQL 主从复制过程中的错误,特别是 1023 和 1062 错误(通常是由重复键或主键冲突引起的)。该脚本在从库(slave)上运行,并且包含了日志记录功能,便于追踪操作过程。

#!/bin/bash
# Description: 自动跳过主从复制的错误(错误代码1023、1062),这个脚本在slave上执行
# 添加日志功能

user='maxrou'
pass='maxrou'
port='3066'
IP='mysql1'
MYSQLCLI='/usr/local/mysql/bin/mysql'
log_file="/var/log/mysql_slave_skip.log"  # 设置日志文件路径

# 定义记录日志的函数
log_message() {
    local message=$1
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> $log_file
}

# 获取当前的 Relay_Log_Pos
current_pos=$($MYSQLCLI --defaults-extra-file=/usr/local/sbin/zabbix/my.password -P$port -e 'SHOW SLAVE STATUS\G' | grep 'Relay_Log_Pos' | awk '{print $2}')

# 记录当前的 Relay_Log_Pos
log_message "当前 Relay_Log_Pos: $current_pos"

# 获取上次的 Relay_Log_Pos(假设保存在文件中)
if [ -f /tmp/relay_log_pos.txt ]; then
    last_pos=$(cat /tmp/relay_log_pos.txt)
else
    last_pos=0
fi

# 记录上次的 Relay_Log_Pos
log_message "上次 Relay_Log_Pos: $last_pos"

# 检查 current_pos 和 last_pos 是否是有效的整数
if ! [[ "$current_pos" =~ ^[0-9]+$ ]]; then
    log_message "错误: current_pos 不是有效的整数: $current_pos"
    exit 1
fi

if ! [[ "$last_pos" =~ ^[0-9]+$ ]]; then
    log_message "错误: last_pos 不是有效的整数: $last_pos"
    exit 1
fi

# 判断 Relay_Log_Pos 是否变化
if [ "$current_pos" -eq "$last_pos" ]; then
    # Relay_Log_Pos 没有变化,执行跳过复制错误的操作
    log_message "Relay_Log_Pos 没有变化,跳过复制错误"
    $MYSQLCLI --defaults-extra-file=/usr/local/sbin/zabbix/my.password -P$port -e "STOP SLAVE;"
    $MYSQLCLI --defaults-extra-file=/usr/local/sbin/zabbix/my.password -P$port -e "SET GLOBAL slave_exec_mode='IDEMPOTENT';"
    $MYSQLCLI --defaults-extra-file=/usr/local/sbin/zabbix/my.password -P$port -e "SET GLOBAL sql_slave_skip_counter=10;"
    $MYSQLCLI --defaults-extra-file=/usr/local/sbin/zabbix/my.password -P$port -e "START SLAVE;"
    log_message "跳过 10 个事件,继续复制。"
fi

# 更新 /tmp/relay_log_pos.txt 文件为当前的 Relay_Log_Pos
echo $current_pos > /tmp/relay_log_pos.txt
log_message "更新 Relay_Log_Pos 为当前的 $current_pos"

每 5 分钟执行一次脚本。

# 脚本存放在  /usr/local/bin
crontab -e
*/5 * * * * /usr/local/bin/manage_repl.sh

观察日志

在这里插入图片描述

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到