当前位置: 首页 > news >正文

centos8 mysql 主从复制

原理

在这里插入图片描述

一、一主一从

准备工作

在这里插入图片描述

1.主库配置

1、修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1-232-1,默认为
server-id=1
#是否只读,1 代表只读,0代表读写
read-only=0
#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

2.重启MySQL服务器

systemctl restart mysqld

3、登录mysql,创建远程连接的账号,并授予主从复制权限hostname服务器名Root@123 处事话密码 8位数 需要特殊字符和大小写

CREATE USER 'hostname'@'%' IDENTIFIED WITH mysql_native_password By 'Root@123';

4、为’hostname’@‘%’ 用户分配主从复制权限

GRANT REPLICATION SLAVE ON *.* TO 'hostname'@'%';

5、通过指令,查看二进制日志坐标

show master status

在这里插入图片描述

字段含义说明:
file:从哪个日志文件开始推送日志文件
position:从哪个位置开始推送日志
binlog ignore db:指定不需要同步的数据库

2.从库配置

1.修改配置文件 /etc/my.cnf
#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^32-1,和主库不一样即可
server-id-2
是否只读,1代表只读,0代表读写
read-only-1
2.重启服务器
systemctl restart mysqld
3.登录mysql 设置主库配置
# 8.0.23版本以下执行
CHANGE MASTER TOMASTER_HOST = '主库的IP地址',MASTER_USER = '用于复制的用户名',MASTER_PASSWORD = '该用户对应的密码',MASTER_LOG_FILE = '主库二进制日志文件名',MASTER_LOG_POS = 主库二进制日志位置;
# 8.0.23版本以上
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '主库的IP地址',SOURCE_USER = '用于复制的用户名',SOURCE_PASSWORD = '该用户对应的密码',SOURCE_LOG_FILE = '主库二进制日志文件名',SOURCE_LOG_POS = 主库二进制日志位置;

SOURCE_LOG_FILE ,SOURCE_LOG_POS 通过主库查询show master status主库配置5
在这里插入图片描述
4.开启同步

show replica status ;
#8.0.22之后
show slave status ;
#8.0.22之前

5.查看主从同步状态
在这里插入图片描述

3.遇到的问题

如果Replica_IO_Running是NO

1.检查防火墙配置

在这里插入图片描述

2.从机ping主机是否连通
ping 自己的主机域名
3.如果是通过虚拟机centos克隆的mysql

由于虚拟机克隆,克隆完之后所有的文件都是一样的,包括IP地址、mac地址、uuid等。导致mysql的uuid一样,在搭建主从复制的时候,如果uuid是一样的,那么就不能搭建成功。出现了Slave_IO_Running:
No的情况。

解决:
1.先查看MySQL的安装位置

show variables like 'datadir';

在这里插入图片描述

2.通过mysql生成一个uuid用于修改

select uuid();

3.复制生成的uuid进入查询的配置文件修改uuid

vim /var/lib/mysql/auto.cnf

4.重启Mysql服务

systemctl restart mysqld

二、双主双从

原理:
在这里插入图片描述

1、 m1、m2主机配置

1.m1修改配置文件 /etc/my.cnf


#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^32-1,默认为1
server-id=1
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

2.m2修改配置文件 /etc/my.cnf


#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^32-1,默认为1
server-id=3
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

3.重启MySQL服务器

systemctl restart mysqld

2、主机搭建

1.两台主库创建账户并授权


#创建hostname用户,并设置密码,该用户可在任意主机连接该MySQL服务
CREATE USER 'hostname'@'%' IDENTIFIED WITH mysql_native_password By 'Root@123';

2.为’hostname’@‘%’ 用户分配主从复制权限

GRANT REPLICATION SLAVE ON *.* TO 'hostname'@'%';

3.通过指令,查看两台主库的二进制日志坐标

show master status ;

3.s1、s2从库配置

1.s1 从库
server-id=2
2.s2从库
server-id=4

3.重启MySQL服务器

systemctl restart mysqld

