如何部署MySQL主从复制

目录

一、主从复制原理

MySQL的复制类型

MySQL主从复制的工作过程;

两日志、三线程

MySQL主从复制延迟

二、MySQL 有几种同步方式: 三种

异步复制(Async Replication)

同步复制(Sync Replication)

半同步复制(Semi-Sync Replication)

增强半同步复制(lossless Semi-Sync Replication、无损复制)

三、Mysql应用场景

四、主从复制实验

第一步 安装时间同步环境

第二步 修改NTP配置文件

第三步 启动服务

第四步 关闭所有设备的防火墙和安全机制

第五步 同步阿里云时间

第六步 安装从数据库的环境

第七步 同步所有设备时间

第八步 修改数据库配置文件

第九步 重启服务

第十步 进入主数据库设置规则

第十一步 刷新权限表

第十二步 查看主数据库状态

第十三步 修改从数据库配置文件

第十四步 重启服务

第十五步 配置相关内容信息并启动

第十六步 查看从数据库的信息是否正确

第十七步 测试实验结果

第十八步 查看从数据库是否同步


一、主从复制原理

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服务器高并发,形成大量事务

网络延迟

主从硬件设备导致 cpu主频、内存io、硬盘io

本来就不是同步复制、而是异步复制 从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。 从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。 从库使用SSD磁盘 网络优化,避免跨机房实现同步

问题解决方法

半同步复制- 解决数据丢失的问题

并行复制---解决从库复制延迟的问题

二、MySQL 有几种同步方式: 三种

① 异步复制(Async Replication)

② 同步复制(sync Replication)

③ 半同步复制(Async Replication)

④ 增强半同步复制(lossless Semi-Sync Replication)、无损复制

异步复制(Async Replication)

主库将更新写入Binlog日志文件后,不需要等待数据更新是否已经复制到从库中,就可以继续处理更多的请求。Master将事件写入binlog,但并不知道Slave是否或何时已经接收且已处理。在异步复制的机制的情况下,如果Master宕机,事务在Master上已提交,但很可能这些事务没有传到任何的Slave上。假设有Master->Salve故障转移的机制,此时Slave也可能会丢失事务。MySQL复制默认是异步复制,异步复制提供了最佳性能。

同步复制(Sync Replication)

主库将更新写入Binlog日志文件后,需要等待数据更新已经复制到从库中,并且已经在从库执行成功,然后才能返回继续处理其它的请求。同步复制提供了最佳安全性,保证数据安全,数据不会丢失,但对性能有一定的影响。

半同步复制(Semi-Sync Replication)

主库提交更新写入二进制日志文件后,等待数据更新写入了从服务器中继日志中,然后才能再继续处理其它请求。该功能确保至少有1个从库接收完主库传递过来的binlog内容已经写入到自己的relay log里面了,才会通知主库上面的等待线程,该操作完毕。 半同步复制,是最佳安全性与最佳性能之间的一个折中。 MySQL 5.5版本之后引入了半同步复制功能,主从服务器必须安装半同步复制插件,才能开启该复制功能。如果等待超时,超过rpl_semi_sync_master_timeout参数设置时间(默认值为10000,表示10秒),则关闭半同步复制,并自动转换为异步复制模式。当master dump线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout内,收到了从库的响应,则主从又重新恢复为增强半同步复制。 ACK (Acknowledge character)即是确认字符。

增强半同步复制(lossless Semi-Sync Replication、无损复制)

增强半同步是在MySQL 5.7引入,其实半同步可以看成是一个过渡功能,因为默认的配置就是增强半同步,所以,大家一般说的半同步复制其实就是增强的半同步复制,也就是无损复制。 增强半同步和半同步不同的是,等待ACK时间不同rpl_semi_sync_master_wait_point = AFTER_SYNC(默认) 半同步的问题是因为等待ACK的点是Commit之后,此时Master已经完成数据变更,用户已经可以看到最新数据,当Binlog还未同步到Slave时,发生主从切换,那么此时从库是没有这个最新数据的,用户看到的是老数据。 增强半同步将等待ACK的点放在提交Commit之前,此时数据还未被提交,外界看不到数据变更,此时如果发送主从切换,新库依然还是老数据,不存在数据不一致的问题。

三、Mysql应用场景

mysql 数据库 主要的性能是读和写,一般场景来说读请求更多。 根据主从复制可以演变成读写分离,因为读写分离基于主从复制,使用读写分离从而解决高并发的问题。

mysql架构演变的方向: 1、单台mysql有单点故障 2、集群---》 主从复制 3、主从复制渡河写的压力不均衡 4、读写分离 5、读写分离的基础是主从复制 6、mysql的高可用架构MHA(master HA高可用)

四、主从复制实验

第一步 安装时间同步环境

命令:yum -y install ntp

第二步 修改NTP配置文件

命令:vim /etc/ntp.cnf

第三步 启动服务

命令:systemctl start ntpd

第四步 关闭所有设备的防火墙和安全机制

命令:systemctl stop firewalld

setenforce 0

第五步 同步阿里云时间

命令:ntpdate ntp.aliyun.com

第六步 安装从数据库的环境

命令:yum -y install ntp ntpdate

第七步 同步所有设备时间

命令:ntpdate ntp.aliyun.com

第八步 修改数据库配置文件

命令:vim /etc/my.cnf

第九步 重启服务

命令:systemctl restart mysqld

第十步 进入主数据库设置规则

命令:grant replication slave on *.* to 'myslave'@'网段' identified by '密码';

第十一步 刷新权限表

命令:flush privileges;

第十二步 查看主数据库状态

命令:show master status;

第十三步 修改从数据库配置文件

命令:vim /etc/my.cnf

第十四步 重启服务

命令:systemctl restart mysqld

第十五步 配置相关内容信息并启动

命令:change master to master_host='主数据库IP地址',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=日志号;

start slave

第十六步 查看从数据库的信息是否正确

命令:show slave status\G

第十七步 测试实验结果

命令:create database 数据库名;

 第十八步 查看从数据库是否同步

命令:show databases;

猜你喜欢

转载自blog.csdn.net/Liu_Fang_Hong/article/details/131886625