1. 首页 > MySQL教程 > 正文

数据库教程FGMT31‑Linux平台MySQL9.7安装配置与版本升级

数据库教程FGMT31‑Linux平台MySQL9.7安装配置与版本升级
## 前言
MySQL9.7属于LTS长期支持版本,在InnoDB存储引擎、原子DDL、性能模式、复制框架、认证体系等方面做了大量重构与增强,是面向下一代企业业务的开源关系型数据库,大量互联网、政企、交易类系统逐步开展向该版本迁移工作。风哥教程本文围绕Linux操作系统,完整覆盖MySQL9.7项目落地全流程,包含业务项目环境评估、操作系统底层预调优、软件介质获取、源码编译部署、二进制包部署、YUM与RPM部署、生产规格参数配置、实例初始化、systemd服务管理、远程访问授权、SSL/TLS安全传输、版本升级方案实战、日常运维命令、故障排查、实例完整卸载等完整技术链路。

风哥教程本文硬件基准环境为两台主机`fgedu‑net‑cn1`、`fgedu‑net‑cn2`,硬件配置统一为8CPU、64GB物理内存,存储介质采用SSD;全部文件路径统一使用`/fgedudb`;数据库实例名、业务数据库名、业务账号统一为`fgedudb`、`fgedudb`、`fgedu`;所有my.cnf参数基于64G内存8CPU硬件规格调优,面向OLTP生产业务负载。

风哥教程本文面向DBA、运维工程师、云计算工程师、数据库架构师、大数据工程师,学习完成后,能够独立完成MySQL9.7单机实例部署、基础运维,并且掌握官方支持的升级方案,具备存量MySQL版本迁移至MySQL9.7的实操能力。

### 本文内容大纲
1. Linux平台MySQL9.7项目业务环境介绍
2. MySQL9.7操作系统底层运行环境准备
3. MySQL9.7介质下载与版本选型说明
4. Linux平台源码编译方式部署MySQL9.7实例
5. Linux平台二进制包方式部署MySQL9.7实例
6. Linux平台YUM、RPM包方式部署MySQL9.7实例
7. MySQL9.7生产标准参数文件配置(64G内存8CPU)
8. MySQL9.7实例初始化、systemd启停管理
9. MySQL9.7安装完成后测试与远程账号授权
10. MySQL9.7 SSL/TLS加密连接配置
11. MySQL版本升级理论、升级约束与升级前置检查
12. MySQL8.4升级MySQL9.7原地升级实战
13. MySQL逻辑迁移升级实战方案
14. MySQL9.7基础管理命令与常见故障排查
15. Linux环境MySQL9.7完整卸载操作
16. 风哥针对本文总结

## 一、Linux平台MySQL9.7项目业务环境介绍
MySQL9.7作为新一代LTS长期支持版本,对比MySQL8.4,在数据字典、原子DDL、不可见主键、复制框架、认证插件、性能诊断组件做了大量变更,同时废弃移除部分历史兼容特性,DBA在项目落地前必须充分评估业务系统适配情况,风哥梳理企业中四类典型落地场景。

第一类场景,全新建设的OLTP业务系统。新建业务没有历史版本兼容包袱,可以直接上线MySQL9.7单机架构,后期扩展主从复制、MGR高可用,主机`fgedu‑net‑cn1`承担业务读写,`fgedu‑net‑cn2`承担从库备份、读分担。该场景优先二进制包部署,参数完全自主可控,适合DBA深度管控数据库目录、日志、权限。

第二类场景,存量LTS版本迁移升级项目。官方支持的直接原地升级路径仅为MySQL8.4 LTS升级至MySQL9.7 LTS,不允许跳过LTS版本直接升级;对于MySQL5.7存量业务,不支持直接原地升级,只能分步升级或者采用逻辑导出导入迁移。该场景分为测试验证、预演、业务停机窗口执行升级、业务校验、回滚预案完整流程,升级前必须完成全量备份。

