文章目录
- 一.前言--为什么使用主从复制
- 二、MySQL主从复制介绍
- 2.1 主从复制介绍
- 2.2 主从复制原理
- 总结
- 三.MySQL主从复制实际操作
- 3.1提前准备两台虚拟机,并且在服务器中安装MySQL;
- 3.2 防火墙开放3306端口号
- 3.3 主库配置 --192.168.44.129
- 3.4 从库配置 --192.168.44.128
一.前言–为什么使用主从复制
我们来思考后端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地址 | 数据库版本 |
Master | 192.168.44.128 | 5.7.40 |
Slave | 192.168.44.129 | 5.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;