简述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)
相关推荐
shaoweijava37 分钟前
基于SpringBoot的求职招聘网站系统(源码+数据库)
java·spring boot·mysql·spring
QING6181 小时前
Kotlin containsValue用法及代码示例
android·kotlin·源码阅读
QING6181 小时前
Kotlin coerceAtMost用法及代码示例
android·kotlin·源码阅读
QING6181 小时前
Kotlin commonSuffixWith用法及代码示例
android·kotlin·源码阅读
QING6181 小时前
Kotlin coerceAtLeast用法及代码示例
android·kotlin·源码阅读
光军oi2 小时前
Mysql从入门到精通day5————子查询精讲
android·数据库·mysql
IT成长日记8 小时前
【MySQL基础】聚合函数从基础使用到高级分组过滤
数据库·mysql·聚合函数
不再幻想,脚踏实地11 小时前
MySQL(一)
java·数据库·mysql
鸿蒙布道师11 小时前
鸿蒙NEXT开发Base64工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
jiet_h12 小时前
Android adb 的功能和用法
android·adb