当前位置:网站首页>MySQL主从复制的原理以及实现
MySQL主从复制的原理以及实现
2022-07-06 09:15:00 【乘风破BUG】
什么是主从复制?
主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。
主从复制的原理
- Mysql主库在事务提交时会把数据变更作为事件记录在二进制日志Binlog中;
- 主库推送二进制日志文件Binlog中的事件到从库的中继日志Relay log中,之后从库根据中继日志重做数据变更操作,通过逻辑复制来达到主库和从库的数据一致性;
- Mysql通过三个线程来完成主从库间的数据复制,其中Binlog Dump线程跑在主库上,I/O线程和SQL线程跑在从库上;
- 当在从库上启动复制时,首先创建I/O线程连接主库,主库随后创建Binlog Dump线程读取数据库事件并发送到I/O线程,I/O线程获取到事件后更新到从库的中继日志Relay log中去,之后从库上的sql线程读取中继日志Relay log中更新的数据库事件并应用,如下图所示:
主实例搭建
- 运行mysql主实例
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
- 在mysql的配置文件夹/mydata/mysql-master/conf中创建一个配置文件my.cnf:
touch my.cnf
- 修改配置文件my.cnf,配置信息如下
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=wdj-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
- 修改完配置后重启实例
docker restart mysql-master
- 进入mysql-master容器中
docker exec -it mysql-master /bin/bash
- 在容器中使用mysql的登录命令连接到客户端
mysql -uroot -proot
- 创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
从实例搭建
- 运行mysql从实例
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
- 在mysql的配置文件夹/mydata/mysql-slave/conf中创建一个配置文件my.cnf
touch my.cnf
- 修改配置文件my.cnf
[mysqld]
#server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=wdj-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=wdj-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
- 修改完配置后重启实例
docker restart mysql-slave
将主从数据库进行连接
- 连接到主数据库的mysql客户端,查看主数据库状态
show master status;
主数据库状态显示如下:
- 进入mysql-slave容器中
docker exec -it mysql-slave /bin/bash
- 在容器中使用mysql的登录命令连接到客户端
mysql -uroot -proot
- 在从数据库中配置主从复制
change master to master_host='192.168.6.132', master_user='slave', master_password='123456', master_port=3307, master_log_file='wdj-mysql-bin.000001', master_log_pos=785, master_connect_retry=30;
- 主从复制命令参数说明
- master_host:主数据库的IP地址;
- master_port:主数据库的运行端口;
- master_user:在主数据库创建的用于同步数据的用户账号;
- master_password:在主数据库创建的用于同步数据的用户密码;
- master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
- master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
- master_connect_retry:连接失败重试的时间间隔,单位为秒。
- 查看主从同步状态
上图中标出来显示no表示还没有进行连接 - 开启主从同步
start slave;
- 查看从数据库状态发现已经同步
状态已经从no转成yes了
主从复制测试
主从复制的测试方法有很多,可以在主实例中创建一个数据库,看看从实例中是否有该数据库,如果有,表示主从复制已经搭建成功。
- 在主实例中创建一个数据库testzhucong
在主库中创建好数据库后,现在去从库查看一下数据库
从库中也已经把主库新建的数据库同步创建好了,自此完成了一个简单的Mysql主从复制的实践操作。
边栏推荐
- 分布式節點免密登錄
- 小L的试卷
- SQL时间注入
- 【CDH】CDH5.16 配置 yarn 任务集中分配设置不生效问题
- How to build a new project for keil5mdk (with super detailed drawings)
- SQL time injection
- [CDH] modify the default port 7180 of cloudera manager in cdh/cdp environment
- AcWing 179.阶乘分解 题解
- 天梯赛练习集题解LV1(all)
- Kept VRRP script, preemptive delay, VIP unicast details
猜你喜欢
随机推荐
AcWing 179.阶乘分解 题解
Codeforces Round #771 (Div. 2)
UDS learning notes on fault codes (0x19 and 0x14 services)
nodejs连接Mysql
Deoldify project problem - omp:error 15:initializing libiomp5md dll,but found libiomp5md. dll already initialized.
encoderMapReduce 随手记
Library function -- (continuous update)
Django running error: error loading mysqldb module solution
Are you monitored by the company for sending resumes and logging in to job search websites? Deeply convinced that the product of "behavior awareness system ba" has not been retrieved on the official w
Request object and response object analysis
Wangeditor rich text component - copy available
wangeditor富文本组件-复制可用
Valentine's Day flirting with girls to force a small way, one can learn
SQL时间注入
Rhcsa certification exam exercise (configured on the first host)
MTCNN人脸检测
Vs2019 use wizard to generate an MFC Application
Why can't STM32 download the program
4、安装部署Spark(Spark on Yarn模式)
分布式节点免密登录