☰
02_MySQL 安装部署实战 —— RPM/二进制安装、8.0 初始化与 my.cnf 参数调优
2026/10/30 2:38:05 网站建设 项目流程

02_MySQL 安装部署实战 —— RPM/二进制安装、8.0 初始化与 my.cnf 参数调优

系列定位:《MySQL 数据库全栈运维实战系列》第 02 篇,与《Oracle 数据库全栈运维实战系列(VMware 版)》同构对标。适用版本:MySQL 8.0(5.7 差异随文标注)。官方文档:MySQL 8.0 Reference Manual、Installing MySQL on Linux / Initializing the Data Directory。


一、安装方式全景(一张图看懂)

图 1

安装方式优点缺点类比 Oracle
RPM/yum依赖自动解决、systemd 集成、升级方便路径固定、定制弱Oracle RPM 安装
二进制 tar.gz目录自由、多版本并存、不污染系统依赖手动解决解压版 Oracle Home
源码编译可定制编译选项、裁剪功能耗时长、维护成本高Oracle 源码编译(罕见)
Docker环境隔离、秒级拉起生产需额外考虑持久化容器化 Oracle

生产推荐:RHEL/CentOS 系用RPM 官方仓库(运维最省心);需要多版本并存或自定义路径用二进制通用包。源码编译仅在特殊内核/CPU 指令集调优场景使用。


二、环境准备(VMware 虚机 + Linux)

图 2

2.1 虚机规格建议

项最小规格生产建议说明
vCPU24~8MySQL 8.0 对多核友好
内存2GB8GB+Buffer Pool 至少 1~2GB
系统盘40GB60GB操作系统 + 软件
数据盘50GB200GB+建议独立挂载 /data
网卡NAT/桥接桥接/仅主机远程连接需固定 IP

2.2 VMware 注意事项(安装部署相关)

项建议原因
磁盘格式Thick Eager Zeroed(生产)或 Thin(测试)Thin 首次写入有延迟抖动;数据库建议厚置备
IO 控制器LSI Logic SAS或Paravirtual (VMware Paravirtual)对磁盘 IO 性能敏感,IDE 控制器性能差
磁盘模式独立 & 持久(Independent - Persistent)防止快照回滚时数据盘一起回滚,保护数据
CPU 虚拟化开启 VT-x/AMD-V,虚机 CPU 勾选"虚拟化 Intel VT-x"MySQL 不需要嵌套虚拟化,但需要硬件虚拟化支持
时间同步VMware Tools 开启时间同步 + 宿主机 NTP数据库时间漂移会导致 binlog/复制时间错乱
VMware Tools必须安装并运行时间同步、网卡性能、关机优雅
内存预留预留所有客户机内存(Reserve all guest memory)避免内存交换到磁盘导致数据库性能骤降
快照策略安装完系统+MySQL 后做一次干净快照,之后业务盘不随快照回滚快照回滚会导致 binlog 位点断裂、主从复制错乱

2.3 操作系统准备(root 执行)

图 3

# 解释:主机名与 hosts 解析(MySQL 8.0 初始化会用到 hostname) hostnamectl set-hostname mysql01 echo "192.168.10.60 mysql01.example.com mysql01" >> /etc/hosts # 解释:关闭防火墙(测试环境;生产建议放行 3306 端口) systemctl stop firewalld && systemctl disable firewalld # 解释:SELinux 设为 permissive 或 disabled(生产建议配好策略而非直接关) setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config # 解释:创建 mysql 用户和组(MySQL 官方 RPM 会自动创建,二进制安装需手动) groupadd -r mysql useradd -r -g mysql -s /sbin/nologin mysql # 解释:资源限制(MySQL 需要大量文件句柄) cat > /etc/security/limits.d/mysql.conf << 'EOF' mysql soft nofile 65535 mysql hard nofile 65535 mysql soft nproc 65535 mysql hard nproc 65535 mysql soft stack 10240 mysql hard stack 32768 EOF # 解释:关闭透明大页(THP 会导致 MySQL 性能抖动) echo never > /sys/kernel/mm/transparent_hugepage/enabled # 永久生效:在 /etc/default/grub 的 GRUB_CMDLINE_LINUX 追加 transparent_hugepage=never # 然后执行 grub2-mkconfig -o /boot/grub2/grub.cfg # 解释:磁盘调度器(SSD 建议 none/mq-deadline) echo none > /sys/block/sdb/queue/scheduler

