MySQL主从复制、读写分离


引言:在实际生产应用中,成熟的业务通常数据都比较大,单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求。所以需要配置多台数据库服务器,那么在配置多台数据库服务器时,如何确保各服务器的数据同步呢?

一.MySQL主从与读写分离原理

1.1MySQL主从复制原理

在这里插入图片描述

  • 在每个事务更新数据完成之前,Master 在二进制日志(Binary loq)记录这些改变。写入二进制日志完成后,Master通知存储引擎提交事务。
  • slave 将Master的复制到其中继日志(Relay log)。首先salave开始一个工作线程(I/0) ,I/0线程在Master上打开一个普通的连接,然后开始Binlog dump process. Binlog. dump process 从Master的二进制日志中读取事件,如果已经跟上Master,它会睡眠并等待Master产生新的事件,I/0线程将这些事件写入中继日志。
  • SQL slave. thread ( SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与Master 中的数据一致,只要该线程与I/O 线程保持一致,中继日志通常会位于OS缓存中,所以中继日志的开销很小。复制过程有一个很重要的限制,即复制在slave上是串行化的, 也就是说Master上的并行更新操作不能在Slave上并行操作。

1.2主从复制类型

  • 基于语句的复制(STATEMENT, MySQL默认 类型)
  • 基于行的复制(ROW)
  • 混合类型的复制(MIXED)

1.3MySQL主从复制方式

  • 异步复制
    默认同步方式是异步复制。主库将更新写入Binlog日志文件后,不需要等待数据更新是否已经复制到从库中,就可以继续处理更多的请求。Master将事件写入binlog,但并不知道Slave是否或何时已经接收且已处理。在异步复制的机制的情况下,如果Master宕机,事务在Master上已提交,但很可能这些事务没有传到任何的Slave上。假设有Master->Salve故障转移的机制,此时Slave也可能会丢失事务。MySQL复制默认是异步复制,异步复制提供了最佳性能。
  • 同步复制
    主库将更新写入Binlog日志文件后,需要等待数据更新已经复制到从库中,并且已经在从库执行成功,然后才能返回继续处理其它的请求。同步复制提供了最佳安全性,保证数据安全,数据不会丢失,但对性能有一定的影响。
  • 半同步复制
    主库提交更新写入二进制日志文件后,等待数据更新写入了从服务器中继日志中,然后才能再继续处理其它请求。该功能确保至少有1个从库接收完主库传递过来的binlog内容已经写入到自己的relay log里面了,才会通知主库上面的等待线程,该操作完毕。
    半同步复制,是最佳安全性与最佳性能之间的一个折中。
    MySQL 5.5版本之后引入了半同步复制功能,主从服务器必须安装半同步复制插件,才能开启该复制功能。如果等待超时,超过rpl_semi_sync_master_timeout参数设置时间(默认值为10000,表示10秒),则关闭半同步复制,并自动转换为异步复制模式。当master dump线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout内,收到了从库的响应,则主从又重新恢复为增强半同步复制。
    ACK (Acknowledge character)即是确认字符。

二.主从复制服务搭建

在这里插入图片描述

2.1主从服务器时间同步

  • 主服务器时间同步设置
#关闭防火墙
systemctl stop firewalld
setenforce 0
#安装时间同步软件
yum install ntp -y
#编辑配置文件
vim /etc/ntp.conf
#在最后添加如下配置
server 127.127.48.0 
#设置本地是时钟源    
fudge 127.127.48.0 stratum 8
#网段固定格式127.127.+自己的网段号,stratum时间层级为8(限制在15内)
#启动服务
systemctl start ntpd

更改ntp配置文件
在这里插入图片描述
在这里插入图片描述

  • 从服务器时间同步设置
#关闭防火墙
systemctl stop firewalld
setenforce 0
#安装时间同步软件
yum install ntpdate -y
#进行时间同步
/usr/sbin/ntpdate 192.168.48.11
#添加周期性计划,定期同步时间
crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.48.11

设置主服务器时间
在这里插入图片描述

同步从服务器时间,看是否同步
在这里插入图片描述

2.2主服务器配置

vim /etc/my.cnf
#添加如下配置
server-id = 1
log-bin=master-bin     #添加主服务器
binglog_format = MIXED #开启二进日志
log-slave-updates=true #允许slave从master复制数据时可以写入到自己的二进制日志
#重启服务
systemctl restart mysqld
server-id = 1
log-bin=master-bin
binglog_format = MIXED
log-slave-updates=true

在/etc/my.cnf文件中的mysqld模块中添加如下内容
在这里插入图片描述
重启服务
systemctl restart mysqld

进入MySQL对从服务器进行授权

GRANT REPLICATION SLAVE ON *.* TO 'myslave1'@'192.168.48.%' IDENTIFIED BY '123456'; 

在这里插入图片描述

2.3从服务器配置

编辑配置文件

vim /etc/my.cnf
#添加配置如下
server-id = 2   #id号与主不能一样
relay-log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值