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

centos7 离线安装mysql8 并实现主从架构

centos7 离线安装mysql8 并实现主从架构

整体架构概述
主服务器 (Master): 负责处理写操作,并将数据的变更记录到二进制日志 (Binary Log) 中。
从服务器 (Slave):   从主服务器复制二进制日志,并在本地重放这些操作,以保持与主服务器的数据一致。

第一阶段:准备工作 (在主、从服务器上执行)
1. 环境确认
确保您有两台安装了 CentOS 7 的服务器,并且它们之间网络互通(可以互相 ping 通)。假设它们的 IP 地址如下:

主服务器 (Master): 192.168.88.128

从服务器 (Slave): 192.168.88.102

关闭防火墙和 SELinux(生产环境请谨慎操作,建议配置防火墙规则)
# 临时关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 临时关闭 SELinux
setenforce 0
# 永久禁用 SELinux,需要重启生效
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2. 离线下载 MySQL 8 安装包
在一台有网络的机器上,访问 MySQL 官方 Yum 仓库或直接下载 RPM Bundle:
https://dev.mysql.com/downloads/mysql/

选择对应的版本,例如 Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit) 的 RPM Bundle (mysql-8.0.*-el7.x86_64.rpm-bundle.tar)。

将下载好的 mysql-8.0.*-el7.x86_64.rpm-bundle.tar 文件通过 U 盘或内部网络传输到两台 CentOS 7 服务器的相同目录下,例如 /opt/mysql。


3. 卸载系统自带的 MariaDB
CentOS 7 默认可能安装了 MariaDB,它会与 MySQL 冲突,必须先卸载。
# 检查是否已安装
rpm -qa | grep mariadb

# 如果存在,则卸载
rpm -e --nodeps mariadb-libs


第二阶段:离线安装 MySQL 8 (在主、从服务器上执行)
1. 解压并安装 RPM 包
进入存放安装包的目录。

cd /opt/mysql
tar -xvf mysql-8.0.*-el7.x86_64.rpm-bundle.tar

# 使用 rpm 命令按顺序安装必要的包
# 注意:安装顺序很重要,因为存在依赖关系。
rpm -ivh mysql-community-common-8.0.*.rpm
rpm -ivh mysql-community-client-plugins-8.0.*.rpm
rpm -ivh mysql-community-libs-8.0.*.rpm
rpm -ivh mysql-community-client-8.0.*.rpm
rpm -ivh mysql-community-icu-data-files-8.0.*.rpm
rpm -ivh mysql-community-server-8.0.*.rpm

# 如果想安装开发包,可以继续安装
# rpm -ivh mysql-community-devel-8.0.*.rpm

2. 初始化 MySQL 并设置开机自启

# 初始化数据库,会生成 root 的临时密码
mysqld --initialize --user=mysql --console
# 请务必记录最后一行显示的临时密码,例如:`[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Jqkfg&a!h1Q?`

查看 MySQL 日志:查看默认密码
MySQL 在安装和初始化时会记录一些信息,包括临时密码。你可以查看 MySQL 的错误日志文件来找到这个密码。通常,
日志文件的位置在 /var/log/mysqld.log 或 /var/log/mysql/mysql.log

# 更改数据目录的权限
chown -R mysql:mysql /var/lib/mysql/

# 启动 MySQL 服务并设置开机自启
systemctl start mysqld
systemctl enable mysqld

3. 修改 root 密码并进行安全设置
使用初始密码登录,并立即修改密码。

mysql -u root -p
# 输入刚才记录的临时密码

在 MySQL 提示符下执行:

-- 修改 root 用户密码,请将 'YourNewStrongPassword!123' 替换为你的强密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!123';

-- 可选:运行安全安装脚本,可以移除测试数据库、匿名用户等
-- mysql_secure_installation 的命令行版本
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;

message from server: "Host '192.168.88.1' is not allowed to connect to this MySQL server"  使用客户端连接报错
use mysql;
update user set host = '%' where user='root';
flush privileges;

如果使用的是 dbveaver 需要将alowPublickKeyRetrieval 的客户端配置值改为 true 

第三阶段:配置主从复制
1. 配置主服务器 (Master: 192.168.1.128)
a. 编辑 MySQL 配置文件
vim /etc/my.cnf
[mysqld]
server-id = 1                   # 服务器唯一ID,主从不能相同
log-bin = mysql-bin             # 启用二进制日志
binlog_format = ROW             # 推荐使用 ROW 格式
binlog-do-db = your_database_name # 可选:指定要复制的数据库,多个则写多行。不配置则复制所有库。
# binlog-ignore-db = mysql      # 可选:指定忽略的数据库

# 8.0 版本新增,保证全局事务ID的一致性
gtid-mode = on
enforce-gtid-consistency = on

b. 重启 MySQL 服务使配置生效

c. 创建用于复制的用户
登录 MySQL:
mysql -u root -p
-- 创建一个用户 'repl',允许从 '192.168.1.102' 登录,密码为 'ReplPassword!123'
CREATE USER 'repl'@'192.168.1.102' IDENTIFIED WITH mysql_native_password BY 'ReplPassword!123';

-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.102';

-- 刷新权限
FLUSH PRIVILEGES;

-- 查看主服务器状态,记录 File 和 Position 的值(如果未开启GTID)
SHOW MASTER STATUS;

执行 SHOW MASTER STATUS; 后,会显示类似下面的信息,请记下 File 和 Position 的值(如果使用 GTID,则不需要这两个值)

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      155 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