第三类场景,政企、信创合规场景。部分业务需要裁剪数据库组件,关闭不必要的插件,定制编译选项,此时适合源码编译安装MySQL9.7;源码编译可以关闭不需要存储引擎、审计组件,适配安全基线要求,但编译耗时较长,后续版本迭代维护成本偏高。

第四类场景,标准化测试、开发环境。开发测试服务器追求快速部署,不希望投入过多精力维护目录结构,优先选择YUM、RPM包方式部署,包管理器自动处理依赖,快速拉起多套测试实例。

> 风哥 itpux‑com

需要重点关注MySQL9.7的重要变更:`mysql_native_password`认证插件已经被移除,所有业务账号必须使用`caching_sha2_password`认证插件,老旧客户端驱动如果不支持该插件,连接数据库会直接报错;新增自动生成不可见主键GIPK能力;原子DDL覆盖更多操作;部分旧版系统变量被删除,旧版本my.cnf直接复用会造成实例启动失败。不同部署方式没有绝对优劣,生产环境优先二进制包;标准化测试环境优先YUM/RPM;特殊安全裁剪需求才选择源码编译。掌握版本之间的差异、废弃参数、认证体系变化,是部署与升级MySQL9.7的前置基础。

## 二、MySQL9.7操作系统底层运行环境准备
MySQL9.7对操作系统基础环境、系统依赖包、内核参数、资源限制有严格要求,如果操作系统配置缺失,会出现实例启动失败、性能抖动、文件句柄耗尽、OOM内存溢出等故障,本章节全部操作执行于root账号,演示主机`fgedu‑net‑cn1`。

### 2.1 操作系统安全组件配置
测试环境为简化操作关闭SELinux与防火墙;生产环境禁止直接关闭防火墙,应当精细化放行数据库端口,SELinux配置对应的策略规则。
“`bash
#临时关闭SELinux
setenforce 0
#永久关闭SELinux
sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
#防火墙操作,测试环境
systemctl stop firewalld
systemctl disable firewalld
“`

### 2.2 安装操作系统依赖软件包
MySQL9.7运行与编译需要`libaio`、`numactl`、`openssl`、`cmake`、`ncurses‑devel`等基础组件,CentOS8、RHEL8环境执行下面命令安装依赖:
“`bash
yum install -y libaio libaio-devel numactl perl net-tools wget cmake ncurses-devel bison openssl-devel libtirpc-devel
“`

### 2.3 创建操作系统mysql运行账号
数据库进程禁止使用root账号运行,创建专用系统账号,不允许登录操作系统shell。
“`bash
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
id mysql
“`

> 风哥教程 113257174

### 2.4 内核参数调优,适配64G内存主机
编辑`vim /etc/sysctl.conf`写入内核参数,针对数据库业务做内存、虚拟内存、文件句柄、网络调优:
“`ini
vm.swappiness = 5
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 655350
net.core.somaxconn = 4096
“`
参数配置完成执行生效:
“`bash
sysctl -p
“`
参数说明:`vm.swappiness=5`尽量避免操作系统将MySQL内存置换到swap分区,防止数据库性能剧烈抖动;`fs.file‑max`设置系统全局最大打开文件句柄数;`net.core.somaxconn`优化TCP连接队列,应对高并发业务连接。

### 2.5 用户资源限制配置
修改`/etc/security/limits.conf`,在文件末尾追加进程、文件句柄软硬限制:
“`ini
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535
root soft nofile 65535
root hard nofile 65535
“`
修改systemd全局资源配置文件`/etc/systemd/system.conf`:
“`ini
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
“`
重载systemd配置:
“`bash
systemctl daemon-reload
“`

### 2.6 关闭透明大页THP
透明大页会造成InnoDB内存分配不稳定,数据库服务器必须关闭,执行下面两条命令临时关闭:
“`bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
“`
将两行写入`/etc/rc.local`,实现操作系统开机自动关闭透明大页。

