当前位置:网站首页>Mysql性能优化(5):主从同步原理与实现
Mysql性能优化(5):主从同步原理与实现
2022-06-30 03:21:00 【不死鸟.亚历山大.狼崽子】
1 什么是主从同步
MySQL 主从同步是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
2 应用场景
2.1 读写分离
在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。当读的压力增加时,也可以通过配置多个从数据库,一起分担读取数据的压力,提高系统的稳定性。
2.2 架构扩展
随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能。
3 原理图

主从同步后的操作原则:
主数据库一般只负责做增删改操作,极少负责查询,从数据库只负责做查询,不负责增删改操作,此时主数据库中数据的变动会通过某种方式,自动同步到所有的从数据库中,最终保持数据一致
- Master中开启一个线程,把数据变动记录到一个二进制的日志文件(binary log)中
- Slave中开启一个IO线程专门用于读取Master中二进制日志内容,并且把数据写入自己的回放日志文件(relay log)中
- Slave中SQL线程去读取回放日志(relay log)的内容,把Master中执行的DML进行回放,完成主从同步
注意:
主从同步是有一定延迟的,所以无法保证从数据库中马上能读取到主数据库同步的信息,因此只要业务方法中涉及到写的操作,那么该操作必须在主数据库上执行
4 实现步骤
准备工作:
先让Master和Slave都拥有相同的数据库,并且数据库中的表数据一致,我这里使用我自己的skywalking库。
1、在Master的配置文件中[mysqld]部分做以下配置,开启binary-log
#配置当前服务器的id
server-id=1
#配置二进制日志文件名
log-bin=master-bin
#配置记录哪个数据库的日志,可以多次配置
binlog-do-db=skywalking然后重启MySQL服务后,再次登录进去看使用SQL命令查看信息,显示以下内容及表示第一步成功了
-- 查看主数据库状态
show master status;
-- 注意:bin-log的文件名会随着主服务器的重启发送变化
2、在Master数据库中新建一个新用户专门用于做主从同步
-- 可以使用图形化界面来操作
-- 创建用户slave用于主从同步,并授予rbac数据库操作权限
GRANT ALL ON `skywalking`.* TO 'slave'@'%' IDENTIFIED BY '1'
-- 授予主从同步权限,该权限是一个全局的权限
GRANT replication slave ON *.* TO 'slave'@'%'
-- 刷新权限
flush privileges3、在Slave的配置文件中[mysqld]部分做以下配置,然后重启数据库服务
#配置从服务器id,必须唯一不能重复
server-id=2
#回放哪个数据库的日志,可以多次配置
replicate-do-db=skywalking4、登录Slave中执行SQL
CHANGE MASTER TO
MASTER_HOST='192.168.222.131',
MASTER_USER='slave',
MASTER_PASSWORD='1',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=154其中:
MASTER_HOST为主服务的ip地址,
MASTER_USER为上面新建的主从复制的用户名,
MASTER_PASSWORD为上面新建的用户的密码,
MASTER_LOG_FILE为bin-log的文件名,
MASTER_LOG_POS为日志文件的长度位置
在主数据库上执行
show master status; 查看bin-log文件名和日志文件的长度位置

File为文件名,Position为日志文件的长度位置
注意:
如果从数据库已经开启了主从同步则需要先关闭,才能执行上面的配置
stop slave配置完以后开启主从同步
start slave启动后查看数据库状态:
-- 查看从数据库状态
show slave status
看到Slave_IO_Running和Slave_SQL_Running都为YES表示成功了
如果有错误,请查看对应的Last_Error_Log

边栏推荐
- 快速排序、聚簇索引、尋找數據中第k大的值
- Global and Chinese market of centrifugal pumps 2022-2028: Research Report on technology, participants, trends, market size and share
- 1152_ Makefile learning_ Pattern matching rules
- Some technology sharing
- 约瑟夫环 数学解法
- How does the trading platform for speculation in spot gold ensure capital security?
- Formal and actual parameters, value passing and address passing
- 专升本高数(三)
- Differences between comparable and comparator
- golang bilibili直播弹幕姬
猜你喜欢

Gulang bilibilibili Live Screen Jackie

共124篇!墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG)

Hudi record

广播模块代码在autojs4.1.1版本运行正常,但在pro7.0版本上运行报错(未解决)

prompt learning 一个空格引发的血案

MySQL extracts strings from table fields

专升本高数(四)

如何实现远程协同办公,收好这份攻略!

Federal learning: dividing non IID samples by Dirichlet distribution

编译一个无导入表的DLL
随机推荐
WPF Initialized事件在.cs中绑定不被触发的原因
快速排序、聚簇索引、尋找數據中第k大的值
MySQL + JSON = King fried
Federal learning: dividing non IID samples by Dirichlet distribution
Gulang bilibilibili Live Screen Jackie
[ten minutes] manim installation 2022
自定义MVC的使用
Add a custom button to jvxetable
简单自定义mvc
浅谈IDEA的优化和使用
编译一个无导入表的DLL
专升本语文资源整理
[wechat applet] how did the conditional rendering list render work?
Global and Chinese market of centrifugal pumps 2022-2028: Research Report on technology, participants, trends, market size and share
2022 new test questions for safety management personnel of metal and nonmetal mines (small open pit quarries) and certificate examination for safety management personnel of metal and nonmetal mines (s
 与空格的区别
Jvxetable sub table record loading completion event
If you can tell whether the external stock index futures trading platform I am trading is formal and safe?
QT中foreach的使用
New edition of diazotization process in 2022 and analysis of diazotization process