一、概念及应用场景
二、主从复制原理
三、MySQL主从复制的工作过程
四、主从复制实验
一、概念及应用场景:
在企业应用中,成熟的业务通常数据量都比较大
单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求
配置多台主从数据库服务器以实现读写分离
二、主从复制原理
MySQL主从复制原理
MySQL的复制类型
基于语句的复制(STATEMENT, MySQL默认类型)
基于行的复制(ROW)
混合类型的复制(MIXED)
三、MySQL主从复制的工作过程;
⭐⭐ 两日志、三线程
(1)在每个事务更新数据完成之前,Master 在二进制日志(Binary log)记录这些改变。写入二进制日志完成后,Master 通知存储引擎提交事务。
(2)Slave 将 Master 的复制到其中继日志(Relay log)。首先slave 开始一个工作线程(I/O),I/O线程在 Master 上打开一个普通的连接,然后开始 Binlog dump process。Binlog dump process 从 Master 的二进制日志中读取事件,如果已经跟上 Master,它会睡眠并等待 Master 产生新的事件,I/O线程将这些事件写入中继日志。
(3)SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新 Slave 数据,使其与 Master 中的数据一致,只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
复制过程有一个很重要的限制,即复制在 Slave 上是串行化的,也就是说 Master 上的并行更新操作不能在 Slave 上并行操作。
四、主从复制实验
虚拟机:
mysql-master 192.168.10.17
mysql-slave1 192.168.10.20
mysql-slave2 192.168.10.21
三台虚拟机都事先安装好了MySQL 下面对主从机器进行配置
1、配置主从同步
① master服务器修改配置文件
# vim /etc/my.cnf
#在mysqld模块下修改一下内容
#开启二进制日志文件(之后生成的日志名为master-bin)
log_bin=master-bin
#开启从服务器日志同步
log_slave=updates=true
#主服务器id为1(不可重复)
server-id = 1
service mysqld restart 重启MySQL
②进去MySQL数据库配置规则
查看master数据库状态
mysql>
#以上可见产生了master-bin.000001日志文件,定位为603
#从服务器需要定位到此处进行复制
2、从服务器配置
# vim /etc/my.cnf
#开启二进制日志文件
log-bin=master-bin
#设置server id为2,slave2 为3
server-id = 2 3
#从主服务器上同步日志文件记录到本地
relay-log=relay-log-bin
#定义relay-log的位置和名称(index索引)
relay-log-index=slave-relay-bin.index
开启从服务器功能
查看从服务器状态
测试 在主服务器上创建一个数据库