mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续
跳过错误有两种方式:
1.跳过指定数量的事务:
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
mysql>slave start
2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
#slave-skip-errors=all #跳过所有错误
---------------------
由于手动比较麻烦,所以写了一个shell脚本, 记录一下
#!/bin/bash
USERNAME="dba"
PASSWORD="9f46d07425"
create_db_sql="show slave status\G"
time = `mysql -u${USERNAME} -p${PASSWORD} -e "show slave status\G" | grep "Seconds_Behind_Master: " | awk -F ': ' '{print $2}')`
num = `mysql -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}" | grep -w error | wc -l`
while [[ "0" != $time ]]; do
if [[ $num -gt 0 ]]; then
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "slave stop;"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "slave start;"
fi
done