数据库教程FGMT30‑Linux平台MySQL8.0/8.4安装配置与版本升级
## 前言
MySQL8.0与MySQL8.4 LTS是当前企业生产环境主流数据库版本,8.0为广泛使用的长期支持版本,MySQL8.4为新一代LTS版本,在InnoDB内核、IO模型、默认参数、认证插件层面存在大量变更。Linux是MySQL最主要的运行操作系统,二进制通用包、源码编译、RPM/YUM是三种主流部署方式,不同安装方式适用场景不同;同时跨大版本升级是DBA高频运维工作,升级操作失误会引发数据库启动失败、账号认证异常、业务SQL报错等严重故障。风哥教程本文搭建两套互相独立的实验环境:第一套在主机`fgedu‑net‑cn1`部署MySQL8.0;第二套在主机`fgedu‑net‑cn2`部署MySQL8.4,两套环境硬件规格均为64G内存,8颗CPU,互不依赖。风哥 itpux‑com
本套风哥教程面向MySQL DBA、运维工程师、数据库架构师;软件根目录统一使用`/fgedudb`,数据库实例名`fgedudb`,业务测试用户名`fgedu`;覆盖操作系统环境调优、二进制部署、源码编译部署、RPM包部署、生产规格my.cnf参数模板、实例初始化、systemd启停脚本、远程访问配置、版本升级、卸载清理全流程。风哥教程本文分为前言与大纲、核心理论知识、实战操作演练、风哥针对本文总结四大模块;实战提供大量可直接复制Shell、SQL脚本,读者可以在两套独立主机完整复现8.0、8.4全套部署与升级操作。网上搜索风哥教程可以学习全套数据库教程
### 内容大纲
1. MySQL8.0与MySQL8.4版本特性对比,两套实验环境硬件主机规划,三种安装方式适用场景说明
2. 核心理论:Linux操作系统数据库服务器内核、文件句柄、资源限制;MySQL目录结构解析;二进制包、源码编译、RPM包的区别;8.0到8.4版本关键变更、升级前置约束;生产配置文件核心参数原理(适配64G内存8CPU)
3. MySQL部署前置检查:依赖包、selinux、防火墙、磁盘规划、用户与权限规范
4. 实战1:`fgedu‑net‑cn1`主机 MySQL8.0 Linux二进制包完整部署,生产my.cnf、初始化、systemd脚本、远程访问、业务账号创建
5. 实战2:`fgedu‑net‑cn1`主机 MySQL8.0源码编译部署实操要点
6. 实战3:`fgedu‑net‑cn1`主机 MySQL8.0 YUM/RPM方式部署实操
7. 实战4:`fgedu‑net‑cn2`主机 MySQL8.4 Linux二进制包完整部署,适配8.4新版本内核参数、my.cnf模板
8. 实战5:`fgedu‑net‑cn2`主机 MySQL8.4源码编译部署实操要点
9. 实战6:`fgedu‑net‑cn2`主机 MySQL8.4 YUM/RPM方式部署实操
10. 实战7:MySQL8.0升级至MySQL8.4大版本升级完整实战,升级前检查、就地升级、逻辑备份迁移两种方案
11. MySQL实例基础管理:启停、登录、权限配置、卸载清理操作
12. 上线验收清单,部署与升级高频故障排查
## 一、核心理论知识
本章节为本套风哥教程理论基础,理解MySQL不同安装方式差异,掌握8.0与8.4版本内核、参数、认证插件变更点,理解Linux数据库服务器系统调优原理,规避部署、升级过程中业务故障风险。风哥教程 113257174
### 1.1 两套实验环境说明
>
> 两套环境完全独立,不互通,分别部署在不同主机。
– 环境A:主机`fgedu‑net‑cn1`,操作系统RHEL8,部署MySQL8.0.36,硬件64G内存、8CPU;软件根目录`/fgedudb/mysql80`,数据目录`/fgedudb/mysql80/data`。
– 环境B:主机`fgedu‑net‑cn2`,操作系统RHEL8,部署MySQL8.4.3 LTS,硬件64G内存、8CPU;软件根目录`/fgedudb/mysql84`,数据目录`/fgedudb/mysql84/data`。
### 1.2 MySQL三种主流安装方式对比
1. **二进制通用包(Generic Tarball)**:预编译好的tar.xz压缩包,不需要本地编译,部署速度快;目录完全自定义,生产环境最常用;缺点需要手动配置systemd服务、配置文件。
2. **源码编译安装**:下载完整MySQL源代码,本地cmake编译;可以自定义编译选项、裁剪组件;编译耗时高,适合深度定制场景;生产环境一般不优先选用。
3. **RPM/YUM官方包**:RPM包管理,自动生成系统服务,目录固定在系统默认路径;适合标准化批量部署;自定义软件、数据目录改动相对繁琐。
### 1.3 MySQL8.0与MySQL8.4关键版本差异
1. InnoDB大量默认参数变更:8.4`innodb_adaptive_hash_index`默认为OFF;`innodb_io_capacity`由200提升至10000;`innodb_log_buffer_size`由16M提升至64M;`innodb_flush_method`默认O_DIRECT;
2. 认证插件:MySQL8.4默认禁用`mysql_native_password`,默认使用`caching_sha2_password`,旧应用需要显式开启旧认证插件;
3. 复制语法变更:废弃`SHOW SLAVE STATUS`、`START SLAVE`,统一改为`SHOW REPLICA STATUS`、`START REPLICA`;
4. 升级路径:**不支持MySQL5.7直接升级到8.4,必须先升级到8.0,再升级8.4**;支持8.0.22及以上版本直接就地升级8.4;
5. 部分系统变量、配置选项被移除,升级前必须检查my.cnf,删除已经废弃参数,否则实例启动失败。网上搜索风哥教程可以学习全套数据库教程
### 1.4 Linux数据库服务器系统前置理论(适配64G内存8CPU)
1. **swappiness**:数据库服务器建议设置为10,尽量避免使用swap交换分区,防止内存交换引发性能抖动;
2. **文件句柄与进程数**:MySQL高并发会消耗大量文件句柄,nofile建议65535以上,nproc进程数放大;
3. **内核参数max_map_count**,建议262144,满足InnoDB内存映射需求;
4. SELinux:生产部署两种方案,永久关闭或者配置完整selinux上下文;测试环境一般直接关闭;
5. 防火墙:数据库端口3306需要按需放行,禁止对公网直接暴露数据库端口;
6. 文件系统:数据目录推荐XFS文件系统,挂载参数增加`noatime,nodiratime`,减少元数据IO开销。
### 1.5 MySQL目录结构与核心配置文件理论
– base_dir:MySQL软件根目录,存放bin、lib、include等程序文件;
– datadir:数据目录,存放ibd数据文件、redo undo日志、系统库mysql;
– my.cnf:主配置文件,分为[mysqld]服务段、[mysqld_safe]、[client]客户端段;>
> 重点参数(64G内存8CPU生产模板):
> `innodb_buffer_pool_size`:InnoDB缓冲池,物理内存50%‑60%,64G机器设置32G;
> `innodb_log_file_size`:redo日志单文件大小,生产推荐4G;
> `max_connections`最大连接数,生产设置2000;
> `lower_case_table_names=1`表名大小写不敏感,初始化之后不可修改。
### 1.6 MySQL升级两种方案理论
1. **就地升级(In‑Place Upgrade)**:保留原有数据目录,替换二进制软件包,执行`mysql_upgrade`(8.4使用`mysqlcheck‑‑upgrade`);停机时间短,风险较高,升级前必须完整备份全库。
2. **逻辑迁移升级**:使用mysqldump全库导出,新版本实例重新导入;停机时间取决于数据量;升级风险最低,大数据量耗时较长。
>
> 升级硬性前置:升级前执行`mysqlcheck‑‑check‑‑all‑databases`做全库一致性检查;全库备份;配置文件清理废弃参数;业务应用测试新认证插件兼容性。风哥数据库教程 itpux‑com
### 1.7 部署、升级高频风险点
1. `lower_case_table_names`只能初始化实例时设置,实例创建完成修改直接启动失败,数据损坏风险;
2. 8.4 my.cnf残留已废弃参数,数据库无法启动;
3. 升级前没有备份,升级故障无法回退;
4. mysql_native_password插件在8.4默认关闭,旧应用账号登录失败;
5. 操作系统文件句柄、swap配置不合理,高并发场景数据库OOM、hang住。
上51CTO搜索风哥可以学习全套数据库教程
## 二、实战操作演练
>
> 环境说明:
> 主机`fgedu‑net‑cn1`部署MySQL8.0,主机`fgedu‑net‑cn2`部署MySQL8.4;操作系统RHEL8;硬件64G内存8CPU;软件根目录`/fgedudb`;操作系统普通用户mysql;数据库端口3306;业务测试库`fgedudb`,业务用户`fgedu`。
> 通用前置操作,两台主机都执行:
#### 2.0.1 操作系统依赖包安装
“`
yum install -y libaio libaio‑devel ncurses‑compat openssl‑devel cmake gcc gcc‑c++ bison perl‑Devel‑CheckLib
“`
#### 2.0.2 操作系统内核参数调优
“`
cat >> /etc/sysctl.conf <<EOF
vm.swappiness=10
vm.max_map_count=262144
net.core.somaxconn=65535
net.ipv4.tcp_fin_timeout=30
EOF
sysctl -p
“`
#### 2.0.3 limits.conf资源限制
“`
cat >> /etc/security/limits.conf <<EOF
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 40960
mysql hard nproc 40960
EOF
“`
#### 2.0.4 selinux与防火墙处理(测试环境)
“`
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/’ /etc/selinux/config
firewall‑cmd –permanent –add‑port=3306/tcp
firewall‑cmd –reload
“`
#### 2.0.5 创建mysql操作系统用户
“`
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql
“`
# 第一部分:实战环境A fgedu‑net‑cn1 MySQL8.0部署
## 2.1 MySQL8.0二进制包完整部署
### 2.1.1 创建目录,解压二进制包
“`
mkdir -p /fgedudb/mysql80
mkdir -p /fgedudb/mysql80/data
mkdir -p /fgedudb/mysql80/log
chown -R mysql:mysql /fgedudb/mysql80
#上传mysql‑8.0.36‑linux‑glibc2.28‑x86_64.tar.xz至/fgedudb
cd /fgedudb
tar -Jxvf mysql‑8.0.36‑linux‑glibc2.28‑x86_64.tar.xz -C /fgedudb/mysql80 –strip‑components=1
“`
### 2.1.2 编写MySQL8.0生产规格my.cnf配置文件,64G内存8CPU
`/fgedudb/mysql80/my.cnf`
“`
[mysqld]
basedir=/fgedudb/mysql80
datadir=/fgedudb/mysql80/data
socket=/fgedudb/mysql80/mysql.sock
pid‑file=/fgedudb/mysql80/mysql.pid
port=3306
user=mysql
lower_case_table_names=1
default‑storage‑engine=InnoDB
innodb_buffer_pool_size=32G
innodb_log_file_size=4G
innodb_log_buffer_size=16M
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
max_connections=2000
open_files_limit=65535
log_error=/fgedudb/mysql80/log/mysqld.err
slow_query_log=ON
slow_query_log_file=/fgedudb/mysql80/log/slow.log
long_query_time=2
binlog_format=ROW
server‑id=1
log_bin=/fgedudb/mysql80/log/mysql‑bin
[mysqld_safe]
log‑error=/fgedudb/mysql80/log/mysqld.err
[client]
socket=/fgedudb/mysql80/mysql.sock
port=3306
“`
设置配置文件权限
“`
chmod 644 /fgedudb/mysql80/my.cnf
chown mysql:mysql /fgedudb/mysql80/my.cnf
“`
### 2.1.3 初始化MySQL8.0实例
“`
cd /fgedudb/mysql80
bin/mysqld –defaults‑file=/fgedudb/mysql80/my.cnf –initialize –user=mysql
#查看初始化生成的临时root密码
grep ‘temporary password’ /fgedudb/mysql80/log/mysqld.err
“`
### 2.1.4 配置systemd system服务文件
`/etc/systemd/system/mysqld80.service`
“`
[Unit]
Description=MySQL8.0 Database Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/fgedudb/mysql80/bin/mysqld_safe –defaults‑file=/fgedudb/mysql80/my.cnf
ExecStop=/fgedudb/mysql80/bin/mysqladmin -u root -S /fgedudb/mysql80/mysql.sock shutdown
Restart=on‑failure
[Install]
WantedBy=multi‑user.target
“`
加载systemd配置,启动数据库
“`
systemctl daemon‑reload
systemctl start mysqld80
systemctl enable mysqld80
systemctl status mysqld80
“`
### 2.1.5 登录数据库,修改root密码,创建业务用户fgedu
“`
cd /fgedudb/mysql80
bin/mysql -u root -S /fgedudb/mysql80/mysql.sock
“`
“`
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘fgedudb’;
create database fgedudb default character set utf8mb4 collate utf8mb4_unicode_ci;
create user ‘fgedu’@’%’ identified by ‘fgedudb’;
grant all privileges on fgedudb.* to ‘fgedu’@’%’;
flush privileges;
exit;
“`
### 2.1.6 远程连接测试
“`
#本机客户端测试
bin/mysql -u fgedu -p’fgedudb’ -h127.0.0.1 -P3306
“`
## 2.2 fgedu‑net‑cn1 MySQL8.0源码编译部署要点
>
> 源码编译适合需要自定义编译选项场景,编译依赖cmake。
“`
mkdir -p /fgedudb/mysql80_src/build
cd /fgedudb/mysql80_src/build
cmake ../mysql‑8.0.36‑source \
‑DCMAKE_INSTALL_PREFIX=/fgedudb/mysql80 \
‑DMYSQL_DATADIR=/fgedudb/mysql80/data \
‑DWITH_INNOBASE_STORAGE_ENGINE=1 \
‑DWITH_SSL=system \
‑DMYSQL_UNIX_ADDR=/fgedudb/mysql80/mysql.sock \
‑DDEFAULT_CHARSET=utf8mb4 \
‑DDEFAULT_COLLATION=utf8mb4_unicode_ci
make -j8
make install
“`
编译完成后,后续初始化、my.cnf、systemd服务流程与二进制包完全一致。网上搜索风哥教程可以学习全套数据库教程
## 2.3 fgedu‑net‑cn1 MySQL8.0 YUM/RPM部署要点
>
> YUM方式目录为系统默认路径`/var/lib/mysql`,如需修改datadir要迁移数据目录。
“`
rpm -Uvh [https://repo.mysql.com/mysql80](https://repo.mysql.com/mysql80)‑community‑release‑el8‑1.noarch.rpm
yum install -y mysql‑community‑server mysql‑community‑client
systemctl start mysqld
systemctl enable mysqld
#获取临时密码
grep ‘temporary password’ /var/log/mysqld.log
“`
# 第二部分:实战环境B fgedu‑net‑cn2 MySQL8.4部署
## 2.4 MySQL8.4二进制包完整部署
主机`fgedu‑net‑cn2`,硬件64G内存8CPU
### 2.4.1 创建目录,解压8.4二进制包
“`
mkdir -p /fgedudb/mysql84
mkdir -p /fgedudb/mysql84/data
mkdir -p /fgedudb/mysql84/log
chown -R mysql:mysql /fgedudb/mysql84
cd /fgedudb
tar -Jxvf mysql‑8.4.3‑linux‑glibc2.28‑x86_64.tar.xz -C /fgedudb/mysql84 –strip‑components=1
“`
### 2.4.2 MySQL8.4生产my.cnf配置文件,适配8.4默认参数变化,64G内存8CPU
`/fgedudb/mysql84/my.cnf`
“`
[mysqld]
basedir=/fgedudb/mysql84
datadir=/fgedudb/mysql84/data
socket=/fgedudb/mysql84/mysql.sock
pid‑file=/fgedudb/mysql84/mysql.pid
port=3306
user=mysql
lower_case_table_names=1
default‑storage‑engine=InnoDB
#8.4开启旧密码插件兼容老业务,按需开启
mysql_native_password=ON
innodb_buffer_pool_size=32G
innodb_log_file_size=4G
max_connections=2000
open_files_limit=65535
log_error=/fgedudb/mysql84/log/mysqld.err
slow_query_log=ON
slow_query_log_file=/fgedudb/mysql84/log/slow.log
long_query_time=2
binlog_format=ROW
server‑id=1
log_bin=/fgedudb/mysql84/log/mysql‑bin
[mysqld_safe]
log‑error=/fgedudb/mysql84/log/mysqld.err
[client]
socket=/fgedudb/mysql84/mysql.sock
port=3306
“`
>
> 注意:8.4大量InnoDB参数自动自适应硬件,不需要显式写在配置文件;删除8.0已经废弃参数。
“`
chmod 644 /fgedudb/mysql84/my.cnf
chown mysql:mysql /fgedudb/mysql84/my.cnf
“`
### 2.4.3 MySQL8.4实例初始化
“`
cd /fgedudb/mysql84
bin/mysqld –defaults‑file=/fgedudb/mysql84/my.cnf –initialize –user=mysql
grep ‘temporary password’ /fgedudb/mysql84/log/mysqld.err
“`
### 2.4.4 systemd服务配置 /etc/systemd/system/mysqld84.service
“`
[Unit]
Description=MySQL8.4 Database Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/fgedudb/mysql84/bin/mysqld_safe –defaults‑file=/fgedudb/mysql84/my.cnf
ExecStop=/fgedudb/mysql84/bin/mysqladmin -u root -S /fgedudb/mysql84/mysql.sock shutdown
Restart=on‑failure
[Install]
WantedBy=multi‑user.target
“`
“`
systemctl daemon‑reload
systemctl start mysqld84
systemctl enable mysqld84
systemctl status mysqld84
“`
### 2.4.5 登录修改密码,创建业务账号
“`
cd /fgedudb/mysql84
bin/mysql -u root -S /fgedudb/mysql84/mysql.sock
“`
“`
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘fgedudb’;
create database fgedudb default character set utf8mb4 collate utf8mb4_unicode_ci;
create user ‘fgedu’@’%’ identified by ‘fgedudb’;
grant all privileges on fgedudb.* to ‘fgedu’@’%’;
flush privileges;
exit;
“`
风哥数据库教程 itpux‑com
## 2.5 fgedu‑net‑cn2 MySQL8.4源码编译部署要点
“`
mkdir -p /fgedudb/mysql84_src/build
cd /fgedudb/mysql84_src/build
cmake ../mysql‑8.4.3‑source \
‑DCMAKE_INSTALL_PREFIX=/fgedudb/mysql84 \
‑DMYSQL_DATADIR=/fgedudb/mysql84/data \
‑DWITH_INNOBASE_STORAGE_ENGINE=1 \
‑DWITH_SSL=system \
‑DMYSQL_UNIX_ADDR=/fgedudb/mysql84/mysql.sock \
‑DDEFAULT_CHARSET=utf8mb4 \
‑DDEFAULT_COLLATION=utf8mb4_unicode_ci
make -j8
make install
“`
编译完成,初始化、服务配置流程同二进制包。
## 2.6 fgedu‑net‑cn2 MySQL8.4 YUM/RPM部署要点
“`
rpm -Uvh [https://repo.mysql.com/mysql](https://repo.mysql.com/mysql)‑84‑lts‑community‑release‑el8‑1.noarch.rpm
yum install -y mysql‑community‑server mysql‑community‑client
systemctl start mysqld
systemctl enable mysqld
grep ‘temporary password’ /var/log/mysqld.log
“`
## 2.7 实战:MySQL8.0升级MySQL8.4两种方案
>
> 升级测试环境:主机`fgedu‑net‑cn1`原有MySQL8.0.36实例,升级至8.4.3。
### 升级前置检查(必须执行)
1. **完整全库备份**,mysqldump逻辑全量备份;
2. 执行库表一致性检查
“`
/fgedudb/mysql80/bin/mysqlcheck –defaults‑file=/fgedudb/mysql80/my.cnf –check –all‑databases
“`
3. 核对my.cnf配置,删除8.4已经废弃的参数;
4. 确认版本满足升级条件:8.0版本≥8.0.22;
5. 业务停机,停止所有应用访问数据库。
#### 方案A:就地升级(In‑Place,停机时间较短)
>
> ⚠生产升级务必先测试环境完整演练。
“`
#1.停止旧8.0实例
systemctl stop mysqld80
#2.备份原有8.0软件目录
mv /fgedudb/mysql80 /fgedudb/mysql80_bak
#3.解压8.4二进制包到原路径
tar -Jxvf mysql‑8.4.3‑linux‑glibc2.28‑x86_64.tar.xz -C /fgedudb –strip‑components=1
mv /fgedudb/mysql‑8.4.3‑linux‑glibc2.28‑x86_64 /fgedudb/mysql80
chown -R mysql:mysql /fgedudb/mysql80
#4.修改my.cnf,适配8.4,增加mysql_native_password=ON按需开启,删除废弃参数
#5.启动实例
systemctl start mysqld80
#6.执行升级字典检查,8.4不再使用mysql_upgrade二进制,内置在服务启动
/fgedudb/mysql80/bin/mysqlcheck –defaults‑file=/fgedudb/mysql80/my.cnf –upgrade –all‑databases
#7.登录验证版本、账号、业务表
mysql -uroot -p -S /fgedudb/mysql80/mysql.sock
select version();
“`
#### 方案B:逻辑迁移升级(风险最低,推荐生产)
1. 原MySQL8.0实例全库mysqldump导出;
2. 全新部署一套独立MySQL8.4实例;
3. 将dump文件导入8.4实例;
4. 业务切换连接指向新8.4实例;
5. 旧8.0实例保留一段时间作为回退备份。
“`
#8.0端导出
/fgedudb/mysql80/bin/mysqldump -u root -p –all‑databases –routines –triggers –events > /fgedudb/all_db_dump.sql
#拷贝到8.4主机,导入
/fgedudb/mysql84/bin/mysql -u root -p < /fgedudb/all_db_dump.sql
“`
网上搜索风哥教程可以学习全套数据库教程
## 2.8 MySQL基础管理与卸载清理
### 2.8.1 启停命令(二进制systemd)
“`
systemctl start mysqld80
systemctl stop mysqld80
systemctl restart mysqld80
systemctl status mysqld80
“`
### 2.8.2 卸载二进制部署MySQL
“`
systemctl stop mysqld80
systemctl disable mysqld80
rm -f /etc/systemd/system/mysqld80.service
systemctl daemon‑reload
#备份数据目录之后删除软件目录
mv /fgedudb/mysql80/data /fgedudb/mysql80_data_bak
rm -rf /fgedudb/mysql80
“`
### 2.8.3 RPM包卸载
“`
systemctl stop mysqld
yum remove mysql‑community‑*
rm -rf /var/lib/mysql
“`
## 2.9 上线验收检查清单
1. 操作系统:内核swappiness、max_map_count、limits句柄进程数配置完成;selinux/firewall按业务需求配置;磁盘XFS挂载noatime;
2. MySQL实例:实例正常启动;error日志无报错;内存参数适配64G硬件;`lower_case_table_names`符合业务需求;
3. 账号权限:root本地账号安全加固;业务账号`fgedu`权限最小化;远程连接可正常访问;
4. 功能验证:建库建表、DML增删改、存储过程、触发器验证;
5. 升级后验收:版本号确认;全库表检查无损坏;原有业务账号可正常登录;旧业务应用兼容认证插件;
6. 备份策略:确认全库备份脚本已经配置,升级场景确认回退备份完整。
## 2.10 高频故障排查
1. 实例启动失败:查看error日志`log_error`路径;my.cnf参数错误、8.4包含废弃参数、目录权限mysql用户不匹配;
2. 初始化失败:磁盘空间不足、目录权限不对;
3. 8.4旧应用账号登录失败:`mysql_native_password`默认关闭,my.cnf添加`mysql_native_password=ON`重启实例;
4. 升级启动报错:就地升级没有清理废弃参数;数据文件损坏,需要回退备份;
5. Too many open files:操作系统limits nofile配置过小;
6. 表名大小写异常:初始化之后修改`lower_case_table_names`,直接损坏数据,需要重建实例导入备份。
## 三、风哥针对本文总结
本套风哥教程完整讲解MySQL8.0、MySQL8.4 LTS两套独立环境部署,分别使用二进制包、源码编译、YUM‑RPM三种安装方式;覆盖Linux数据库服务器系统内核调优、64G内存8CPU规格生产my.cnf配置模板、实例初始化、systemd启停服务、账号权限配置;同时完成8.0升级至8.4的就地升级、逻辑迁移升级两套实操方案;包含实例日常管理、卸载清理、上线验收清单、高频故障排查。
1. MySQL8.0与MySQL8.4 LTS存在大量InnoDB内核默认参数、认证插件、废弃系统变量差异;**禁止5.7直接升级8.4,必须先升级8.0再升级8.4**;升级前务必备份全库,并且检查my.cnf配置,删除已经废弃参数,否则实例启动失败。8.4默认关闭mysql_native_password,如果兼容老业务需要在配置文件显式开启。
2. 二进制通用tar包生产使用最为广泛,目录可以完全自定义;源码编译适合深度定制裁剪组件,编译耗时高;YUM/RPM包部署简单,但目录为系统默认路径。`lower_case_table_names`仅实例初始化阶段生效,实例运行后修改会造成数据损坏。
3. Linux数据库服务器部署必须优化swappiness、max_map_count、nofile/nproc资源限制;磁盘优先XFS文件系统,挂载参数`noatime,nodiratime`,减少元数据IO开销;生产不建议直接完全关闭SELinux,测试环境可关闭简化部署。
4. MySQL升级分为就地升级、逻辑迁移升级;就地升级停机时间短风险高,**生产环境优先逻辑迁移升级方案**,新实例导入逻辑备份,业务切换,旧实例保留做回退;升级前执行mysqlcheck做全库表一致性检查。
5. 64G内存8CPU硬件规格,InnoDB缓冲池设置物理内存50%‑60%(32G),redo日志单文件4G,max_connections设置2000;8.4很多InnoDB参数自动适配硬件,不需要在my.cnf显式书写大量参数。
6. 部署完成必须查看error错误日志确认实例无异常;上线验收需要验证账号、DML、存储过程触发器全部功能;升级场景要重点验证旧应用账号认证兼容性。
7. 二进制部署卸载前务必备份data数据目录;RPM卸载注意保护业务数据目录,防止误删除业务数据。
全部Shell、SQL脚本,建议读者在`fgedu‑net‑cn1`、`fgedu‑net‑cn2`两套独立主机完整复现部署与升级流程,再落地企业MySQL生产部署、版本升级真实项目。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