### 2.7 创建完整目录结构,统一路径/fgedudb
风哥教程本文全部目录统一放置于`/fgedudb`,区分软件目录、数据目录、二进制日志目录、慢日志目录、临时文件目录,目录权限归属操作系统mysql用户。
“`bash
mkdir -p /fgedudb/mysql‑soft
mkdir -p /fgedudb/fgedudb‑data
mkdir -p /fgedudb/fgedudb‑log/binlog
mkdir -p /fgedudb/fgedudb‑log/slowlog
mkdir -p /fgedudb/fgedudb‑tmp
chown -R mysql:mysql /fgedudb
chmod 750 -R /fgedudb
ls -ld /fgedudb/*
“`

> 网上搜索风哥教程可以学习全套数据库教程

目录规划说明:`/fgedudb/mysql‑soft`存放软件介质;`/fgedudb/fgedudb‑data`存放实例全部数据字典与InnoDB数据文件;binlog二进制日志、慢查询日志单独存放,和数据目录物理隔离;`/fgedudb/fgedudb‑tmp`存放数据库运行时临时文件;目录权限设置750,阻止普通操作系统用户读取数据库内部文件,提升数据安全。

## 三、MySQL9.7介质下载与版本选型说明
MySQL9.7社区版介质分为通用Linux二进制tar包、源码压缩包、YUM仓库repo包、全套RPM离线包四类。生产环境必须选择正式GA稳定版本,不使用开发测试版本、beta预览版本。下载介质优先访问MySQL官方归档站点,下载完成校验MD5哈希值,确认介质完整、未被篡改。

### 3.1 二进制包下载示例
“`bash
cd /fgedudb/mysql‑soft
wget [https://downloads.mysql.com/archives/get/p/23/file/mysql](https://downloads.mysql.com/archives/get/p/23/file/mysql)‑9.7.0‑linux‑glibc2.28‑x86_64.tar.gz
“`

### 3.2 源码包下载示例
“`bash
wget [https://downloads.mysql.com/archives/get/p/23/file/mysql](https://downloads.mysql.com/archives/get/p/23/file/mysql)‑9.7.0.tar.gz
“`

### 3.3 YUM仓库配置包下载
“`bash
wget [https://dev.mysql.com/get/mysql97](https://dev.mysql.com/get/mysql97)‑community‑release‑el8‑1.noarch.rpm
“`

版本选型关键要点:
1. MySQL9.7只支持RHEL8、Oracle Linux8及以上操作系统,CentOS7已经不在官方支持列表,需要高版本glibc运行环境;
2. 二进制包选择`glibc2.28`编译版本,适配主流企业Linux发行版;
3. 升级场景中,必须确认源版本是官方支持升级路径,8.4 LTS可以原地升级9.7 LTS;MySQL5.7不能直接原地升级9.7,需要分步升级或者逻辑迁移;
4. 内网离线环境优先下载全套RPM包,外网环境优先YUM仓库方式。

> 风哥数据库教程 itpux‑com

## 四、Linux平台源码编译方式部署MySQL9.7实例
源码编译适合安全合规、需要裁剪数据库组件的场景,通过cmake指定编译参数,关闭不需要存储引擎、组件;编译过程消耗CPU、内存资源,8核主机编译耗时约20‑40分钟,生产环境无特殊需求不推荐使用源码部署。本章节主机`fgedu‑net‑cn1`,实例名称`fgedudb`。

### 4.1 解压源码包
“`bash
cd /fgedudb/mysql‑soft
tar -zxvf mysql‑9.7.0.tar.gz
cd mysql‑9.7.0
“`

