简述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)
相关推荐
m0_7482489433 分钟前
在线影视播放网站PHP电影网站源码自动采集MKCMS升级版米酷模板含WAP手机版附三套模板
android·开发语言·php
Mekeater3 小时前
手写一个C++ Android Binder服务及源码分析
android·c++·binder·remote·iservicemanager·bpbinder·bprefbase
Mr.L-OAM5 小时前
SQL自学,mysql从入门到精通 --- 第 15天,数据导入、导出
android·sql·mysql
m0_748238785 小时前
sql中的regexp与like区别
数据库·sql·mysql
m0_748245345 小时前
一条sql 在MySQL中是如何执行的
数据库·sql·mysql
Mr.L-OAM5 小时前
SQL自学,mysql从入门到精通 --- 第 14天,主键、外键的使用
数据库·sql·mysql
xvch6 小时前
Kotlin 2.1.0 入门教程(十一)for、while、return、break、continue
android·kotlin
xvch6 小时前
Kotlin 2.1.0 入门教程(十二)异常
android·kotlin
zhangphil6 小时前
Android GlideApp decode file resource shared by different processes,Kotlin
android·kotlin
m0_7482393310 小时前
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
数据库·mysql·数据库开发