mysql的主从复制和读写分离

主从复制 面试必问 主从复制的原理。

读写分离,MHA

主从复制。

主从复制的模式:

1、mysql的默认模式:

异步模式 主库在更新完事务之后会立即把结果返回给从服务器,并不关心从库是否接收到,以及从库是否处理成功。

网络问题可能没有同步,或者是其他因素的影响导致同步失败。

快 效率高

2、全同步模式:

主库在更新完事务之后,立即把结果返回从库,所有的从库执行完毕之后才能继续下一个同步。安全,性能收到影响。

3、半同步复制

介乎于异步和全同步之间,主库更新完事务之后,也是同步到从库。同步完成之后有一个等待时间,等待时间是一个tcp/ip的往返时间

5毫秒左右

即在一定程度上保证了效率,也在一定程度上保证了数据的完整性

主从复制的延迟怎么解决:

1、网络问题,防火墙的原因

2、硬件设备问题,cpu,内存和磁盘出了问题

3、配置文件写错了

配置文件当中进行设置的方式提高数据的安全性

数据库的存储引擎要是innodb

双一设置:

innodb_flush_log_at_trx_commit=1

每次提交都会刷新事务日志,确保事务的持久性。但是会影响性能。

sync_binlog=1

每次提交事务,将二进制日志的内容保存到磁盘,确保日志的持久性。提高了安全性。

性能化设置:

sync_binlog=N

最多提交几次事务会进行磁盘刷新。日志内容保存到磁盘

innodb_flush_log_at_trx_commit=2

每次更新都保存在内存中,不进行刷新

innodb_buffer_pool_size=60m

控制innodb缓冲池的大小,增大可以提高数据的性能,但是占用的是系统内存,配置的时候要注意合理化时间。

主从复制如何实现:

实现是基于mysql的二进制日志,根据主库的二进制文件的标志位,实现主和从的同步。

主从服务器之间,服务器的时间要同步。

架构:

三台服务器

192.168.233.10 mysql8.0

192.168.233.71 mysql8.0

192.168.233.72 mysql8.0

实验:如何实现主从复制

#关闭3台服务器的防火墙
yum -y install ntp
#下载一个时间同步工具
date
#查询主从服务器时间是否相同
#设置主服务器配置test1(192.168.233.10)
vim /etc/my.cnf
log-bin=master-bin
#主服务器开启二进制日志
binlog_format=MIXED
#处理方式开启混合模式,如果并发量变高会自动切换成row
log-slave-updates=ture
#允许从服务器复制数据时,可以从主的二进制日志写到自己的二进制日志当中
systemctl restart mysqld
grant replication slave on *.* to 'myslave'@'192.168.233.%' identified by '123456';
#给从库授权可以访问主库。创建一个用户名称叫myslave来自192.168.233.%这个网段,密码是123456.给从库授权可以访问主库
flush privileges;
#刷新一下权限
show master status;
#查看主test1的位置点

#从服务器mysql1(192.168.233.71)配置

vim /etc/my.conf
server-id = 2
#id千万不能相同
relay-log=relay-log-bin
#修改日志的名称
relay-log-index=slave-relay-bin.index
#告诉你中继日志的索引名称叫这个
relay_log_recovery=1
#默认是0,1表示开启中继日志的恢复。如果从服务器出现异常或者崩溃时,从服务器会从主服务器的二进制日志正确读取和应用中继日志。起同步作用,会自动从主服务器获取,完成同步
systemctl restart mysqld
#重启从MySQL服务

#从服务器mysql2(192.168.233.72)配置
vim /etc/my.conf
server-id = 3
#id千万不能相同
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery=1
 
systemctl restart mysqld
#重启从MySQL服务
 
现在两台从MySQL都修改完成
mysql -u root -p123456
mysql -u root -p123456
#两台从MySQL都进入MySQL
两个从服务器都要:
CHANGE master to CHANGE master to master_host='20.0.0.50',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=自己的号码;
#bin号和log_pos的号码在主服务器进入mysql使用show master status查看

start slave;
 
show slave status\G
#纵向查看

Slave_IO_Running

从库和主机的读写通信是否正常

Slave_SQL_Running

slave mysql进程状态是否正常

log-slave-updates=true

允许从服务器从主库复制数据时可以写入从库自己的二进制日志当中

relay-log=relay-log-bin

从服务器上获取二进制日志开头,开启库的二进制日志

relay-log-index=slave-relay-bin.index

relay_log_recovery=1

配置从服务器在启动时是否执行二进制日志的回复操作(和主库同步),1表示开始。

读写分离:

主从架构当中,主库只负责写,从库只负责读

读写分离的方式

1、代码开发人员纯靠代码完成,涉及到数据库的二次开发,性能好

,不需要额外的硬件设备

2、中间层代理 代理服务器。在客户端和主从架构之间有一个代理服务器

。代理服务器收到客户端的请求之后通过客户端的sql语句来进行判断,读转到从,写转到主。

Amoeba:读写分离最常见的客户端代理软件。java代码开发的一个软件。

192.168.233.10 mysql8.0 主

192.168.233.71 mysql8.0 从

192.168.233.72 mysql8.0 从

192.168.233.20 jdk1.6 Amoeba 代理服务器

192.168.233.30 mysql maribb 客户端

读写分离架构图和数据流向

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值