mysql从节点自动故障转移(mysql8.0)
【1】概念
(1.1)本文说的自动故障转移到底是什么?
从MySQL 8.0.23开始,复制结构中,增加了从节点自动故障转移功能。
这个自动故障转移的概念得说清楚不然有歧义;
假设有 ABC,A为主,B/C 为从节点,那么当A出问题后,新主库变成了B,那么C会自动把主库变成B,这就是我们本文中的自动故障转移;
(1.2)测试
从MySQL 8.0.23开始,复制结构中,增加了从节点自动故障转移功能。测试一下起功能:
用dbdeployer快速安装测试环境,我这边安装的是:dbdeployer1.8.5
-- 安装脚本 dbdeployer deploy replication 8.0.25 --bind-address=0.0.0.0 --base-port=18610 --sandbox-home=/data1/db/mydb --sandbox-binary=/usr/local
--native-auth-plugin --db-password=cc.123 --db-user=sa --remote-access=%
--post-grants-sql=grant all on *.* to 'sa'@'%' WITH GRANT OPTION --gtid --nodes=4 ; --删除脚本 dbdeployer delete rsandbox_8_0_25 --sandbox-home=/data1/db/mydb --sandbox-binary=/usr/local;
安装1主3从库,基于gtid的主从库。
主库:端口18611;3个从库: 18612,18613,18614
stop slave,配置自动转移:SOURCE_CONNECTION_AUTO_FAILOVER=1
change master to SOURCE_HOST='127.0.0.1', SOURCE_USER='sa', SOURCE_PASSWORD='cc.123', SOURCE_PORT=18611, SOURCE_AUTO_POSITION=1, SOURCE_CONNECTION_AUTO_FAILOVER = 1
再start slave,查看主从同步正常后:
在18613执行:
SELECT asynchronous_connection_failover_add_source('', '127.0.0.1', 18612, '', 100);
查看结果:
select * from mysql.replication_asynchronous_connection_failover
表示已经设置完成,如果要删除从节点自动故障转移,可以执行:
select asynchronous_connection_failover_delete_source('', '127.0.0.1', 18612, '');
cd到主库目录:执行./stop,模拟主库故障,再看18613的slave status,:
完成了主库故障,从库漂移到指定从库做主库。