MySQL之主从复制
主从复制的原理
-
原理图
-
主要涉及三个线程:binlog 线程、I/O 线程和 SQL 线程。
- binlog 线程 :负责将主服务器上的数据更改写入二进制日志(Binary log)中。
- I/O 线程 :负责从主服务器上读取二进制日志,并写入从服务器的中继日志(Relay log)。
- SQL 线程 :负责读取中继日志,解析出主服务器已经执行的数据更改并在从服务器中重放(Replay)。
- 步骤
主从复制的原则
- 一个slave只能有一个master
- 一个master可以有多个slave
- 一个slave只能有一个唯一的服务器ID
主从复制的问题
- 延时
一主一从配置
前提条件:MySQL数据库版本必须一致
主机配置(Windows)
- 我的ip:192.168.128.110
配置均在my.ini
的[mysqld]
结点下
[mysqld]
# 设置主服务器唯一ID[必须]
server-id=1
# 启用二进制日志[必须] log-bin=数据库路径\mysqlbin
log-bin=G:\Programs\mysql-8.0.18\data\mysqlbin
# 启用错误日志[可选]
log-err=G:\Programs\mysql-8.0.18\data\mysqlerr
# 设置mysql的安装目录
basedir=G:\Programs\mysql-8.0.18
# 设置临时目录[可选]
tmpdir=G:\Programs\mysql-8.0.18
# 设置主机读写均可以
read-only=0
# 设置不需要备份的数据库[可选]
binlog-ignore-db=mysql
# 设置需要备份的数据库[可选]
# binlog-do-db=layman
从机配置(Linux)
[mysqld]
# 设置主服务器唯一ID[必须]
server-id=2
# 启用二进制日志[可选](linux环境采用默认值即可)
log-bin=mysql-bin
Windows主机为从机配置账户并授权
GRANT replication SLAVE ON *.* TO 'layman'@'192.168..128.115' IDENTIFIED BY '123456'; -- 授权
FLUSH PRIVILEGES; -- 刷新
SHOW MASTER STATUS; -- 查看主机状态
记录File和Position的值
- File : binlog.000011
- Position : 18165
Linux从机配置
-
我的ip:192.168.128.115
-
无需选择数据库,直接在命令行登陆界面后执行
CHANGE MASTER TO MASTER_HOST='192.168.128.110',
MASTER_USER='layman',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000011',
MASTER_LOG_POS=18165
- 如果出现以下报错,请先停止同步
START SLAVE; -- 启用slave
SHOW SLAVE STATUS\G -- 查看状态
- 此时在主机上新建库,表,插入数据都会同步至从机
停止主从复制
STOP SLAVE; -- 停止主从复制(在从机上操作)
主从复制的优势(读写分离)
-
主服务器处理写操作以及实时性要求比较高的读操作
-
从服务器处理读操作
读写分离能够提高系统性能
- 主从服务器负责各自的读和写,极大程度缓解锁竞争
- 从服务器可以使用 MyISAM,提升查询性能以及节约系统开销
- 增加冗余,提高可用性