mysql主从读写分离和主从热备
主从复制: 当mysql数据库的数据量太大的时候,查询数据就很吃力了,无论怎么优化都会产生瓶颈,这时我们需要增加服务器设备来实现分布式数据库,实现多机热备份,要想实现多机的热备,首先要了解主从数据库服...
2024.11.12计划内的主从库进行切换比较简单,步骤如下
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;
主从复制: 当mysql数据库的数据量太大的时候,查询数据就很吃力了,无论怎么优化都会产生瓶颈,这时我们需要增加服务器设备来实现分布式数据库,实现多机热备份,要想实现多机的热备,首先要了解主从数据库服...
2024.11.12前段时间,刚好学了这个mysql主从搭建,为了记录自己学习成果,特以笔记形式记录下来。如有不足之处,谢谢指正!一、mysql主从搭建,1主2从docker-compose.yamlversion: ‘...
2024.11.14本章节主要来讲解的是MySQL中的视图、存储过程、存储函数和触发器,这些都是MySQL数据库中的存储对象,学好能助你涨薪[偷笑]。一、视图视图(View)是一种虚拟存在的表,视图中的数据并不在数据库中...
2024.11.15在Linux的Docker中部署MySQL主从复制,可以按照以下步骤进行详细操作:步骤1:安装Docker和Docker Compose 首先,确保在Linux服务器上已经安装了Docker和Dock...
2024.11.151 概念区分普通索引 V.S 唯一索引普通索引可重复,唯一索引和主键一样不能重复。 唯一索引可作为数据的一个合法验证手段,例如学生表的身份证号码字段,人为规定该字段不得重复,那么就使用唯一索引。(一般...
2024.11.13