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 TO
    MASTER_HOST = '主库的IP地址',
    MASTER_USER = '用于复制的用户名',
    MASTER_PASSWORD = '该用户对应的密码',
    MASTER_LOG_FILE = '主库二进制日志文件名',
    MASTER_LOG_POS = 主库二进制日志位置;
# 8.0.23版本以上
CHANGE REPLICATION SOURCE TO
    SOURCE_HOST = '主库的IP地址',
    SOURCE_USER = '用于复制的用户名',
    SOURCE_PASSWORD = '该用户对应的密码',
    SOURCE_LOG_FILE = '主库二进制日志文件名',
    SOURCE_LOG_POS = 主库二进制日志位置;

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

start replica;
#8.0.22之后
start slave;
#8.0.22之前

5.查看主从同步状态

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

在这里插入图片描述

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 TO
    MASTER_HOST = '主库的IP地址',
    MASTER_USER = '用于复制的用户名',
    MASTER_PASSWORD = '该用户对应的密码',
    MASTER_LOG_FILE = '主库二进制日志文件名',
    MASTER_LOG_POS = 主库二进制日志位置;
# 8.0.23版本以上
CHANGE REPLICATION SOURCE TO
    SOURCE_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 TO
    MASTER_HOST = '主库的IP地址',
    MASTER_USER = '用于复制的用户名',
    MASTER_PASSWORD = '该用户对应的密码',
    MASTER_LOG_FILE = '主库二进制日志文件名',
    MASTER_LOG_POS = 主库二进制日志位置;
# 8.0.23版本以上
CHANGE REPLICATION SOURCE TO
    SOURCE_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');
<think>首先,用户的问题是:“我想配置MySQL主从复制环境 请问CentOS 7 配置 MySQL 主从复制步骤”。这是一个关于在CentOS 7上配置MySQL主从复制的步骤查询。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式,但在这个上下文中,可能没有数学表达式,所以我可以忽略这条,除非有需要。 - 独立公式使用$$...$$,但同样,这里可能不需要。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 参考站内引用: - 引用[1]: CHANGE MASTER TO 命令的示例。 - 引用[2]: MySQL主从复制的原理。 - 引用[3]: CHANGE MASTER TO 命令的另一个示例。 - 引用[4]: 另一个CHANGE MASTER TO 命令示例。 这些引用是关于配置MySQL主从复制的具体命令和原理。我应该整合这些信息,提供一个完整的步骤指南。 关键步骤总结(基于引用和一般知识): 1. 在主服务器和从服务器上安装MySQL。 2. 在主服务器上配置MySQL,启用二进制日志,并创建复制用户。 3. 在从服务器上配置MySQL4. 在主服务器上获取二进制日志位置。 5. 在从服务器上执行CHANGE MASTER TO命令。 6. 启动从服务器的复制。 7. 验证复制状态。 步骤需要详细和清晰。 结构回答: - 引言:简要解释主从复制。 - 步骤:分步指南。 - 结尾:验证和常见问题。 - 然后生成相关问题。 引用标识:在回答中,当引用特定命令或原理时,添加引用标识。例如,当提到CHANGE MASTER TO命令时,可以引用[1]、[3]、[4]。 使用中文回答。 生成相关问题:在回答结束后,添加“相关问题”部分。 完整回答框架: 1. 介绍MySQL主从复制。 2. 前提条件:例如,确保MySQL安装、网络连接等。 3. 主服务器配置步骤。 4. 从服务器配置步骤。 5. 验证复制。 6. 相关问题。 整合引用: - 当描述原理时,引用[2]。 - 当给出CHANGE MASTER TO命令时,引用[1]、[3]、[4]。 确保回答真实可靠:基于标准实践和引用。 最终输出: - 回答部分。 - 然后§§相关问题§§部分。</think>### CentOS 7 配置 MySQL 主从复制步骤 MySQL主从复制是一种高可用性解决方案,通过将主服务器的数据异步复制到一个或多个从服务器上,实现负载均衡和故障恢复[^2]。以下是基于CentOS 7的详细配置步骤(假设已安装MySQL 5.7或更高版本)。配置前确保主从服务器网络互通,且MySQL服务已启动。 #### 前提条件 - 主服务器和从服务器的IP地址(例如:主服务器IP为`192.168.1.100`,从服务器IP为`192.168.1.101`)。 - MySQL安装完成(可通过`yum install mysql-server`安装)。 - 防火墙开放MySQL端口(默认3306): ```bash sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload ``` #### 步骤1:主服务器配置 1. **修改MySQL配置文件**: 编辑主服务器的`/etc/my.cnf`文件,添加以下内容: ```ini [mysqld] server-id=1 # 唯一ID,主服务器设为1 log-bin=mysql-bin # 启用二进制日志 binlog-format=ROW # 日志格式推荐ROW binlog-do-db=your_database # 指定要复制的数据库名,如test_db ``` 保存后重启MySQL服务: ```bash sudo systemctl restart mysqld ``` 2. **创建复制用户**: 登录MySQL(`mysql -u root -p`),执行: ```sql CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password'; -- 创建复制用户 GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; -- 授予复制权限 FLUSH PRIVILEGES; -- 刷新权限 ``` 替换`your_password`为安全密码。 3. **获取二进制日志状态**: 执行以下命令记录关键信息: ```sql SHOW MASTER STATUS; ``` 输出类似: ``` +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | ... | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 154 | test_db | ... | +------------------+----------+--------------+------------------+ ``` 记下`File`(如`mysql-bin.000001`)和`Position`(如`154`),后续从服务器需要[^2]。 #### 步骤2:从服务器配置 1. **修改MySQL配置文件**: 编辑从服务器的`/etc/my.cnf`文件,添加: ```ini [mysqld] server-id=2 # 唯一ID,从服务器设为2(不能与主服务器相同) relay-log=mysql-relay-bin # 启用中继日志 read-only=1 # 设置从服务器为只读 ``` 保存后重启MySQL服务: ```bash sudo systemctl restart mysqld ``` 2. **配置复制链路**: 登录MySQL(`mysql -u root -p`),执行`CHANGE MASTER TO`命令(参数基于主服务器的信息)[^1][^3][^4]: ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.100', -- 主服务器IP MASTER_USER='repl_user', -- 主服务器复制用户名 MASTER_PASSWORD='your_password', -- 复制用户密码 MASTER_LOG_FILE='mysql-bin.000001', -- 主服务器的二进制日志文件 MASTER_LOG_POS=154, -- 主服务器的日志位置 MASTER_CONNECT_RETRY=60; -- 重试间隔(秒) ``` 启动复制: ```sql START SLAVE; ``` #### 步骤3:验证复制状态 - 在从服务器上检查复制状态: ```sql SHOW SLAVE STATUS\G; ``` 关键指标: - `Slave_IO_Running`和`Slave_SQL_Running`应为`Yes`。 - 若为`No`,检查错误信息(如网络问题或密码错误)。 - 测试:在主服务器插入数据(如`INSERT INTO test_db.table VALUES(...);`),在从服务器查询是否同步。 #### 注意事项 - **原理说明**:主服务器将数据变更写入二进制日志,从服务器复制日志到中继日志并重放,实现数据同步[^2]。 - **安全性**:复制用户密码应强密码,避免使用`root`。 - **错误处理**:常见问题包括防火墙阻塞、server-id冲突或日志位置错误,查看MySQL错误日志(`/var/log/mysqld.log`)。 - **扩展性**:支持多从服务器,重复从服务器配置步骤即可。 通过以上步骤,您可以在CentOS 7上成功搭建MySQL主从复制环境,提升系统可用性[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值