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

发布于:2025-02-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

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)


网站公告

今日签到

点亮在社区的每一天
去签到