暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql 手动故障切换

数据库笔记 2020-07-22
514

模拟12从环境,主库宕机情况下的手动切换和修复

环境准备:

3redhat6.3 单颗CPU2G内存操作系统

master:192.168.233.2

slave1:192.168.233.3

slave2:192.168.233.4

mysqlpercona-server5.7.19

同步方式为半同步(GTID

 

模拟主库崩溃场景:

杀掉mysql进程

ps –ef|grep mysql

killall -9 mysqld mysqld_safe

查看从库复制状态:

Slave_IO_Running->Connecting

确认两节点状态都处于slave has read all relay log;wait for more updates


选择192.168.233.3为新的主库:

执行reset master;--作用是清空bin log日志,并创建一个新的binlog

执行reset slave --作用是清除slave_master_infoslave_relay_log_info信息,清空relay log

创建新主库到旧主库的复制账号:

grant replication slave on *.* to repl@'192.168.233.2 ' identified by ‘123456’;

更改新主库的参数:(报找不到参数看最后)

set global rpl_semi_sync_master_enabled=1;

set global rpl_semi_sync_slave_enabled=0;

set global read_only=0;


slave2(192.168.233.4)执行切换主库操作:

stop slave;

change master to master_host='192.168.233.3',master_user='repl',master_password='123456',master_port=3306,master_auto_position=1;

start slave;


恢复旧主库,并使其成为新的备库:

/etc/init.d/mysqldstart启动mysqld服务

更改旧主库的参数为备库参数:

set global rpl_semi_sync_master_enabled=0;

set global rpl_semi_sync_slave_enabled=1;

set global read_only=1;

切换主库为192.168.233.3,开启复制

change master to master_host='192.168.233.3',master_user='repl',master_password='123456',master_port=3306,master_auto_position=1;

start slave;

--至此切换结束


执行过程中如果报找不到半同步相关参数的,按以下步骤安装插件:

在主库安装semisync_master插件:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql>set global rpl_semi_sync_master_enabled=1;

在备库安装semisync_slave插件
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql>set global rpl_semi_sync_slave_enabled=1;


在从库状态并不是slave has read all relay log;wait for more updates时关闭复制会导致

部分transaction未执行成功,数据不一致的导致start slave报错:

由报错可知,执行失败的GTID编号: fafb3b40-40cb-11e8-85d9-000c29057f3c:1

 

解决方法:

1.跳过这条事务

(1)停止slave进程

mysql>STOP SLAVE;

(2)设置事务号,事务号从Retrieved_Gtid_Set获取

session里设置gtid_next,即跳过这个GTID

mysql>SET @@SESSION.GTID_NEXT= '216d7609-3e41-11e8-9481-000c292618fc:1,fafb3b40-40cb-11e8-85d9-000c29057f3c:1'

(3)设置空事物

mysql>BEGIN; COMMIT;

(4)恢复事物号

mysql>SET SESSION GTID_NEXT = AUTOMATIC;

(5)启动slave进程

 

mysql>START SLAVE;

2.清除这条事务

(1)停止slave进程

stop slave;

(2)设置gtid_purged

set global gtid_purged='216d7609-3e41-11e8-9481-000c292618fc:1,fafb3b40-40cb-11e8-85d9-000c29057f3c:1';

(3)设置空事物

mysql>BEGIN; COMMIT;

(4)启动slave进程

start slave;


文章转载自数据库笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论