本文介绍teledb故障处理的相关问题处理案例
环境说明
- mysql 内核版本:
- v5.7.x
问题现象
主从不一致,利用agent的alldump重做主从。
原因分析
从库因为各种与主库不一致,相差事务太多,无法通过手动执行相差的gtid事务来修复,除了可以利用备份恢复的功能来恢复该从库,还可以利用agent的alldump功能来重做该从库(实质上也是备份恢复,只是agent实现了相应功能)。
解决方法
# ps 不需要关闭agent 通过修改keeper选举达到不触发主从切换。改完记得改回来!
1.#ZK
# 查看zk状态
/app/zookeeper/zookeeper-3.4.11/bin/zkServer.sh status /app/zookeeper/zookeeper_data/2388/zoo.cfg
# 登录zk机器
cd /app/zookeeper/zookeeper-3.4.11/bin/
# 登录zk
./zkCli.sh -server 127.0.0.1:2388
get /teledb/os/2972/sets/set@set_1271846301/setrun@set_1271846301
2.# Keeper
# 登录keeper机器,在keeper目录下选择对应的set
cd /teledb/keeper/kp_2972/
# 通过keeper获取zk的信息
./get_set_info set_1271846301
./modify_election set_1271846301 10.225.83.184_6301 0
3.# Slave
#切换teledb用户
su - teledb
# 登录slave
/teledb/mysql-install/bin/mysql -S /tmp/mysql_6301.sock -uRDS_agent -p
sql:
# 先查看是不是从库
show global variables like '%read_only%';
# 停掉从库 守护进程mysqld_safe和mysqld
ps -ef |grep mysqld
kill -9
# 删除data目录下的数据以触发alldump重做从库
cd /data/data
mv ./data ./databak
4.# Master
# 切换teledb用户
su - teledb
# 登录Master 查看processlist中是否存在长事务,避免在xtrabackup读取数据时由于线程中存在长事务锁住数据导致备份失败。
/teledb/mysql-install/bin/mysql -S /tmp/mysql_6301.sock -uRDS_agent -p
sql:
# 先查看是不是主库,并且查看下是否存在大事务。
show global variables like '%read_only%';
select * from information_schema.processlist where command not in ('sleep','connect') order by 6 desc limit 5\G
show full processlist;
#登录主库所在的实例的agent的log查看alldump日志
tail -100f /teledb/agent/log/nohup/alldump
# 检查重做完成后需要把原来keeper修改的值改回来 !!!!!!!!!!!!!!!!!!!!!!
# Keeper
# 登录keeper机器,在keeper目录下选择对应的set
cd /teledb/keeper/kp_2972/
# 通过keeper获取zk的信息
./get_set_info set_1271846301
./modify_election set_1271846301 10.225.83.xxx_6301 1
其他说明
重做从库流程:
1、停从库的agent
2、停从库mysql
3、mv数据目录
4、创建新的数据目录
5、启动从库agent
6、检查同步情况