ITPub博客

首页 > 数据库 > MySQL > 数据库教程FGMT30‑Linux平台MySQL8.0/8.4安装配置与版本升级

数据库教程FGMT30‑Linux平台MySQL8.0/8.4安装配置与版本升级

原创 MySQL 作者:mfkqwyc86 时间:2026-09-16 11:03:42 0 删除 编辑

数据库教程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:生产部署两种方案,yj关闭或者配置完整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生产部署、版本升级真实项目。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9664900/viewspace-3182519/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
风哥Oracle,MySQL,PostgreSQL,Linux,大数据,国产数据库,中间件等教程

注册时间:2010-10-26

  • 博文量
    68
  • 访问量
    406019