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

MySQL 主从复制原理及工作过程

原理

MySQL 主从复制通过二进制日志(binlog)实现数据同步。主库(Master)将数据变更记录到 binlog 中,从库(Slave)通过 I/O 线程拉取 binlog 并保存为本地中继日志(relay log),再由 SQL 线程重放中继日志中的操作,从而实现数据同步。

工作过程

主库记录日志:主库将数据变更写入 binlog。

从库连接主库:从库的 I/O 线程连接主库,请求 binlog。

传输日志:主库的 binlog dump 线程将 binlog 发送给从库。

从库应用中继日志:从库的 I/O 线程将收到的 binlog 写入 relay log,SQL 线程重放 relay log 中的操作。

1、基于binlog的主从同步
Master配置

bash 复制代码
[root@Master ~]# yum install -y mysql-server
 
#配置文件,注意://三台主从库的id必须不同
[root@Master ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=1     //直接在后面添加 
[root@Master ~]# systemctl restart 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;  //查看主服务器状态,日志用于从服务器同步,position是当前定位

Slave配置

bash 复制代码
#配置文件
[root@Slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=2
[root@Slave1 ~]# systemctl restart mysqld
 
[root@Slave3 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=3
[root@Slave3 ~]# systemctl restart mysqld
 
#设置复制参数,两个Slave一样的配置
mysql> change master to
    -> master_host='192.168.1.11',
    -> master_user='rep',
    -> master_password='123456',
    -> master_log_file='binlog.000001',
    -> master_log_pos=1640,
    -> get_master_public_key=1;
 
#启动复制进程,两个Slave都启动
mysql> start slave;

查看主从数据库的uuid是否一致

bash 复制代码
SHOW GLOBAL VARIABLES LIKE 'server_uuid';
##########如果一致
# 停止从库 MySQL 服务
sudo systemctl stop mysql
# 删除从库 auto.cnf 文件
sudo rm /var/lib/mysql/auto.cnf
# 启动从库 MySQL 服务
sudo systemctl start mysql
-- 登录从库 MySQL
-- 停止从库复制进程
STOP SLAVE;
-- 启动从库复制进程
START SLAVE;
-- 检查从库复制状态
SHOW SLAVE STATUS \G;

验证

bash 复制代码
#在主库创建一个数据库,看从库是否同步生成
mysql> create database feng;
Query OK, 1 row affected (0.01 sec)

2、 基于gtid的主从同步配置

开启gtid

bash 复制代码
##主从一样
[root@localhost ~]# vim /etc/my.cnf.d/mysql-server.cnf 
[root@localhost ~]# systemctl restart mysqld;
[root@localhost ~]# tail -3 /etc/my.cnf.d/mysql-server.cnf 
server_id=142
gtid_mode=ON
enforce-gtid-consistency=ON

Master配置

bash 复制代码
#修改配置文件
[root@Master ~]# vim /etc/my.cnf.d/mysql-server.cnf
#在最后添加
gtid_mode=ON
enforce-gtid-consistency=ON
 
#重启MySQL服务
[root@Master ~]# systemctl restart mysqld.service
 
#重置二进制日志和GTID
mysql> reset master;
 
#创建用户授予权限
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> flush privileges;
 

Slave配置

bash 复制代码
#Slave1和3相同配置
 
#修改配置文件
[root@Slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
gtid_mode=ON
enforce-gtid-consistency=ON
 
#重启服务
[root@Slave1 ~]# systemctl restart mysqld.service
 
#配置连接到主库
mysql> change replication source to
    -> source_host='192.168.1.11',
    -> source_port=3306,
    -> source_user='rep',
    -> source_password='123456',
    -> source_auto_position=1;
 
mysql> start replica;

验证

bash 复制代码
#主
mysql> create database fengfeng;
Query OK, 1 row affected (0.01 sec)
相关推荐
用户69371750013841 分钟前
当你向领导申请 AI 编程工具预算时,如果领导追问“能提效多少,有量化数据吗”,你该怎么回答?
android·后端·ios
计算机毕设定制辅导-无忧学长1 小时前
《基于微信小程序的个人智能刷题助手的设计与实现》
java·spring boot·mysql·微信小程序·uniapp·个人智能刷题助手系统
geovindu1 小时前
sql:Managing Complex Joins and Subqueries in SQL using mysql 9.0
大数据·数据库·数据仓库·sql·mysql·数据库开发·数据库架构
hunterandroid1 小时前
WorkManager 后台任务调度实战:从一次性任务到周期执行
android
事圆则缓1 小时前
Android 屏幕适配的前世今生
android
瑞克-桑切斯1 小时前
MySQL部署手册(5.7.20/8.0)
数据库·mysql
andyweike1 小时前
kotlin dsl library工程怎么配置
android·开发语言·kotlin
啵啵啵鱼1 小时前
九、JDBC 操作 MySQL 数据库
android·数据库·mysql
handonch1 小时前
MySQL → Kingbase PG模式 高频SQL替换清单
数据库·mysql·postgresql
用户69371750013842 小时前
当我说 Claude 搭配 GLM-5.3-Flash 太好用了,同事却提醒我:你可能正在失去对代码的掌控
android·后端·ios