**摘要:**本文全面介绍了 MySQL 8.0 在不同操作系统(特别是国产银河麒麟 ARM 架构)下的生产环境部署方案、配置优化、安全加固与高可用实践。内容涵盖四大部署方式(RPM、二进制包、Docker、MSI)的对比与选型口诀,详细拆解了银河麒麟 ARM 离线 RPM 安装的七步流程及各组件作用,提供了适用于 8C16G 服务器的通用 my.cnf 配置模板,补充了基于二进制包的主从复制部署步骤,并给出了安装后的统一安全加固 SQL、备份恢复标准方案以及全环境(含国产麒麟)的专属避坑清单,旨在为运维和开发人员提供一份可直接用于生产的全栈指南。
一、四大部署方案对比(新增国产 ARM 麒麟适配说明)
| 部署方式 | 适用系统 | 生产优点 | 缺点 | 最佳场景 |
|---|---|---|---|---|
| yum/apt RPM 包安装 | CentOS/RHEL/ 银河麒麟 V10(ARM/x86) | 一键安装、自动注册 systemd 服务、统一系统日志、yum 便捷升级、依赖自动处理 | 多实例部署繁琐;MySQL 官方 yum 源默认仅 x86,ARM 麒麟需单独下载 aarch64 el8 RPM 包 | 线上业务主从、云服务器、标准国产化生产环境【首选】 |
| Linux 通用二进制 tar.xz/ Windows ZIP 绿色包 | Windows Server、全 Linux(含银河麒麟 ARM) | 离线可用、自定义安装 / 数据路径、单服务器多版本多实例、跨发行版通用、无系统包管理器冲突 | 手动创建用户、编写 my.cnf、自建 systemd 服务,步骤多 | 内网隔离无外网机房、国产 ARM 服务器、一台机器跑多个 MySQL 实例 |
| Docker 容器 | Win/Mac/Linux 全平台 | 一行命令启动、环境隔离、多版本快速切换 | IO 性能损耗大、数据持久化需额外规划,不适合高并发核心业务 | 开发测试、临时验证,严禁承载正式生产库 |
| MSI 图形安装包 | Windows Server | 可视化向导、自动注册系统服务、新手易上手 | 安装路径固定、多实例管理困难 | Windows 小型内网业务库 |
生产选型口诀(适配国产银河麒麟)
- 银河麒麟 V10 ARM 正式业务、有外网:优先 el8 aarch64 RPM Bundle 离线包(官方 yum 源无 ARM 原生包);
- 麒麟内网隔离、一台机器多数据库实例:选 glibc2.28 aarch64 二进制 tar.xz;
- Windows 服务器、离线环境:ZIP 绿色包;
- 本地开发、临时测试:Docker(不做主库);
- Mac 仅用于开发,禁止作为生产数据库。
补充:RPM 包 vs 二进制包核心区分(你之前疑问整合)
- MySQL el8 RPM 分包(RPM Bundle) 拆分为多个独立 rpm:common、icu 字符集、libs、兼容库、客户端插件、client、server;系统自动分配标准路径
/usr/bin、/var/lib/mysql、/etc/my.cnf,自动创建 mysql 系统用户、生成mysqld.service;卸载可用rpm -e统一清理。 限制:仅适配 RHEL8 系(银河麒麟 V10),ARM 必须下载aarch64架构包,x86 包无法在飞腾 / 鲲鹏服务器运行。 - 通用二进制 tar.xz 绿色包 单压缩包整合全部程序、库、字符集,无系统包管理器绑定;所有 Linux 发行版通用,手动自定义
basedir、datadir;升级 / 卸载直接删除文件夹,适合国产化批量标准化部署。
二、各环境一键快速生产安装步骤(新增银河麒麟 ARM 专属流程)
方案 1:RPM 在线 yum 安装(x86 CentOS/RHEL,ARM 麒麟不推荐外网 yum)
仅 x86 服务器可用,银河麒麟 ARM 官方 yum 源无原生 MySQL aarch64 包,会报架构缺失。
# 导入MySQL8.0 el9源
wget https://dev.mysql.com/get/mysql80-community-release-el9-3.noarch.rpm
rpm -ivh mysql80-community-release-el9-3.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
# 一键安装服务端+客户端
yum install -y mysql-community-server
# 启停自启
systemctl start mysqld
systemctl enable mysqld
# 获取初始临时密码
grep 'temporary password' /var/log/mysqld.log
# 安全初始化(删匿名账号、测试库、加固密码)
mysql_secure_installation
方案 2:银河麒麟 V10 ARM 离线 RPM 安装(国产化标准方案)
-
前置清理冲突(必须执行)
卸载系统自带mariadb,避免端口/文件冲突
rpm -e --nodeps $(rpm -qa | grep mariadb)
删除旧残留目录
rm -rf /var/lib/mysql /etc/my.cnf* /var/log/mysqld.log
-
上传解压
mysql-8.0.xx-1.el8.aarch64.rpm-bundle.tar,按依赖顺序安装最小生产包1.公共基础包
rpm -ivh mysql-community-common-8.0.46-1.el8.aarch64.rpm
2.icu字符集库
rpm -ivh mysql-community-icu-data-files-8.0.46-1.el8.aarch64.rpm
3.核心运行库
rpm -ivh mysql-community-libs-8.0.46-1.el8.aarch64.rpm
4.5.x兼容库
rpm -ivh mysql-community-libs-compat-8.0.46-1.el8.aarch64.rpm
5.登录加密插件
rpm -ivh mysql-community-client-plugins-8.0.46-1.el8.aarch64.rpm
6.客户端运维工具
rpm -ivh mysql-community-client-8.0.46-1.el8.aarch64.rpm
7.数据库主服务(最后安装)
rpm -ivh mysql-community-server-8.0.46-1.el8.aarch64.rpm
1. mysql-community-common
作用:全局公共基础资源包,所有其他 RPM 的底层依赖,必须第一个安装
- 内置 MySQL 标准错误提示文本、全球多语言字符集基础文件
- 提供系统默认配置模板
/usr/share/mysql/my-default.cnf - 内置数据库内置函数、系统状态常量定义
- 存储权限表、系统库基础结构文件 不装后果:所有客户端、服务端 RPM 直接报依赖缺失,安装中断
2. mysql-community-icu-data-files(el8 专属,ARM 麒麟必装)
作用:ICU 国际字符排序库,utf8mb4 完整支持依赖包
- 提供 emoji、中日韩复杂字符、多语言校对排序规则
- 适配国产中文业务、生僻字存储场景 不装后果:mysqld 服务启动直接失败,字符集初始化报错,数据库无法运行
3. mysql-community-libs
作用:MySQL 核心运行动态链接库
- 提供
libmysqlclient.so底层运行库 - 服务端 mysqld、mysql 客户端、备份工具 mysqldump 全部依赖此库
- 系统程序、中间件连接数据库的基础驱动文件
4. mysql-community-libs-compat
作用:5.x 版本兼容动态库,向下兼容旧业务程序
- 适配老旧 Java、C/C++ 项目、中间件,兼容 MySQL5 系列老驱动
- 避免老业务启动报
libmysqlclient.so.18类缺失错误 - 新项目同样建议安装,消除潜在兼容隐患
5. mysql-community-client-plugins
作用:客户端认证加密插件集合,远程登录必备
- 包含
mysql_native_password、caching_sha2_password两种主流登录加密插件 - Navicat、DBeaver、业务应用远程连接数据库必须依赖 不装后果:客户端登录报错,无法远程访问数据库
6. mysql-community-client
作用:全套运维客户端命令工具 内置常用命令:
mysql:数据库登录交互工具mysqldump:逻辑备份 / 恢复工具mysqladmin:服务状态管理、账号密码修改工具mysqlimport:批量数据导入工具 日常运维、备份、数据库操作全部依赖该包
7. mysql-community-server(核心数据库服务包)
作用:MySQL 数据库主程序,整套部署核心
- 主进程
mysqld(InnoDB 存储引擎、连接处理、SQL 解析执行) - 自动创建系统
mysql无登录用户、数据目录/var/lib/mysql、日志目录 - 自动生成 systemd 服务文件
/usr/lib/systemd/system/mysqld.service,支持systemctl启停、开机自启 - 内置初始化脚本,首次启动自动生成系统库、临时 root 密码
devel、test、embedded 测试包业务服务器无需安装。
- 初始化、启动、放行防火墙同通用流程。
方案 3:Ubuntu apt 在线安装(x86)
apt update
apt install wget -y
wget https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb
dpkg -i mysql-apt-config_0.8.28-1_all.deb
apt update
apt install -y mysql-server
systemctl enable --now mysql
mysql_secure_installation
方案 4:Windows ZIP 绿色包(离线 Windows)
-
解压至无中文、无空格路径
D:\mysql80,独立 SSD 创建数据目录E:\mysql_data\3306; -
根目录新建
my.ini,填入文末通用配置模板; -
管理员 CMD 初始化 + 注册系统服务:
cd D:\mysql80\bin
mysqld --initialize --console
mysqld install MySQL80 --defaults-file="D:\mysql80\my.ini"
net start MySQL80 -
登录修改强密码,执行安全加固 SQL。
方案 5:Linux 通用二进制 tar.xz(银河麒麟 ARM 离线首选,适配主从架构)
适配麒麟 V10 ARM,下载mysql-8.0.xx-linux-glibc2.28-aarch64.tar.xz,glibc2.28 匹配麒麟系统底层库,无版本报错。
# 1. 创建专用运行用户,禁止root启动数据库
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
# 2. 解压至程序目录
tar -xf mysql-8.0.xx-linux-glibc2.28-aarch64.tar.xz -C /usr/local/
mv /usr/local/mysql-8.0.xx-linux-glibc2.28-aarch64 /usr/local/mysql80
# 3. 独立磁盘规划数据、binlog、日志目录(生产规范)
mkdir -p /data/mysql/3306/{data,binlog,logs,socket,tmp}
chown -R mysql:mysql /usr/local/mysql80 /data/mysql
# 4. 编写my.cnf,初始化数据库
/usr/local/mysql80/bin/mysqld --defaults-file=/data/mysql/3306/my.cnf --initialize --user=mysql
# 5. 手动编写systemd服务文件,实现开机自启、故障自动重启
该部署方式可直接用于银河麒麟主从复制架构,多实例部署互不干扰。
方案 6:Docker(仅测试,禁止核心生产)
docker run -d --name mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=Pro@123456 \
mysql:8.0
三、通用生产 my.cnf 完整参数(8C16G 服务器,麒麟 ARM/Windows 通用)
[client]
socket=/data/mysql/3306/socket/mysql.sock
default-character-set=utf8mb4
[mysqld]
基础路径配置
port=3306
basedir=/usr/local/mysql80
datadir=/data/mysql/3306/data
socket=/data/mysql/3306/socket/mysql.sock
pid-file=/data/mysql/3306/mysql.pid
log-error=/data/mysql/3306/logs/error.log
字符集、表名大小写适配国产化系统
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
lower_case_table_names=1
性能内存参数
innodb_buffer_pool_size=10G
innodb_log_file_size=2G
innodb_log_buffer_size=64M
max_connections=1000
open_files_limit=65535
Binlog(主从复制、数据恢复强制开启)
log_bin=/data/mysql/3306/binlog/mysql-bin
binlog_format=ROW
sync_binlog=1
expire_logs_days=7
安全加固(等保要求)
default_authentication_plugin=mysql_native_password
local_infile=0
symbolic-links=0
skip-show-database
secure_file_priv=/data/mysql/3306/tmp
validate_password.policy=MEDIUM
validate_password.length=12
慢查询日志优化SQL
slow_query_log=1
slow_query_log_file=/data/mysql/3306/logs/slow.log
long_query_time=1
log_queries_not_using_indexes=1
主从复制专属参数(多实例需修改唯一server-id)
server-id=1
relay-log=/data/mysql/3306/binlog/relay-bin
参数调整要点
- 内存参数:服务器物理内存的 50%~70% 分配给
innodb_buffer_pool_size; - binlog:生产必开,是误删回滚、主从同步唯一依赖;
server-id:单机单实例默认 1,主从环境主库、从库 ID 必须完全不同;lower_case_table_names=1:适配 Windows 迁移、国产系统,统一表名小写不区分大小写。
四、银河麒麟二进制包部署 MySQL 主从复制 补充(参考 CSDN 博文整合)
基于麒麟 V10 ARM 二进制包部署传统位置点主从,适配国产化业务高可用。
1. 环境前置要求
- 主、从服务器 MySQL 版本完全一致;
- 两台机器时间同步(ntpdate ntp.aliyun.com);
- 防火墙互相放行 3306 端口,SELinux 关闭;
- 主从配置
server-id唯一不重复。
2. 主库 Master 配置
-
修改 my.cnf,开启 binlog、设置 server-id
[mysqld]
server-id=1
log_bin=/data/mysql/3306/binlog/mysql-bin
binlog_format=ROW -
重启数据库生效
systemctl restart mysqld
-
创建专属复制账号,仅授予同步权限(最小权限原则)
CREATE USER 'repl'@'从库IP' IDENTIFIED BY 'Repl@2026DB';
GRANT REPLICATION SLAVE ON . TO 'repl'@'从库IP';
FLUSH PRIVILEGES; -
锁表记录 binlog 位置(导出全量备份)
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; -- 记录File、Position字段值,后续从库绑定使用 -
新开终端导出全库一致性备份
/usr/local/mysql80/bin/mysqldump -uroot -p --all-databases --single-transaction --master-data=2 > master_full.sql
-
备份完成解锁主库
UNLOCK TABLES;
3. 从库 Slave 配置
-
my.cnf 设置独立 server-id,开启中继日志
[mysqld]
server-id=2
relay-log=/data/mysql/3306/binlog/relay-bin
read_only=1 -- 普通业务禁止写入,仅主库写入 -
重启数据库,导入主库全量备份
/usr/local/mysql80/bin/mysql -uroot -p < master_full.sql
-
绑定主库同步信息(填入主库 SHOW MASTER STATUS 记录的值)
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@2026DB',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=156; -
启动同步,校验复制状态
START SLAVE;
SHOW SLAVE STATUS\G
4. 主从校验标准
必须同时满足:
Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0主库新建库、插入数据,从库可实时同步代表部署成功。
五、安装完成后统一安全加固 SQL(全环境通用)
-- 1. 设置高强度root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Pro@MysqlDB2026';
-- 2. 禁止root全网远程登录,仅本地管理
DELETE FROM mysql.user WHERE user='root' AND host != 'localhost';
-- 3. 清理匿名账号、测试库
DELETE FROM mysql.user WHERE user='';
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;
-- 4. 创建业务专用账号,限制访问IP、最小权限
CREATE USER 'biz_user'@'192.168.1.%' IDENTIFIED BY 'Biz@Data202666';
GRANT SELECT,INSERT,UPDATE,DELETE ON biz_db.* TO 'biz_user'@'192.168.1.%';
FLUSH PRIVILEGES;
网络配套安全规范
防火墙仅放行业务应用服务器 IP 访问 3306,禁止0.0.0.0/0全网开放,杜绝公网直接访问数据库。
六、备份 & 恢复标准方案
1. 逻辑备份 mysqldump(跨系统 / 跨架构通用,麒麟 x86/ARM 迁移首选)
全库定时备份脚本:
/usr/local/mysql80/bin/mysqldump -uroot -p --all-databases --single-transaction --routines --triggers --events | gzip > /backup/mysql_$(date +%Y%m%d).sql.gz
恢复命令:
gunzip -c xxx.sql.gz | /usr/local/mysql80/bin/mysql -uroot -p
参数说明:
--single-transaction:InnoDB 无锁备份,线上不阻塞业务;--routines --triggers --events:同步存储过程、触发器、定时事件。
2. 物理备份 XtraBackup(百 GB 大库)
优势:备份恢复速度极快;限制:同架构系统恢复,ARM 与 x86 之间不能直接拷贝 data 目录,InnoDB 二进制文件跨架构极易损坏;跨麒麟 x86/ARM 迁移必须使用 mysqldump 逻辑导出。
3. 备份误区
mysql -uroot -p db > file.dmp无法完整备份,缺失建库建表语句;- Oracle / 达梦.dmp 是加密二进制备份,和 mysqldump 导出的 sql 文件完全不互通。
七、全环境 + 国产麒麟专属避坑清单
- 架构包区分 :银河麒麟 ARM(飞腾 / 鲲鹏)只能使用
aarch64后缀 RPM / 二进制包,x86_64 包会报架构不匹配;el7 包 glibc 版本过低,麒麟 V10 仅支持 el8 包; - RPM 安装前置:必须卸载系统自带 mariadb,否则端口、文件冲突,mysqld 启动失败;
- 二进制包硬性规范:必须新建 mysql 系统用户,禁止 root 账号启动数据库;数据目录独立磁盘存放,不要和系统盘共用;
- 主从复制红线:主从 MySQL 版本必须一致,server-id 不能重复,binlog 必须开启;
- 跨系统迁移:麒麟 ARM ↔ x86、Windows ↔ Linux,一律用 mysqldump 逻辑备份,禁止直接拷贝 data 目录;
- 生产禁止项:关闭 binlog、Docker 承载核心业务、root 账号全网开放远程访问、弱密码;
- 备份规范:异地留存备份文件,每周执行一次恢复演练,验证备份可用;
- 旧服务清理 :RPM 安装后残留
mysql.rpmold旧 sysv 脚本可直接删除,无数据风险,避免服务冲突。