4.链接主库
需要注意s1对应的是m1s2对应的是m2
具体方式 参照一主一从的从库设置主库

# 8.0.23版本以下执行
CHANGE MASTER TOMASTER_HOST = '主库的IP地址',MASTER_USER = '用于复制的用户名',MASTER_PASSWORD = '该用户对应的密码',MASTER_LOG_FILE = '主库二进制日志文件名',MASTER_LOG_POS = 主库二进制日志位置;
# 8.0.23版本以上
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '主库的IP地址',SOURCE_USER = '用于复制的用户名',SOURCE_PASSWORD = '该用户对应的密码',SOURCE_LOG_FILE = '主库二进制日志文件名',SOURCE_LOG_POS = 主库二进制日志位置;
3.启动两台从库主从复制,查看从库状态
start slave;
show slave status \G;

3、两台主机相互复制 m1复制m2 m2复制m1 参照从链接主库的方式

CHANGE MASTER TOMASTER_HOST = '主库的IP地址',MASTER_USER = '用于复制的用户名',MASTER_PASSWORD = '该用户对应的密码',MASTER_LOG_FILE = '主库二进制日志文件名',MASTER_LOG_POS = 主库二进制日志位置;
# 8.0.23版本以上
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '主库的IP地址',SOURCE_USER = '用于复制的用户名',SOURCE_PASSWORD = '该用户对应的密码',SOURCE_LOG_FILE = '主库二进制日志文件名',SOURCE_LOG_POS = 主库二进制日志位置;
3.启动,查看状态
start slave;
show slave status \G;

三、测试
分别在两台主库m1、m2上执行DDL、DML语句,查看涉及到的数据库服务器的数据同步情况。


create database test;create table u2_table(
id int not null primary key,
name varchar(50) not null,
sex varchar(1)
)engine=innodb default charset=utf8mb4;insert into u2_table(id,name,sex) values(1,'Tom','1');
insert into u2_table(id,name,sex) values(2,'Trigger','0');
insert into u2_table(id,name,sex) values(3,'Dawn','1');
insert into u2_table(id,name,sex) values(4,'ack Ma','1');
insert into u2_table(id,name,sex) values(5,'Coco','0');
insert into u2_table(id,name,sex) values(6, 'jerry','1');
http://www.lryc.cn/news/497671.html

相关文章:

  • 【C++】入门【五】
  • 【React】二、状态变量useState
  • SQL Server中的数据处理函数:提升SQL查询能力
  • TypeScript 语言学习入门级教程五
  • 上海市计算机学会竞赛平台2022年7月月赛丙组匹配括号(三)
  • 108.【C语言】数据结构之二叉树查找值为x的节点
  • Java学习笔记(10)--面向对象基础
  • 社群分享在商业引流与职业转型中的作用:开源 AI 智能名片 2+1 链动模式小程序的应用契机
  • nodejs官方文档学习-笔记-1
  • android视频播放器之DKVideoPlayer
  • Linux——基础命令(3)
  • MySQL备份恢复
  • 鲲鹏麒麟安装离线版MySQL5.7
  • 【不稳定的BUG】__scrt_is_managed_app()中断
  • MyBatis 详解
  • Cursor+Devbox AI开发快速入门
  • 编写按层次顺序(同一层自左至右)遍历二叉树的算法。或:按层次输出二叉树中所有结点;
  • docker 安装mysql8.0.29
  • vue深入理解输入框字符限制的优化设计
  • 完整指南:在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK
  • 【Leetcode Top 100】138. 随机链表的复制
  • 2024年12月HarmonyOS应用开发者基础认证全新题库
  • Flink问题总结
  • Day17 C++ vector 容器
  • 常见Linux命令(详解)
  • AgGrid 组件封装设计笔记:自定义 icon 以及每个 icon 的点击事件处理
  • vb.net常用命名空间
  • Netty面试内容整理-Netty 工作原理
  • CMD 介绍
  • 【项目日记】仿mudou的高并发服务器 --- 实现HTTP服务器