当前位置: 首页 > news >正文

简述mysql 主从复制原理及其工作过程,配置一主两从并验证

MySQL 主从复制工作过程

1、主库记录二进制日志

当主库上执行更新操作(如 INSERT、UPDATE、DELETE 等)时,主库会将这些操作记录到二进制日志(Binary Log)中。

2、从库创建 I/O 线程

从库会创建一个 I/O 线程,该线程连接到主库,并请求主库发送二进制日志。

3、主库创建 Binlog Dump 线程

主库接收到从库的请求后,会创建一个 Binlog Dump 线程,将二进制日志中的内容发送给从库。

4、从库接收并存储中继日志

从库的 I/O 线程接收到主库发送的二进制日志内容后,将其存储到本地的中继日志(Relay Log)中。

5、从库创建 SQL 线程

从库会创建一个 SQL 线程,该线程读取中继日志中的内容,并将其中的 SQL 语句在从库上执行,从而实现数据的同步。

首先准备三台虚拟机

  • 主:192.168.1.11(mater)
  • 从:192.168.1.13(slave1)
  • 从:192.168.1.14(slave2)

建议版本环境干净且相同(成功率高)

一、192.168.1.11(mater)

编辑配置文件

[root@master ~]# vim /etc/my.cnf
server_id=11

也可以写在子配置文件mysqld

[root@master ~]# vim /etc/my.cnf.d/mysql-server.cnf

重新启动MySQL

[root@master ~]# systemctl restart mysqld.service

或者第一次启动:
[root@master ~]# systemctl enable --now mysqld

授权用户:

mysql> create user rep@'192.168.1.%' identified with mysql_native_password by '123456';
mysql> grant replication slave on *.* to rep@'192.168.1.%';


mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      678 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

二、192.168.1.13(slave1)

同理先编辑配置文件和重新启动MySQL

[root@slave1 ~]# vim /etc/my.cnf
server_id=13

[root@slave1 ~]# systemctl restart mysqld.service

或者第一次启动:
[root@slave1 ~]# systemctl enable --now mysqld

与Master(192.168.1.11主机)建立连接

CHANGE MASTER TO
    MASTER_HOST = '192.168.1.11',
    MASTER_USER = 'rep',
    MASTER_PASSWORD = '123456',
    MASTER_LOG_FILE = 'binlog.000001',
    MASTER_LOG_POS = 678;
mysql> start slave;

mysql> show slave status \G  #查看是否成功

出现双yes才算成功

三、192.168.1.14(slave2)

同理先编辑配置文件和重新启动MySQL

[root@slave2 ~]# vim /etc/my.cnf
server_id=14

[root@slave2 ~]# systemctl restart mysqld.service

或者第一次启动:
[root@slave2 ~]# systemctl enable --now mysqld

与Master(192.168.1.11主机)建立连接

CHANGE MASTER TO
    MASTER_HOST = '192.168.1.11',
    MASTER_USER = 'rep',
    MASTER_PASSWORD = '123456',
    MASTER_LOG_FILE = 'binlog.000001',
    MASTER_LOG_POS = 678;
mysql> start slave;

mysql> show slave status \G  #查看是否成功

如果有报错,部分解决方法可以看我前面的博客MySQL主从同步

测试:

可以在主库创建数据库,从库会立即出现

mysql> create database db1;   #主库创建


mysql> show databases;        #主从库皆可查看到db1
+--------------------+
| Database           |
+--------------------+
| db1                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

相关文章:

  • 学习threejs,使用HemisphereLight半球光
  • 【DuodooBMS】给PDF附件加“受控”水印的完整Python实现
  • Java内存模型,内存屏障是干嘛的?
  • 2024年认证杯SPSSPRO杯数学建模A题(第二阶段)保暖纤维的保暖能力全过程文档及程序
  • 在nodejs中使用RabbitMQ(三)Routing、Topics、Headers
  • RocketMQ、RabbitMQ、Kafka 的底层实现、功能异同、应用场景及技术选型分析
  • Ubuntu 如何安装Snipaste截图软件
  • vue渲染函数用法示例
  • 【docker知识】快速找出服务器中占用内存较高的容器
  • 机试题——移动01字符串
  • Ubuntu20.04上搭建nginx正向代理提供上网服务
  • 【Elasticsearch】keyword分析器
  • 用vue3写一个好看的wiki前端页面
  • 如何在24GB的GPU上运行DeepSeek-R1-Distill-Qwen-32B
  • Django REST Framework:如何获取序列化后的ID
  • Unity中自定义协程的简单实现
  • linux 查看设备中的摄像头迅速验证设备号
  • 畅聊deepseek-r1,SiliconFlow 硅基流动注册+使用
  • 一文讲清前端热更新
  • npm 私服使用介绍
  • 深圳市政协原副主席王幼鹏被“双开”
  • 王受文已任全国工商联党组成员
  • 晶圆销量上升,中芯国际一季度营收增长近三成,净利增超1.6倍
  • 陕西澄城打造“中国樱桃第一县”:从黄土高原走向海外,年产值超30亿
  • 普京:“胜利日停火”已开始生效
  • 巴国家安全委员会授权军方自主决定对印反击措施