主从切换_Mysql 复制如何进行主从库切换(计划内)

本文介绍了在计划内进行Mysql主从库切换的详细步骤,包括停止写入、设置读锁定、提升从库为主库、更新复制配置、测试数据一致性等关键环节。文中以一个简单的主从结构环境为例,详细阐述了每个步骤的操作方法,以确保切换过程的顺利进行。
摘要由CSDN通过智能技术生成

Mysql 如何进行主从库切换(计划内)

4061f13d30eb797e7b39fe95109b814c.png

计划内的主从库进行切换比较简单,步骤如下

1. 停止向老主库写入

2. 让备库追赶上主库的数据(可选的,会简化下面的步骤)

3. 将一台从库提升为主库

4. 将备库和写操作指向新的主库,然后开启主从写入

但这其中还隐藏着许多细节,一些场景可能依赖于复制的拓扑结构,例如 主-主结构和主-备结构的配置有所不同

我们更深入一点,下面是大多数需要的步骤

我们的环境 是简单的主从结构,主库 端口为3306 从库端口为3307 , 用于演示的测试环境在一台机器上搭建(生产上 主从必须要两个服务器)

1. 停止当前主库所有的写入操作,如果可以最好将客户端程序关闭(除了复制连接)

2. 通过flush tables with read lock 在主库上停止所有活跃的写入,这一步是可选的,也可以在主库上设置 read_only 选项(如果从库之前是设置的 read,那么这里可以将主库直接设置为read_only),从这一时刻开始,将禁止向被替换的主库做任何写入操作,因为它一旦不是主库,则写入即意味着数据丢失,为了更好的保证这一点,可以kill 所有打开的事务,这将会真正结束所有的写入操作。

flush tables with read lock;

set global read_only=1;

show variables like '%read_only%'

d032b308e1d6977c2b275e83e04973d6.png

修改配置文件中 read_only

14d24c97addfc04607b06caa8def1f79.png

3. 选择一个备库作为新的主库,并确保它已经完全跟上主库(例如 让它执行完所有从主库获取的中继日志)

在从库3307上查询slave 状态

show slave status;

77aa8176a06ace1e83d76ea674ef28ed.png

在主库3306上看自己master状态

show master status;

6413b9be9b5fbd1222aa249adc50be4f.png

4. 确保主库和从库数据一致的(可选)

我们可以找几个表进行测试,或者使用 pt-table-checksum 进行测试,这里是可选的,一般不会出现问题

5. 在新主库(3307)上执行stop slave

stop slave;

show slave status;

500352a47be032bd7405deb37fd1929e.png

6. 在新主库上(3307)执行 rest slave all,使其断开于老主库的连接,并丢弃master.info里面的记录信息(如果连接信息记录在my.cnf里,会无法正确工作),这里我们不建议将该信息放到my.cnf中去

reset slave all;

show slave status;

b440ba2a0d8a24587ecbbd913c2480f2.png

7. 在新主库上 show master status 记录新主库的二进制日志信息

show master status;

16089c1f51c5aa6975b41880c6cc8af9.png

8. 老主库(3306)上创建 复制 并指向新主库3307,并解锁第二步中的 lock,如果老主库不用了,则忽略这步,将其他从库的主库指向新主库

change master to master_host='10.106.216.182',

master_user='repl',

master_port=3307,

master_password='123456',

master_log_file='mysql3307-bin.000001',

master_log_pos=399110;

start slave;

unlock tables;(一定记得要解锁,要不后续同步数据 过不来)

show slave status;

1c9d95b5278af79c16cfae07992b0402.png

9. 将新主库(3307) 的read_only 去掉(可选,如果之前有设置read_only的话)

set global read_only=0;

show variables like '%read_only%'

1e1edfdcd63f9e5738fa1ea22adff0be.png

配置文件中 read_only 也要删除掉

c4a81df6ca5445c5c588c773f390bbcd.png

10. 在新主库上 创建一个表 并插入数据,进行测试

create table test.mytest(id int );

insert into test.mytest(id) values(1)

从库上查询

select * from test.mytest;

3bb3b2428d47089b1bdd01ca1c7b6daf.png

11. 重启各个数据库,查看是否正常启动 并在主库删除该表,从库跟着也删除则整个流程完成

drop table test.mytest;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值