在实际生产环境中,面对巨大的并发量和数据读写压力,我们往往需要多台数据库服务器来提共服务,并且将读和写的的压力分担到不同的服务器上,以满足在安全性与高可用性上的需求。
MySQL 的主从复制和 MySQL 的读写分离两者有着紧密联系,首先要部署主从复制,
只有主从复制完成了,才能在此基础上进行数据的读写分离。
核心:两个日志,三个线程
两个日志:二进制日志、中继日志
三个线程:I/O、dump、sql
主要原理:Master将数据保存在二进制日志中,I/O向dump发出同步请求,dump把数据发送给I/O线程,I/O写入本地的中继日志数据,同步到自己数据库中,完成同步。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NuGOC8Pe-1664076164651)(F:\typorase\jpg\493.png)]](https://1000bd.com/contentImg/2024/09/13/d4e62b8011711e80.png)
主服务器:192.168.116.137
从服务器1:192.168.116.138
从服务器2:192.168.116.139
#关闭防火墙
systemctl stop firewalld
setenforce 0
ntpdate ntp1.aliyun.com
vim /etc/my.cnf
log-bin=master-bin #开启二进制日志
binlog_format=MIXED #二进制日志格式
log-slave-updates=true #开启从服务器同步
systemctl restart mysqld.service
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wEoZ63Ut-1664076164652)(F:\typorase\jpg\499.png)]](https://1000bd.com/contentImg/2024/09/13/03bd618f7c012434.png)
给从服务器授权
grant replication slave on *.* to 'myslave'@'192.168.116.%' identified by '123456';
#刷新
flush privileges;
#查看主服务器二进制文件
show master status;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MqrA2Fdy-1664076164652)(F:\typorase\jpg\500.png)]](https://1000bd.com/contentImg/2024/09/13/0e5414bef81f1cfd.png)
vim /etc/my.cnf
server-id = 2 ##slave1和slave2的id不能相同
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
systemctl restart mysqld.service
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Hq1KrLw-1664076164652)(F:\typorase\jpg\501.png)]](https://1000bd.com/contentImg/2024/09/13/70b1e64971adfa5f.png)
change master to master_host='192.168.116.137',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;
flush privileges; #刷新
start slave; #开启
show slave status\G #查看
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHSzrjZC-1664076164652)(F:\typorase\jpg\502.png)]](https://1000bd.com/contentImg/2024/09/13/c4023801eb405e6d.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8iQeOsfh-1664076164653)(F:\typorase\jpg\503.png)]](https://1000bd.com/contentImg/2024/09/13/127f2ab9fa4ff196.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WovXye7g-1664076164653)(F:\typorase\jpg\504.png)]](https://1000bd.com/contentImg/2024/09/13/49bea9f85d9bf594.png)
vim /etc/my.cnf
server-id = 3 ##同一集群的slave ID不能相同
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
systemctl restart mysqld.service
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzWb6i8Y-1664076164653)(F:\typorase\jpg\505.png)]](https://1000bd.com/contentImg/2024/09/13/c29191f49b1a965c.png)
change master to master_host='192.168.116.137',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;
flush privileges; #刷新
start slave; #开启
show slave status\G #查看
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KrRgXQg5-1664076164654)(F:\typorase\jpg\506.png)]](https://1000bd.com/contentImg/2024/09/13/f4a4599ce85d1b29.png)
在主服务器中写入一些数据
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RcpUyP3-1664076164654)(F:\typorase\jpg\507.png)]](https://1000bd.com/contentImg/2024/09/13/4eb004503b34f638.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWYrHk4h-1664076164654)(F:\typorase\jpg\508.png)]](https://1000bd.com/contentImg/2024/09/13/84c4ccf980f0f082.png)
在第一个从服务器上查看,数据已经同步过来
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2sThRCwf-1664076164654)(F:\typorase\jpg\509.png)]](https://1000bd.com/contentImg/2024/09/13/93a457cbad23463f.png)
在第二个从服务器上查看,数据已经同步过来
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FK74ABQV-1664076164654)(F:\typorase\jpg\510.png)]](https://1000bd.com/contentImg/2024/09/13/adab27c1247e2429.png)