2.4 目录规划(OFA 风格)

目录用途类比 Oracle
/usr/local/mysql软件安装目录(二进制)ORACLE_HOME
/data/mysql数据目录 datadirORACLE_BASE/oradata
/data/mysql/binlogbinlog 目录归档日志目录
/data/mysql/redoredo log 目录redo 日志
/backup/mysql备份目录FRA
/etc/my.cnf配置文件spfile/pfile
mkdir -p /data/mysql /data/mysql/binlog /data/mysql/redo /backup/mysql chown -R mysql:mysql /data/mysql /backup/mysql chmod 750 /data/mysql

三、RPM 包安装(推荐生产方式)

图 4

3.1 添加 MySQL 官方 YUM 仓库

# 解释:下载 MySQL 8.0 官方 yum 仓库配置(RHEL/CentOS 8/9) # 官方仓库选择页面:https://dev.mysql.com/downloads/repo/yum/ dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm # RHEL/CentOS 7 用: # yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm # 解释:验证仓库已启用 dnf repolist enabled | grep mysql

3.2 安装 MySQL Server

# 解释:安装 mysql-community-server(会自动拉取 client、common、libs 等依赖包) dnf install -y mysql-community-server # 解释:查看安装版本 mysql --version # 输出示例:mysql Ver 8.0.xx for Linux on x86_64 (MySQL Community Server - GPL)

3.3 RPM 安装后的自动初始化

RPM 包首次启动systemctl start mysqld时会自动:

  1. 创建数据目录/var/lib/mysql
  2. 生成 SSL/RSA 证书
  3. 初始化数据字典
  4. 生成临时 root 密码(写入 error log)
# 解释:启动 MySQL 服务 systemctl start mysqld systemctl enable mysqld # 解释:查看临时 root 密码(8.0 安装后必须先改密码才能操作) grep 'temporary password' /var/log/mysqld.log # 输出示例:A temporary password is generated for root@localhost: xxxxxxxx
-- 解释:用临时密码登录后,必须先改密码(8.0 默认密码策略强) ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass_2026!'; -- 解释:验证密码策略(8.0 默认 MEDIUM:长度≥8、含数字/大小写/特殊字符) SHOW VARIABLES LIKE 'validate_password%';

5.7 差异:5.7 安装后 root 密码为空(--initialize-insecure),或临时密码在 error log;8.0 统一为临时密码机制,且默认认证插件变为caching_sha2_password。


四、二进制通用包安装(多版本并存首选)

图 5

4.1 下载与解压

# 解释:从 https://dev.mysql.com/downloads/mysql/ 下载 Generic Linux (x86, 64-bit), Compressed TAR Archive # 以 mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz 为例 cd /usr/local tar xJf /tmp/mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz # 解释:创建软链接方便升级切换 ln -s mysql-8.0.39-linux-glibc2.28-x86_64 mysql # 解释:属主改为 mysql chown -R mysql:mysql /usr/local/mysql-8.0.39-linux-glibc2.28-x86_64

4.2 依赖检查

# 解释:二进制包需要 libaio、ncurses 等依赖 dnf install -y libaio libaio-devel ncurses-compat-libs numactl-libs # RHEL/CentOS 8+ 还需要 libtirpc

4.3 初始化数据目录(关键步骤)

# 解释:mysqld --initialize 会创建数据目录并生成临时 root 密码 # --user=mysql 指定运行用户 # --datadir 指定数据目录(必须为空或不存在) # --basedir 指定软件目录 cd /usr/local/mysql bin/mysqld --initialize --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/data/mysql # 解释:如果不想生成临时密码(5.7 风格空密码),用 --initialize-insecure # 生产环境强烈建议用 --initialize(有临时密码) # 解释:查看临时密码 grep 'temporary password' /data/mysql/*.err # 或指定日志路径时查看 error log

4.4 配置 systemd 服务

# /etc/systemd/system/mysqld.service [Unit] Description=MySQL 8.0 Server After=network.target [Service] Type=simple User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE=65535 Restart=on-failure [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl start mysqld systemctl enable mysqld

五、源码编译安装(了解即可,生产极少用)

# 解释:源码编译需要 cmake、gcc、ncurses-devel # 仅在需要自定义编译选项(如 -DWITH_UBSAN=OFF、特定 CPU 架构优化)时使用 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/mysql \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci make -j$(nproc) make install

结论:源码编译耗时长(30~60 分钟)、升级维护成本高,生产环境除非有特殊裁剪需求,否则不推荐。


六、my.cnf 核心参数详解(官方:Server System Variables)

6.1 配置文件结构

# /etc/my.cnf(MySQL 8.0 官方示例配置文件) [mysqld] # ===== 基本 ===== user = mysql basedir = /usr/local/mysql datadir = /data/mysql port = 3306 socket = /data/mysql/mysql.sock pid-file = /data/mysql/mysql.pid # ===== 字符集(8.0 默认 utf8mb4)===== character-set-server = utf8mb4 collation-server = utf8mb4_0900_ai_ci # ===== 内存 ===== innodb_buffer_pool_size = 2G # 解释:Buffer Pool,建议物理内存 60~70% innodb_log_buffer_size = 64M # redo 缓冲 max_connections = 500 # 最大连接数 table_open_cache = 4096 table_definition_cache = 2048 # ===== InnoDB ===== default_storage_engine = InnoDB innodb_flush_log_at_trx_commit = 1 # 解释:1=每次事务 commit 刷 redo(最安全) innodb_flush_method = O_DIRECT # 解释:绕过 OS 缓存,直接 IO(生产推荐) innodb_file_per_table = ON # 解释:每表独立 .ibd 文件(8.0 默认 ON) innodb_redo_log_capacity = 2G # 解释:8.0.30+ 统一 redo 容量(替代 innodb_log_file_size) # ===== binlog ===== log_bin = /data/mysql/binlog/mysql-bin binlog_format = ROW # 解释:ROW 模式最安全 binlog_row_image = FULL expire_logs_days = 7 # 解释:binlog 保留 7 天(8.0 也可用 binlog_expire_logs_seconds) max_binlog_size = 1G # ===== 慢查询日志 ===== slow_query_log = ON slow_query_log_file = /data/mysql/slow.log long_query_time = 1 # 解释:超过 1 秒记录慢查询 log_queries_not_using_indexes = ON # ===== 日志 ===== log_error = /data/mysql/error.log log_timestamps = SYSTEM [client] socket = /data/mysql/mysql.sock default-character-set = utf8mb4

6.2 关键参数速查表

参数推荐值说明类比 Oracle
innodb_buffer_pool_size物理内存 60~70%InnoDB 数据页缓存DB Cache Size / SGA
innodb_flush_log_at_trx_commit1事务持久化保证REDO 同步写
sync_binlog1binlog 刷盘策略(1=最安全)归档同步
innodb_flush_methodO_DIRECT绕过 OS page cachedirect IO
max_connections500~2000最大并发连接sessions/processes
innodb_redo_log_capacity1~4Gredo 总容量redo log size
tmp_table_size / heap_table_size64M~256M临时表内存上限pga
slow_query_logON慢查询开关audit/trace

双 1 安全配置:innodb_flush_log_at_trx_commit=1+sync_binlog=1= 最高数据安全级别,生产必备(性能与安全的平衡点)。


七、初始化后必做配置

图 6

7.1 修改 root 密码与远程登录

-- 解释:8.0 默认 root 只允许 localhost 登录 ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_2026!'; -- 解释:创建远程管理用户(生产建议限制来源 IP) CREATE USER 'dba'@'192.168.10.%' IDENTIFIED BY 'Dba_2026!'; GRANT ALL PRIVILEGES ON *.* TO 'dba'@'192.168.10.%' WITH GRANT OPTION;

7.2 业务库与用户创建

-- 解释:创建业务库,指定字符集 CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; -- 解释:创建业务账号(最小权限原则) CREATE USER 'appuser'@'192.168.10.%' IDENTIFIED BY 'App_2026!'; GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'192.168.10.%'; FLUSH PRIVILEGES;

7.3 验证安装

# 解释:服务状态 systemctl status mysqld # 解释:端口监听 ss -tlnp | grep 3306 # 解释:登录验证 mysql -u root -p -e "SELECT VERSION();" mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';" mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
验证项期望结果
systemctl status mysqldactive (running)
ss -tlnp3306 端口 LISTEN
SELECT VERSION()8.0.xx
datadir/data/mysql
default_storage_engineInnoDB
character_set_serverutf8mb4

八、源码 vs 二进制 vs RPM 对比总结

维度RPM二进制 tar.gz源码编译
安装速度分钟级分钟级30~60 分钟
依赖处理自动手动手动
systemd 集成自动需手写 service需手写 service
路径灵活性固定 /var/lib/mysql完全自定义完全自定义
多版本并存困难容易(软链接切换)容易
升级方式dnf update替换目录+重启重新编译
生产推荐度★★★★★★★★★★★

九、踩坑记录(实测汇总)

#坑现象解决
1忘记取临时密码登录被拒,不知道密码grep 'temporary password' /var/log/mysqld.log
2密码策略太严改密码报 ERROR 1819密码含大小写+数字+特殊字符,长度≥8
3datadir 非空initialize 报错已存在文件清空 datadir 或换目录后重新 initialize
4目录属主错误启动报 Permission deniedchown -R mysql:mysql 数据目录
5端口被占启动报 Can't start server: Bind on TCP/IP port`ss -tlnp \grep 3306` 找占用进程
6缺 libaio二进制启动报错 error while loading shared librariesdnf install libaio
7THP 未关性能抖动、延迟毛刺grub 加 transparent_hugepage=never
8VMware 磁盘随快照回滚数据盘回滚后 binlog 位点错乱数据盘设为 Independent - Persistent
9时间不同步binlog 时间戳错乱、复制延迟安装 VMware Tools + 开启时间同步
10my.cnf 缩进错误启动报错 unknown variablemy.cnf 参数不缩进,顶格写
11max_connections 太小应用报 Too many connections按业务容量调整 + 应用侧连接池
125.7 升到 8.0 字符集中文乱码8.0 默认 utf8mb4,5.7 默认 latin1,迁移需统一

十、要点速记

  1. 三种安装方式:RPM(生产首选)、二进制(多版本并存)、源码(定制编译,极少用)。
  2. 8.0 初始化关键:mysqld --initialize生成临时密码,首次登录必须改密码。
  3. my.cnf 核心三件套:innodb_buffer_pool_size(内存)、innodb_flush_log_at_trx_commit=1(安全)、sync_binlog=1(安全)。
  4. VMware 注意:数据盘独立持久、关闭 THP、时间同步、内存预留。
  5. 5.7→8.0 差异:默认认证插件变为 caching_sha2_password、默认字符集变为 utf8mb4、数据字典统一管理。

十一、参考资料(官方正式文档)

主题官方链接
MySQL 8.0 Reference Manualhttps://dev.mysql.com/doc/refman/8.0/en/
Installing MySQL on Linux Using RPM Packageshttps://dev.mysql.com/doc/refman/8.0/en/linux-installation-rpm.html
Installing MySQL on Linux Using Generic Binarieshttps://dev.mysql.com/doc/refman/8.0/en/binary-installation.html
Initializing the Data Directoryhttps://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html
Server System Variables (my.cnf 参数)https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
MySQL 8.0 YUM Repositoryhttps://dev.mysql.com/downloads/repo/yum/
MySQL 8.0 Download (Generic Linux)https://dev.mysql.com/downloads/mysql/

本文章属于《MySQL 数据库全栈运维实战系列》基础与架构篇。欢迎收藏、交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询