### 4.2 cmake编译参数配置
“`bash
cmake \
‑DCMAKE_INSTALL_PREFIX=/fgedudb/mysql‑soft/mysql‑src \
‑DMYSQL_DATADIR=/fgedudb/fgedudb‑data \
‑DSYSCONFDIR=/etc \
‑DWITH_INNOBASE_STORAGE_ENGINE=1 \
‑DWITH_MYISAM_STORAGE_ENGINE=1 \
‑DWITH_PARTITION_STORAGE_ENGINE=1 \
‑DWITH_FEDERATED_STORAGE_ENGINE=0 \
‑DWITH_BLACKHOLE_STORAGE_ENGINE=0 \
‑DWITH_SSL=system \
‑DWITH_ZLIB=system \
‑DENABLED_LOCAL_INFILE=1 \
‑DMYSQL_UNIX_ADDR=/fgedudb/fgedudb‑data/mysql.sock \
‑DDEFAULT_CHARSET=utf8mb4 \
‑DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
‑DMYSQL_TCP_PORT=3306 \
‑DWITH_COMPRESSION=ON
“`
编译参数说明:关闭Federated、Blackhole不常用存储引擎,开启InnoDB、MyISAM、分区引擎;使用系统OpenSSL库;默认字符集`utf8mb4`,排序规则采用`utf8mb4_0900_ai_ci`,为MySQL9.x推荐排序规则。

### 4.3 编译与安装
“`bash
make -j8
make install
“`
`‑j8`代表调用8颗CPU核心并行编译,编译完成之后,my.cnf配置、实例初始化、systemd服务配置步骤,和二进制包部署流程完全一致,参考本文第五章。源码编译完成的程序安装目录为`/fgedudb/mysql‑soft/mysql‑src`。

> 上51CTO搜索风哥可以学习全套数据库教程

## 五、Linux平台二进制包方式部署MySQL9.7实例
二进制包部署是企业生产环境最主流部署方案,无需编译,解压后直接配置初始化,目录、参数全部自主可控,本章节演示主机`fgedu‑net‑cn1`,实例`fgedudb`。

### 5.1 解压二进制包,创建软链接
“`bash
cd /fgedudb/mysql‑soft
tar -zxvf mysql‑9.7.0‑linux‑glibc2.28‑x86_64.tar.gz
ln -s mysql‑9.7.0‑linux‑glibc2.28‑x86_64 /fgedudb/mysql‑soft/mysql
ls -l /fgedudb/mysql‑soft
“`

### 5.2 编写生产规格my‑fgedudb.cnf配置文件(64G内存8CPU)
创建配置文件`/etc/my‑fgedudb.cnf`,适配64GB内存8CPU OLTP业务,剔除MySQL9.7已经废弃的系统变量。
“`ini
[mysqld]
user=mysql
port=3306
socket=/fgedudb/fgedudb‑data/mysql.sock
pid‑file=/fgedudb/fgedudb‑data/fgedudb.pid
basedir=/fgedudb/mysql‑soft/mysql
datadir=/fgedudb/fgedudb‑data
tmpdir=/fgedudb/fgedudb‑tmp

#内存调优 64G内存8CPU
innodb_buffer_pool_size=40G
innodb_buffer_pool_instances=8
innodb_log_file_size=4G
innodb_log_buffer_size=256M
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1

#IO配置
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=2000
innodb_io_capacity_max=4000

#连接相关
max_connections=3000
max_connect_errors=100000
open_files_limit=65535
back_log=1024
max_allowed_packet=1G

#字符集排序规则 MySQL9.7推荐
character‑set‑server=utf8mb4
collation‑server=utf8mb4_0900_ai_ci

#二进制日志
log_bin=/fgedudb/fgedudb‑log/binlog/fgedudb‑bin
binlog_format=ROW
binlog_expire_logs_seconds=604800
server‑id=1

#慢查询日志
slow_query_log=ON
slow_query_log_file=/fgedudb/fgedudb‑log/slowlog/fgedudb‑slow.log
long_query_time=1
log_queries_not_using_indexes=ON

#安全与认证,mysql_native_password已移除
default_authentication_plugin=caching_sha2_password
skip‑name‑resolve=1
explicit_defaults_for_timestamp=1

#性能模式开启
performance_schema=ON

[mysqld_safe]
log‑error=/fgedudb/fgedudb‑data/fgedudb‑error.log

[mysql]
socket=/fgedudb/fgedudb‑data/mysql.sock
default‑character‑set=utf8mb4
“`
关键参数说明:
1. `innodb_buffer_pool_size=40G`,64G主机分配40G内存给InnoDB缓冲池,预留内存给操作系统、会话缓冲区、binlog缓存;
2. `binlog_expire_logs_seconds=604800`,MySQL9.7推荐使用秒数控制binlog过期,替代旧版本`expire_logs_days`;
3. `default_authentication_plugin=caching_sha2_password`,MySQL9.7默认认证插件,业务驱动必须支持该认证方式;
4. `collation‑server=utf8mb4_0900_ai_ci`,MySQL9.x系列标准排序规则。

