Linux CentOS 环境 MySQL 主从复制集群搭建

环境说明

MySQL版本8.4.0

操作系统 Linux CentOS 7.9

官网文档
https://dev.mysql.com/doc/refman/8.4/en/replication-configuration.html

以下代码片段中带分号都是在MySQL命令行( mysql -uroot -p)中执行

1. 首先在两个节点上安装数据库

参考 Linux CentOS安装MySQL8.0

节点 IP
主库=复制源 192.168.133.181
从库=副本 192.168.133.182

2. 修改主库配置文件

设置日志文件名称和服务器ID,以及需要复制的数据库

bash 复制代码
vim /etc/my.cnf

[mysqld]下增加如下配置

bash 复制代码
#服务器ID
server-id=1
#打开主库binlog日志,并设置文件名前缀
log-bin=mysql-bin

关于log-bin是否要设置可以通过

sql 复制代码
show variables like 'log_bin%'; 

查询,MySQL8是默认开启的,MySQL5.7及以下版本默认未开启。当然如果是MySQL8版本你也可以重新指定bin-log文件名称。

修改完成后重启服务

sql 复制代码
systemctl restart mysqld

3. 主库创建同步账号

sql 复制代码
-- 创建用户 replica
CREATE USER 'replica'@'%' IDENTIFIED BY '12345678';
-- 授权
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

4. 主库获取 bin log 坐标

要配置副本(从库)在正确的点开始复制过程,需要在 bin log 中记下复制源(主库)的当前坐标

如果主库已经有数据

通过命令行客户端连接到主库,并通过执行以下

sql 复制代码
FLUSH TABLES WITH READ LOCK;

语句刷新所有表并阻止数据写入,如果退出该客户端,锁定将被释放。

使用下面语句查看bin log日志文件名称和坐标位置

8.4.0及以后版本

sql 复制代码
SHOW BINARY LOG STATUS;

8.4.0以前版本

sql 复制代码
SHOW MASTER STATUS;

MySQL8.4.0版本,已将SHOW MASTER STATUS废弃,改为SHOW BINARY LOG STATUS
https://dev.mysql.com/doc/relnotes/mysql/8.4/en/news-8-4-0.html#mysqld-8-4-0-configuration

5. 同步数据

如果主库已经有数据,可以使用mysqldump工具将数据复制到从库,保证两边数据一致。

6.配置从库

bash 复制代码
vim /etc/my.cnf

[mysqld]下增加如下配置

sql 复制代码
#服务器ID
server-id=2

修改完成后重启服务

sql 复制代码
systemctl restart mysqld

7.在从库上配置主库连接信息

8.0.23及以后版本

sql 复制代码
 CHANGE REPLICATION SOURCE TO
     SOURCE_HOST='192.168.133.181',
     SOURCE_PORT=3306,
     SOURCE_USER='replica',
     SOURCE_PASSWORD='12345678',
     SOURCE_LOG_FILE='mysql-bin.000001',
     SOURCE_LOG_POS=668;

SOURCE_LOG_FILE和 SOURCE_LOG_POS 参考步骤4中查询出来的结果

其他参数就不做过多解释了,看字面意思,可以自行查阅官网。

8.0.23以前版本

sql 复制代码
  CHANGE MASTER TO
     MASTER_HOST='192.168.133.181',
     MASTER_PORT=3306,
     MASTER_USER='replica',
     MASTER_PASSWORD='12345678',
     MASTER_LOG_FILE='mysql-bin.000001',
     MASTER_LOG_POS=668;

关于语句变更说明

8.在从库开启复制

新版本(8.0.22及以后)

sql 复制代码
START REPLICA;

旧版本(8.0.22以前)

sql 复制代码
START SLAVE;

查看从库复制情况

新版本(8.0.22及以后)

sql 复制代码
SHOW REPLICA STATUS\G;

旧版本(8.0.22以前)

sql 复制代码
SHOW SLAVE STATUS\G;

可以在主库新建数据库测试从库中是否同步。

如果上面状态有报错或复制失败 可能是数据不一致的原因

在从库上

先停止复制

sql 复制代码
STOP REPLICA;

然后重置复制,它将清除复制元数据存储库,删除所有中继日志文件,并启动新的中继日志文件。

sql 复制代码
RESET REPLICA;

最后重启复制

sql 复制代码
START REPLICA;
相关推荐
阳光九叶草LXGZXJ2 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
奔跑的大白啊3 小时前
多容器共享目录权限踩坑记
linux·ubuntu·共享目录·linux权限·docker 容器化部署
Android系统攻城狮6 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
H.莓飛6 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
91刘仁德6 小时前
IP协议详解:从IP协议头到网段划分、路由与NAT
linux·服务器·网络·网络协议·tcp/ip
硅基手札7 小时前
【Linux内核专栏 14】网络协议栈
linux·运维·网络协议
沫璃染墨9 小时前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
晚安日记wanna9 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
晚安日记wanna9 小时前
索引建了却不走?7 个失效原因逐层排查
数据库·mysql·性能优化
工作10年+,存储芯片行业9 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie