mysql主从库可以在一起吗

发布时间: 2023-11-21 12:30 阅读: 文章来源:1MUMB3694PS
Mysql 如何进行主从库切换(计划内)

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

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%‘

修改配置文件中 read_only

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

在从库3307上查询slave 状态

show slave status;

在主库3306上看自己master状态

show master status;

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

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

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

stop slave;

show slave status;

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

reset slave all;

show slave status;

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

show master status;

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;

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

set global read_only=0;

show variables like ‘%read_only%‘

配置文件中 read_only 也要删除掉

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

create table test.mytest(id int );

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

从库上查询

select * from test.mytest;

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

drop table test.mytest;

•••展开全文
相关文章