[GN] 如何使用MySQL进行主从复制及其原理


一.前言–为什么使用主从复制

我们来思考后端MYSQL数据库只有一台时候,会有那些问题?

1、单点故障服务不可用
2、无法处理大量的并发数据请求
3、数据丢失

所以通过主从复制后,它的优点就很明显

1、如果主节点出现故障,那么我们就直接将服务切到从节点,来保证服务立马可用。

2、如果并发请求特别大的时候,我们可用进行读写分离操作,让主库负责写,从库负责读。

3、如果主库数据丢失,但从库还保存一份,减少数据丢失的风险。


二、MySQL主从复制介绍

2.1 主从复制介绍

(1)MySQL数据库默认是支持主从复制的,不需要借助于其他的技术,我们只需要在数据库中简单的配置即可。

(2)MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的 二进制日志 功能。就是一台或多台MySQL数据库 从另一台MySQL数据库进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。

(3)二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认MySQL是未开启该日志的。

(4)简单来说就是一台服务器中的mysql数据库根据另一台服务器中的mysql数据库的日志文件进行分析然后执行sql语句进行数据复制。

2.2 主从复制原理

在这里插入图片描述
上面图片主要分成了三步

  • Master的更新事件(update、insert、delete)会按照顺序写入bin-log中。当Slave连接到Master的后,Master机器会为Slave开启binlog dump线程,该线程会去读取bin-log日志

  • Slave连接到Master后,Slave库有一个I/O线程 通过请求binlog dump thread读取bin-log日志,然后写入从库的relay log日志中。

  • Slave还有一个 SQL线程,实时监控 relay-log日志内容是否有更新,解析文件中的SQL语句,在Slave数据库中去执行。

总结

  • 把事件记录到bin-log日志,那么对于Master就必须开启bin-log功能

  • 整个Mysql主从复制一共开启了3个线程。Master开启 IO线程,Slave开启 IO线程 和 SQL线程。

  • 这点也很重要那就是Master和Slave交互的时候,记住这里是Slave去请求Master。

    • Slave通过IO线程连接Master后发起请求,Master服务器收到Slave IO线程发来的日志请求信息,io线程去将master的bin-log内容返回给slave IO线程。

三.MySQL主从复制实际操作

3.1提前准备两台虚拟机,并且在服务器中安装MySQL;

服务器的信息如下:

数据库ip地址数据库版本
Master192.168.44.1285.7.40
Slave192.168.44.1295.7.40

3.2 防火墙开放3306端口号

防火墙开放端口号

3.3 主库配置 --192.168.44.129

  • 修改Mysql数据库的配置文件/etc/my.cnf
log-bin=mysql-bin   #[必须]启用二进制日志
server-id=1       #[必须]服务器唯一ID(唯一即可)
  • 重启mysql
sudo service mysql restart
  • 创建数据同步的用户并授权

创建一个用户 xiaoming ,密码为 Root@123456 ,并且给xiaoming用户授予REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。

GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
  • 查看master同步状态
show master status;

在这里插入图片描述

3.4 从库配置 --192.168.44.128

  • 修改Mysql数据库的配置文件/etc/my.cnf
server-id=201 	#[必须]服务器唯一ID
  • 重启mysql
sudo service mysql restart
  • 登录Mysql数据库,设置主库地址及同步位置
change master to master_host='192.168.44.129',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000009',master_log_pos=154;
start slave;

-查看数据库状态

show slave status;

在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GGood_Name

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值