### 5.3 执行实例初始化
MySQL9.7使用`mysqld –initialize`完成初始化,自动生成数据字典,root临时密码输出写入错误日志。
“`bash
cd /fgedudb/mysql‑soft/mysql
bin/mysqld –defaults‑file=/etc/my‑fgedudb.cnf –initialize –user=mysql
“`
初始化结束,查看root临时密码:
“`bash
grep ‘temporary password’ /fgedudb/fgedudb‑data/fgedudb‑error.log
“`

### 5.4 配置systemd服务单元文件
创建`/usr/lib/systemd/system/mysql‑fgedudb.service`服务配置:
“`ini
[Unit]
Description=MySQL fgedudb Database Server 9.7
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/fgedudb/mysql‑soft/mysql/bin/mysqld –defaults‑file=/etc/my‑fgedudb.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on‑failure
LimitNOFILE=65535
LimitNPROC=65535

[Install]
WantedBy=multi‑user.target
“`
重载systemd,启动并设置开机自启:
“`bash
systemctl daemon‑reload
systemctl start mysql‑fgedudb
systemctl enable mysql‑fgedudb
systemctl status mysql‑fgedudb
“`

### 5.5 登录实例修改root账号密码
“`bash
/fgedudb/mysql‑soft/mysql/bin/mysql -S /fgedudb/fgedudb‑data/mysql.sock -uroot -p
“`
输入初始化生成临时密码,登录数据库执行修改密码SQL:
“`sql
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Root@Fgedu123’;
FLUSH PRIVILEGES;
“`

### 5.6 配置操作系统环境变量
编辑`/etc/profile`增加mysql命令路径:
“`bash
echo “export PATH=/fgedudb/mysql‑soft/mysql/bin:\$PATH” >> /etc/profile
source /etc/profile
mysql -V
“`

## 六、Linux平台YUM、RPM包方式部署MySQL9.7实例
YUM适合外网环境,自动处理全部软件依赖;RPM适合内网离线环境,提前下载全套rpm包。本章节演示主机`fgedu‑net‑cn2`。

### 6.1 YUM仓库方式安装MySQL9.7
“`bash
cd /fgedudb/mysql‑soft
wget [https://dev.mysql.com/get/mysql97](https://dev.mysql.com/get/mysql97)‑community‑release‑el8‑1.noarch.rpm
rpm -ivh mysql97‑community‑release‑el8‑1.noarch.rpm
“`
确认仓库已经启用mysql97社区版本:
“`bash
yum repolist enabled | grep mysql
“`
执行安装:
“`bash
yum install -y mysql‑community‑server mysql‑community‑client mysql‑community‑client‑plugins
“`
启动服务,设置开机自启:
“`bash
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
“`
YUM安装后错误日志路径`/var/log/mysqld.log`,读取root临时密码:
“`bash
grep ‘temporary password’ /var/log/mysqld.log
mysql -uroot -p
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Root@Fgedu123’;
FLUSH PRIVILEGES;
“`
> 注意:YUM安装默认数据目录`/var/lib/mysql`;生产环境需要迁移数据目录至`/fgedudb/fgedudb‑data`,修改`/etc/my.cnf`配置,迁移完成修改目录权限为mysql用户。

