当前位置:网站首页>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

边栏推荐
- Compile a DLL without import table
- Wechat applet +php to realize authorized login operation
- 正则全匹配:密码由8位以上数字,大小写字母,特殊字符组成
- ZABBIX trigger explanation
- X书6.97版本shield-unidbg调用方式
- 华为面试题: 高矮个子排队
- Comparable和Comparator的区别
- General paging (2)
- What is the metauniverse: where are we, where are we going
- 共124篇!墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG)
猜你喜欢
随机推荐
GTK interface programming (II): key components
简单自定义MVC优化
专升本高数(四)
Auto.js学习笔记15:autojs的UI界面基础篇2
Global and Chinese market for sensor screwdrivers 2022-2028: Research Report on technology, participants, trends, market size and share
一篇文章带你入门vim
发现mariadb数据库时间晚了12个小时
Sorting method of administrative route code letter + number
【微信小程序】条件渲染 列表渲染 原来这样用?
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
Federal learning: dividing non IID samples by Dirichlet distribution
Reasons for MySQL master-slave database synchronization failure
JS 字母和数字的相互转换
MySQL extracts strings from table fields
O & M (21) make winpe startup USB flash disk
2022 tool fitter (Advanced) and tool fitter (Advanced) certificate examination
Global and Chinese market of bulk acoustic wave devices 2022-2028: Research Report on technology, participants, trends, market size and share
Some common functions and precautions
Auto. JS learning notes 16: save to the mobile phone by project, instead of saving a single JS file every time, which is convenient for debugging and packaging
Summary of PHP test sites encountered in CTF questions (I)



![[QT] QMap使用详解](/img/ee/6e71a3dc5b90d2d1b7f7d3f6b56221.png)




