目录
[1、 log dump 线程](#1、 log dump 线程)
[2、从节点 I/O线程](#2、从节点 I/O线程)
[3、从节点 SQL线程](#3、从节点 SQL线程)
前言:
MYSQL主从原理:从3.23版本开始提供主从复制功能,复制是将主库的DDL和DML操作通过二进制日志传递到复制服务器(从库)上,然后从库对这些日志重新执行(重做),从而使得主库和从库保持数据一致。
MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点,如下图所示:

1、 log dump 线程
当从节点连接主节点时,主节点会为其创建一个log dump 线程,用于发送和读取bin-log的内容。在读取bin-log中的操作时,log dump线程会对主节点上的bin-log加锁,当读取完成,再发送给从节点之前,锁会被释放。主节点会为自己的每一个从节点创建一个log dump 线程。
2、从节点 I/O线程
当从节点上执行`start slave`命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点的blog dump进程发来的更新之后,保存在本地relay-log(中继日志)中。
3、从节点 SQL线程
SQL线程负责读取relay-log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。
一、资源准备
1、服务器
采取一主一从模式,两台服务器,具体说明如下:
|--------------|-----------------|----------------|------------------------------------|
| HOSTNAME | IP | OS版本 | MYSQL版本 |
| mysql-master | 192.168.100.123 | Rocky Linux9.5 | 8.4.4 MySQL Community Server - GPL |
| mysql-slave | 192.168.100.124 | Rocky Linux9.5 | 8.4.4 MySQL Community Server - GPL |
2、安装及配置
(1)、linux安装
参见:Rocky Linux 9.5操作系统安装-CSDN博客
(2)、MYSQL数据库安装
参见:基于Rockylinux9.5(LTS-SP4)安装MySQL Community Server 9.2.0-CSDN博客
(3)、关闭OS防火墙及selinux
二、数据库配置
1、主库MASTER配置
(1)、编辑my.cnf文件,加入以下配置内容
bash
vim /etc/my.cnf
server-id=123 //唯一标识ID,区别与从库
log-bin=mysql-bin
binlog_format=ROW //二进制日志格式,设置为ROW,当设置为MIXED的时候,从WORKBENCH插入的数据未同步
sync_binlog=1
read-only=0
innodb_flush_log_at_trx_commit = 1
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_expire_logs_seconds=1296000 //此值为秒,表示保留日志有效期15天:15*24*60*60
binlog-do-db=dlkdb //需要同步的数据库
(2)、创建远程连接的账号并授权
登录数据库
mysql -u root -p
create user 'backup'@'%' identified by 'passwd';
其中%表示可以在任何一台服务器上连接,如果需要指定IP地址,可以将%改为指定的IP地址
(3)、重新加载权限
flush privileges;
(4)、重启数据库
systemctl restart mysqld
(5)、查看二进制日志状态
SHOW BINARY LOG STATUS,其中File和Position的值需要记录,配置从库SLAVE的时候会用到。
bash
+------------------+----------+--------------+------------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000015 | 198 | dlkdb | | 24e40de7-0860-11f0-95df-000c29dbd455:1-31 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.01 sec)
2、从库SLAVE配置
(1)、编辑my.cnf文件,加入以下配置内容,详细参数说明参见主库
bash
server-id=124 //唯一标识
replicate-do-db=dlkdb //需要同步的数据库名
read_only=1
sync_binlog = 1
gtid_mode = ON
enforce_gtid_consistency = ON
innodb_flush_log_at_trx_commit = 1
binlog_format=ROW
binlog_expire_logs_seconds=1296000
(2)、重启数据库 systemctl restart mysqld
(3)、开始数据同步
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.100.123', //主库服务器IP
SOURCE_USER='backup', //远程账号
SOURCE_PASSWORD='passwd', //密码
SOURCE_PORT=3306, //端口
SOURCE_LOG_FILE='bin-log.000015', //主库二进制文件名
SOURCE_LOG_POS=198; //主库二进制文件位置
(4)、开始同步复制
START REPLICA;
(5)、检查同步状态是否成功:SHOW REPLICA STATUS\G
要求其中这两个参数的值为Yes,Slave_IO_Running: Yes、Slave_SQL_Running: Yes;如果存在其它错误,该状态会显示出来。
bash
mysql> SHOW REPLICA STATUS\G;
*************************** 1. row ***************************
Replica_IO_State: Waiting for source to send event
Source_Host: 192.168.100.123
Source_User: zpback
Source_Port: 3306
Connect_Retry: 60
Source_Log_File: mysql-bin.000015
Read_Source_Log_Pos: 499
Relay_Log_File: mysql-slave-relay-bin.000014
Relay_Log_Pos: 669
Relay_Source_Log_File: mysql-bin.000015
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
Replicate_Do_DB: dlkdb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Source_Log_Pos: 499
Relay_Log_Space: 1364
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Source_SSL_Allowed: Yes
Source_SSL_CA_File:
Source_SSL_CA_Path:
Source_SSL_Cert:
Source_SSL_Cipher:
Source_SSL_Key:
Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Source_Server_Id: 123
Source_UUID: 24e40de7-0860-11f0-95df-000c29dbd455
Source_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
Source_Retry_Count: 10
Source_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Source_SSL_Crl:
Source_SSL_Crlpath:
Retrieved_Gtid_Set: 24e40de7-0860-11f0-95df-000c29dbd455:17-32
Executed_Gtid_Set: 24e40de7-0860-11f0-95df-000c29dbd455:5-32,
3a573e05-0876-11f0-9ef1-000c2983ccb9:1
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Source_TLS_Version:
Source_public_key_path:
Get_Source_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
三、测试
1、创建表
(1)、主库MASTER创建表

(2)、从库slave中可以查看到新创建的表

2、数据库插入测试
(1)、主库MASTER中插入数据

(2)、从库slave中可查看到此条数据

通过以上步骤完成MYSQL主从配置