### 6.2 RPM离线包安装MySQL9.7
内网服务器无法访问外网yum源,提前下载完整RPM包,严格按照依赖顺序安装:
“`bash
cd /fgedudb/mysql‑soft
rpm -ivh mysql‑community‑common‑9.7.0‑1.el8.x86_64.rpm
rpm -ivh mysql‑community‑libs‑9.7.0‑1.el8.x86_64.rpm
rpm -ivh mysql‑community‑client‑plugins‑9.7.0‑1.el8.x86_64.rpm
rpm -ivh mysql‑community‑devel‑9.7.0‑1.el8.x86_64.rpm
rpm -ivh mysql‑community‑client‑9.7.0‑1.el8.x86_64.rpm
rpm -ivh mysql‑community‑server‑9.7.0‑1.el8.x86_64.rpm
“`
安装完成之后,服务启停、修改root密码操作,和YUM安装流程完全一致。

## 七、MySQL9.7安装完成测试与远程账号授权
实例正常启动后,需要创建业务数据库`fgedudb`、业务账号`fgedu`,配置远程访问权限,完成业务连接测试。

### 7.1 本地登录数据库实例
“`bash
mysql -S /fgedudb/fgedudb‑data/mysql.sock -uroot -p
“`

### 7.2 创建业务数据库
“`sql
CREATE DATABASE fgedudb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
SHOW DATABASES;
“`

### 7.3 创建业务账号fgedu,配置访问权限
MySQL9.7默认认证插件`caching_sha2_password`,创建账号时不需要额外指定,生产环境禁止使用`%`通配符,建议限定业务服务器IP地址。
“`sql
CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘Fgedu@123456’;
GRANT ALL PRIVILEGES ON fgedudb.* TO ‘fgedu’@’%’;
FLUSH PRIVILEGES;
SHOW GRANTS FOR fgedu@’%’;
“`

### 7.4 远程TCP连接测试
从另外一台主机发起远程连接,替换数据库主机IP:
“`bash
mysql -h fgedu‑net‑cn1_IP -ufgedu -pFgedu@123456 -P3306
“`
连接成功执行SQL校验:
“`sql
SELECT database();
SELECT version();
“`

## 八、MySQL9.7 SSL/TLS加密连接配置
MySQL9.7默认支持SSL/TLS加密传输,保护客户端与数据库之间网络报文,防止网络抓包窃取账号密码与业务数据,跨公网访问数据库场景必须启用SSL。

### 8.1 生成SSL证书密钥文件
MySQL9.7内置工具`mysql_ssl_rsa_setup`一键生成CA证书、服务端证书、客户端证书密钥:
“`bash
cd /fgedudb/mysql‑soft/mysql
bin/mysql_ssl_rsa_setup –uid=mysql –datadir=/fgedudb/fgedudb‑data
ls /fgedudb/fgedudb‑data/*.pem
“`

### 8.2 修改my‑fgedudb.cnf开启SSL配置
在`[mysqld]`段追加下面参数:
“`ini
ssl_ca=/fgedudb/fgedudb‑data/ca.pem
ssl_cert=/fgedudb/fgedudb‑data/server‑cert.pem
ssl_key=/fgedudb/fgedudb‑data/server‑key.pem
“`
重启实例让SSL配置生效:
“`bash
systemctl restart mysql‑fgedudb
“`

### 8.3 查看数据库SSL状态
登录数据库执行SQL:
“`sql
SHOW VARIABLES LIKE ‘%ssl%’;
“`
`have_ssl`参数输出YES,代表SSL功能已经成功启用。

### 8.4 客户端SSL连接测试
“`bash
mysql -h fgedu‑net‑cn1_IP -ufgedu -p –ssl‑mode=REQUIRED
“`
登录完成执行`status`命令,输出中出现`Cipher in use`代表当前会话使用SSL加密通道传输。

## 九、MySQL版本升级理论、升级约束、升级前置检查
升级是MySQL9.7运维中风险最高的操作,风哥教程本文梳理官方升级约束,升级分为原地升级、逻辑迁移升级、复制拓扑升级三类方案。