2. 配置从服务器 (Slave: 192.168.1.102)
vim /etc/my.cnf
[mysqld]
server-id = 2                   # 服务器唯一ID,必须与主服务器不同
relay-log = mysql-relay-bin     # 启用中继日志
read_only = 1                   # 设置从库为只读(对拥有 SUPER 权限的用户无效)
# 8.0 版本新增,保证全局事务ID的一致性
gtid-mode = on
enforce-gtid-consistency = on

b. 重启 MySQL 服务使配置生效

systemctl restart mysqld
c. 配置主从复制链接
登录从服务器 MySQL:

mysql -u root -p
执行 SQL 来设置主库信息:
方法一:使用 GTID 方式(推荐,更简单)

CHANGE MASTER TO
MASTER_HOST='192.168.1.128',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPassword!123',
MASTER_AUTO_POSITION = 1;
方法二:使用传统的 binlog 文件位置方式(如果未启用 GTID)
CHANGE MASTER TO
MASTER_HOST='192.168.1.128',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPassword!123',
MASTER_LOG_FILE='mysql-bin.000001', -- 替换为主库 SHOW MASTER STATUS 查到的 File
MASTER_LOG_POS=155; -- 替换为主库 SHOW MASTER STATUS 查到的 Position

START SLAVE; -- 在 MySQL 8.0.22 及以下版本使用
-- 或
START REPLICA; -- 在 MySQL 8.0.23 及以上版本推荐使用

e. 检查从库复制状态
SHOW SLAVE STATUS\G -- 在 MySQL 8.0.22 及以下版本使用
-- 或
SHOW REPLICA STATUS\G -- 在 MySQL 8.0.23 及以上版本推荐使用

3. 验证主从复制
关键指标检查:
在 SHOW REPLICA STATUS\G 的输出中,查看以下两个关键参数:

Replica_IO_Running: Yes

Replica_SQL_Running: Yes

如果这两个状态都是 Yes,则表示主从复制链路正常。
功能测试:

在主服务器上创建一个新数据库或一张新表,并插入一些数据。

CREATE DATABASE test_repl;
USE test_repl;
CREATE TABLE t1 (id INT, name VARCHAR(20));
INSERT INTO t1 VALUES (1, 'Master');

在从服务器上检查数据是否已同步。

USE test_repl;
SELECT * FROM t1;

如果能看到 (1, 'Master') 这条记录,说明主从复制成功!

常见问题与故障排除
Replica_IO_Running: Connecting

原因: 从服务器无法连接主服务器。

排查:

检查网络是否通畅:ping 192.168.1.100

检查主服务器防火墙是否关闭或是否放行了 3306 端口。

检查 CHANGE MASTER TO 语句中的 MASTER_HOST, MASTER_USER, MASTER_PASSWORD 是否正确。

在主服务器上检查 repl 用户的 host 限制是否正确。

Replica_SQL_Running: No 且报错 Error '...' on query

原因: 通常是因为从服务器上已经存在一些数据,与主服务器发过来的 SQL 冲突。

解决:

方法一(谨慎): 跳过这个错误(适用于测试环境)。STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

方法二(推荐): 重新初始化从库。先在主库做全量备份,然后在从库恢复,再重新配置主从。

UUID 冲突

现象: 如果克隆虚拟机,可能导致 auto.cnf 文件中的 server-uuid 相同。

解决: 删除从库的 auto.cnf 文件,重启 MySQL 服务会自动生成新的。

bash
rm -f /var/lib/mysql/auto.cnf
systemctl restart mysqld
CentOS 7 离线环境下 MySQL 8 的主从架构搭建完成!


http://www.dtcms.com/a/419585.html

相关文章:

  • YOLO 11 图像分类推理 Web 服务
  • SMTPman,smtp服务商在邮件发送中的方案!
  • 做logo去哪个网站商城网站建设二次开发
  • 云端服务器使用指南:利用Python操作mysql数据库
  • CKAD-CN 考试知识点分享(17) 金丝雀部署
  • 济宁住房和城乡建设局网站wordpresscom下载
  • Flutter版本选择指南:避坑3.27 | 2025年9月
  • 营销型网站建设seo优
  • 南宁网站建设制作后台加新tag wordpress
  • 海外建站平台网站建设投资
  • 【ORM】-1-SQLAlchemy介绍,以及原生sql应用
  • wordpress主题 苏醒百度seo排名如何提升
  • window pdf文件批量转高清图片png、jpg
  • 北京城乡建设门户网站凉州区住房城乡建设局网站
  • 安宝特案例丨从 “围台观摩” 到 “远程高清学”:安宝特AR远程医疗套装支撑南京医院手术带教
  • 在模板网站建站好吗网站制作公司网站
  • Parasoft C/C++test 测试中 main 函数重复定义解决方案
  • 还在靠人工筛选供应商?数据驱动选商更精准
  • 孟村县做网站价格seo站长工具查询系统
  • 平顶山网站建设价格wordpress自动抓取
  • 网站开发用什么语言最多专业免费建站
  • k8s中的schedule
  • 整合ITSM和IT安全!-ManageEngine卓豪
  • 从“人工”到“智能”:数字新基建驱动下的园区能源计费变革
  • 用dreamever如何建设网站做外贸的网站看啥书
  • 温州建设局网站首页鹿泉区建设局网站
  • 锤子助手插件功能八十一:笔记复读
  • 建设一个公司网站多少钱系统开发费
  • 自己如何做网站推广wordpress悬浮音乐播放器
  • .net操作Excel:图表 (Chart) 的创建与定制