一、MySQL主从复制原理

一、MySQL主从复制原理

MySQL的主从复制和MySQL的读写分离两者有必然的联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离

1)MySQL支持的复制类型
(1)基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。但是必须开启二进制日志功能;
(2)基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍;
(3)混合类型的复制:默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制;

2)复制的工作过程

MySQL复制的工作过程详细介绍:
1.在每个事物更新数据完成之前,Master在二进制日志记录这些变化。写入二进制日志完成后,Master通知存储引擎提交事务;
2.Slave将Master的Binary log(二进制日志)复制到其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主从复制

大致步骤分为:
(1)MySQL主服务器建立时间同步;
(2)MySQL从服务器进行时间同步;
(3)关闭防火墙;
(4)安装MySQL数据库;
(5)配置MySQL主服务器;
(6)配置MySQL从服务器;
(7)验证主从复制效果;

实验环境

master:192.168.38.138
slave1:192.168.38.139
slave2:192.168.38.140

(1)MySQL主服务器建立时间同步

yum -y install ntp             
//安装NTP
vim /etc/ntp.conf              
//编写ntp服务的配置文件 并在末尾添加
server 127.127.1.0                                        
//需要同步上层服务器(本身)
fudge 127.127.1.0 stratum 10                         
//同步上层服务器的层数(大小不能超过或等于16)
systemctl start ntpd   
//重启ntp服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3Lg2ZDw-1649437056451)(C:\Users\KK\AppData\Roaming\Typora\typora-user-images\1649436319221.png)]

(2)MySQL从服务器进行时间同步

两台从服务器上都要进行时间同步!

yum -y install ntpdate
systemctl start ntpd
ntpdate 192.168.38.138
//安装ntpdate工具,并指定ntp服务器实现同步
crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.38.138

在这里插入图片描述

(3)关闭防火墙(或开启相应端口)

 systemctl stop firewalld 	
 //关闭防火墙
 systemctl disable firewalld   
 //开机自动关闭

(4)安装MySQL数据库

具体过程详见之前数据库安装

(5)配置MySQL主服务器

vim /etc/my.cnf
server-id = 1		   #服务器ID号,自定义但不可以与别的MySQL服务器冲突
log-bin=master-bin      #添加,主服务器开启二进制日志
log-slave-updates=true  #添加,允许从服务器更新二进制日志

systemctl restart mysqld

mysql -u root -p
grant replication slave on *.* to 'myslave'@'192.168.38.%' identified by '密码';
//授权用户myslave,密码是123456,在192.168.38.0网段的所有MySQL服务器上对所有数据库、表具有复制的权限
flush privileges;		#刷新
show master status;		#File 列显示日志名,Fosition 列显示偏移量
show master status\G;	#查看日志文件名,position位置。。。。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)配置MySQL从服务器

vim /etc/my.cnf
server-id = 2
//修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin
//添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index
//添加,定义中继日志文件的位置和名称

systemctl restart mysqld

mysql -u root -p
//配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致,
change master to master_host='192.168.38.138' , master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;

start slave;					#启动同步,如有报错执行 reset slave;
show slave status\G				#查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes			#负责与主机的io通信
Slave_SQL_Running: Yes			#负责自己的slave mysql进程

在这里插入图片描述
在这里插入图片描述

(7)验证主从复制效果

在主服务器上登录MySQL数据库,创建并查看数据库;

mysql> create database work;
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述

在从服务器上查看

show databases;

在这里插入图片描述

总结

主从复制:
主从复制核心部分就是两个日志三个线程(高版本的mvsal以及异步复制、半同步复制、全同步复制三种模式)
二个日志:二进制日志和中继日志
三个线程:master的dump和slave的I/O、SQL
主要原理:master将数据保存在二进制日志中,I/O向dump发出同步请求,dump把数据发送给I/O线程,I/O写入本地的中继日志
SOL线程读取本地中继日志数据,同步到自己数据库中,完成同步
、半同步复制、全同步复制三种模式)
二个日志:二进制日志和中继日志
三个线程:master的dump和slave的I/O、SQL
主要原理:master将数据保存在二进制日志中,I/0向dump发出同步请求,dump把数据发送给I/0线程,I/O写入本地的中继日志
SOL线程读取本地中继日志数据,同步到自己数据库中,完成同步

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值