原地升级:直接替换数据库二进制程序,复用原有数据目录,数据库自动升级数据字典;官方仅支持MySQL8.4 LTS原地升级MySQL9.7 LTS;MySQL5.7不能直接原地升级9.7,需要分步升级。原地升级需要停机窗口。

逻辑迁移升级:使用mysqldump或者mysqlpump将旧实例全部数据逻辑导出,导入全新MySQL9.7空实例,兼容性最好,不受版本跨代限制,但是会消耗磁盘空间,大库导出导入耗时较长,生产环境高风险业务优先选择逻辑迁移。

复制拓扑升级:搭建8.4到9.7主从复制,业务切流量,实现几乎无停机升级,适合业务不能长时间停机场景。

升级前置强制要求:
1. 升级前完成全量数据库备份,包含mysql系统库;
2. 使用MySQL Shell的`util.checkForServerUpgrade()`工具做升级预检查,捕获不兼容对象、废弃参数、不支持的SQL语法、旧认证账号;
3. 核对my.cnf配置,删除MySQL9.7已经废弃的系统变量,否则实例无法启动;
4. 业务应用做兼容性测试,确认驱动支持`caching_sha2_password`认证插件;
5. 准备完整回滚预案。

执行升级预检查,登录旧实例执行MySQL Shell工具:
“`bash
mysqlsh -uroot -p
util.checkForServerUpgrade()
“`
工具输出全部风险项,必须全部修复后才可以执行升级操作。

## 十、MySQL8.4升级MySQL9.7原地升级实战
本场景主机`fgedu‑net‑cn1`,原有MySQL8.4二进制部署实例,数据目录`/fgedudb/fgedudb‑data`,执行原地升级至MySQL9.7。

### 10.1 升级前操作
1.全量备份数据库;
2.执行`util.checkForServerUpgrade()`预检查,修复全部告警项;
3.停止业务流量,关闭应用;
4.停止原有MySQL8.4实例。
“`bash
systemctl stop mysql‑fgedudb
systemctl disable mysql‑fgedudb
“`

### 10.2 替换二进制程序包
“`bash
cd /fgedudb/mysql‑soft
mv mysql mysql‑84‑old
tar -zxvf mysql‑9.7.0‑linux‑glibc2.28‑x86_64.tar.gz
ln -s mysql‑9.7.0‑linux‑glibc2.28‑x86_64.tar.gz mysql
chown -R mysql:mysql /fgedudb/mysql‑soft/mysql
“`

### 10.3 修改systemd服务文件指向新的basedir路径,重载systemd
“`bash
systemctl daemon‑reload
“`

### 10.4 启动实例,自动执行数据字典升级
MySQL9.7启动时自动执行数据字典升级,不需要旧版本`mysql_upgrade`工具。
“`bash
systemctl start mysql‑fgedudb
systemctl status mysql‑fgedudb
“`
观察错误日志`/fgedudb/fgedudb‑data/fgedudb‑error.log`确认升级无报错。登录实例校验版本:
“`sql
SELECT version();
“`

### 10.5 业务校验
业务应用连接数据库,执行业务功能校验;校验存储过程、视图、触发器、复制配置全部正常。

## 十一、逻辑迁移升级实战方案
逻辑迁移适用于MySQL5.7迁移MySQL9.7,不受原地升级路径限制。
1.部署一套全新MySQL9.7空实例;
2.在源库执行全库逻辑备份:
“`bash
mysqldump -uroot -p –all‑databases –routines –triggers –events > backup_all.sql
“`
3.将备份文件传输到新服务器;
4.导入MySQL9.7实例:
“`bash
mysql -uroot -p < backup_all.sql
“`
5.校验账号、存储过程、视图、业务数据完整性;
6.业务切换到新MySQL9.7实例;
7.业务稳定运行一段时间后再下线旧实例。

## 十二、MySQL9.7基础管理命令与故障排查
### 12.1 systemd启停管理(二进制部署)
“`bash
systemctl start mysql‑fgedudb
systemctl stop mysql‑fgedudb
systemctl restart mysql‑fgedudb
systemctl status mysql‑fgedudb
“`

### 12.2 多种登录方式
“`bash
#socket本地登录
mysql -S /fgedudb/fgedudb‑data/mysql.sock -uroot -p
#TCP本地回环登录
mysql -h127.0.0.1 -P3306 -uroot -p
#远程TCP登录
mysql -hIP -P3306 -uroot -p
“`

### 12.3 高频运维SQL
“`sql
SELECT version();
SELECT user();
SHOW FULL PROCESSLIST;
SHOW VARIABLES LIKE ‘%max_connections%’;
SHOW GLOBAL STATUS LIKE ‘Threads_connected’;
SHOW ENGINE INNODB STATUS\G
SHOW VARIABLES LIKE ‘%ssl%’;
“`

### 12.4 常见故障排查思路
1.实例启动失败:优先读取错误日志`/fgedudb/fgedudb‑data/fgedudb‑error.log`;检查目录权限、my.cnf废弃参数语法错误、磁盘空间满、端口占用;
2.业务无法登录:检查防火墙、账号认证插件,老旧驱动不支持caching_sha2_password会直接连接报错;
3.升级失败:回滚到升级前备份,核对升级预检查输出;
4.连接数打满:通过`show full processlist`定位慢SQL,优化业务或者调大`max_connections`。

## 十三、Linux平台MySQL9.7完整卸载操作
卸载分为二进制包卸载和RPM/YUM包卸载两种场景,卸载前务必备份全部业务数据,rm操作会直接清除数据文件。

### 13.1 二进制包实例完整卸载
“`bash
#停止服务
systemctl stop mysql‑fgedudb
systemctl disable mysql‑fgedudb
rm -f /usr/lib/systemd/system/mysql‑fgedudb.service
systemctl daemon‑reload
#删除目录与配置
rm -rf /fgedudb
rm -f /etc/my‑fgedudb.cnf
#修改/etc/profile,删除mysql PATH环境变量
“`

### 13.2 YUM/RPM安装MySQL9.7卸载
“`bash
systemctl stop mysqld
systemctl disable mysqld
yum remove -y mysql‑community‑*
rm -rf /var/lib/mysql
rm -f /etc/my.cnf
rm -rf /var/log/mysqld.log
“`

## 风哥针对本文总结
风哥教程本文完整覆盖Linux平台MySQL9.7项目业务评估、操作系统底层环境调优、介质版本选型、源码编译部署、二进制包部署、YUM与RPM包部署,基于64G内存8CPU硬件规格的my.cnf参数配置、实例初始化、systemd服务管理、业务账号库创建、SSL/TLS加密连接配置;同时重点讲解MySQL升级理论、升级约束、升级前置检查、8.4原地升级9.7实战、跨版本逻辑迁移升级方案,以及日常运维命令、故障排查、完整实例卸载全流程。

MySQL9.7相比历史版本存在大量变更,移除`mysql_native_password`认证插件、部分旧系统变量废弃,是部署和升级过程中最高发故障点。二进制包是生产环境优先选择,自由度高;YUM/RPM适合标准化测试环境;源码编译只用于特殊安全裁剪场景。升级操作属于高风险运维动作,原地升级严格遵守官方支持升级路径,MySQL5.7不能直接原地升级至MySQL9.7,优先逻辑迁移方案;升级前必须执行升级预检查,完成全量备份,准备完整业务回滚预案。

操作系统内核参数、资源限制、目录权限,是数据库稳定运行的底层根基,大量数据库故障根源来自部署阶段操作系统配置缺失。实例部署完成,不能仅满足服务可以启动,需要完成账号权限最小化、SSL加密、慢查询日志开启、binlog日志自动过期清理等运维安全配置。生产上线前必须搭建完整备份策略,定期验证备份文件可恢复性。掌握本套风哥教程全部实操内容,可以独立完成企业MySQL9.7单机实例部署运维,并且具备存量业务迁移升级的实操能力,为后续主从复制、MGR高可用、性能调优打下坚实基础。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息