MySQL8.x/9.x数据库安装自动化全过程-Fgedu

MySQL8.x/9.x数据库安装自动化全过程-Fgedu

一、程序介绍
1.1 程序概述
FGMySQLAutoInstall_S1是一款由风哥(FGEDU)自主研发、专为数据库管理员(DBA)和运维工程师打造的 MySQL 8/9 单机版一键自动化安装脚本。本脚本采用"配置驱动"的设计理念,通过一份 YAML 格式的配置文件(配置文件)即可完成 MySQL 数据库从系统前置配置、LVM 卷组划分、内核参数调优、安全加固、安装部署、服务注册、初始化到测试数据验证的全流程自动化操作。

本脚本旨在解决传统 MySQL 安装过程中存在的步骤繁琐、人工干预多、容易出错、难以标准化、难以重复执行等痛点。用户只需准备好 MySQL 官方二进制安装包并按需修改配置文件,执行一条命令即可在数分钟内完成一个生产可用的 MySQL 8/9 单机实例部署,极大提升了数据库交付效率,降低了人为操作失误风险。

脚本基于 Python 3 开发,遵循 MySQL 官方最佳实践配置参数,内置完善的错误处理与失败回滚清理机制,支持安装步骤失败后多次重试,并提供详尽的日志记录,便于问题排查与审计追溯。脚本同时适配国产化操作系统(麒麟 V10、欧拉 EulerOS)和主流企业级 Linux 发行版,可广泛应用于企业级数据库标准化交付、开发测试环境快速搭建、数据库培训教学等场景。

1.2 作者信息

作者:风哥
官方网站   http://www.fgedu.net.cn , http://www.itpux.com
数据库教程  https://edu.51cto.com/lecturer/8020378.html
mysql一键安装教程1 https://edu.51cto.com/course/40552.html
mysql一键安装教程2 https://edu.51cto.com/course/40553.html

1.3 设计理念

本脚本的核心设计理念如下:

  1. 配置驱动:所有可变参数(系统配置、LVM 划分、内核参数、安全设置、MySQL 参数、测试数据等)全部集中在一个 YAML 配置文件中,做到"一份配置,一次部署",便于版本管理和环境复用。
  2. 一键自动化:从权限校验到结果验证,全流程无需人工编写命令,极大降低部署门槛。
  3. 安全可靠:安装前进行多项前置检查(权限、操作系统版本、安装包、配置冲突、磁盘/内存/CPU 资源、端口占用等),失败时自动清理已做的配置,避免残留脏数据。
  4. 官方最佳实践:MySQL 参数、内核参数、资源限制等均参考官方推荐值,开箱即用即可满足生产级别要求。
  5. 可重试可回滚:每个安装步骤支持失败后重试(最大 10 次),用户退出或安装失败时自动执行清理,保证环境干净。
  6. 日志可追溯:全程详细记录每一条命令、每一份配置文件内容、每一次执行结果,便于审计与故障定位。

1.4 适用场景

本脚本适用于以下典型场景:

  • 企业生产环境 MySQL 8/9 单机实例的标准化快速交付。
  • 开发、测试、预发环境的 MySQL 快速搭建与重建。
  • 数据库运维自动化平台中作为底层部署引擎被编排调用。
  • 数据库培训教学场景,快速生成可练习的 MySQL 实例。
  • 国产化适配场景(麒麟、欧拉等操作系统)下的 MySQL 部署。

二、程序功能与特性

2.1 核心功能特性

本脚本提供以下核心功能特性,覆盖 MySQL 单机部署的全生命周期:

2.1.1 自动识别并适配多种操作系统

脚本通过读取 /etc/os-release 自动识别操作系统类型与版本,内置支持列表包括:

  • CentOS Linux 7/8+
  • AnolisOS 7/8+
  • Rocky Linux 7/8/9+
  • Almalinux 7/8/9+
  • RHEL(Red Hat Enterprise Linux)7/8/9+
  • OEL(Oracle Linux Server)7/8/9+
  • 麒麟 Kylin V10+
  • 欧拉 openEuler / EulerOS

对于不在支持列表的操作系统,脚本会主动报错退出,避免在不兼容环境上误操作。

2.1.2 配置驱动部署

所有部署参数集中于 配置文件,主要分为三大配置节:

  • system:依赖包、LVM、内核参数、安全配置。
  • mysql:root 密码、my.cnf 全量参数(含 client、mysql、mysqld、mysqldump 各段)。
  • test:测试库、测试用户、测试表结构与测试数据。

脚本在执行前会对配置文件进行完整性、合法性校验,缺少必填字段会明确提示缺失项并退出。

2.1.3 多 LVM 卷组支持

支持配置多个磁盘、多个 VG 卷组,可分别用于 MySQL 数据目录、备份目录等不同用途。每条 LVM 配置包含:vg_name(卷组名)、lv_name(逻辑卷名)、pv_devices(物理卷设备)、mount_point(挂载点)、filesystem(文件系统,如 xfs)、size(大小)、skip(是否跳过已存在的 LVM)。

LVM 配置流程包括:pvcreate、vgcreate、lvcreate、mkfs、mkdir、mount、写入 /etc/fstab 实现开机自动挂载。对于已配置好的 LVM,可设置 skip: true 跳过,避免重复操作。

2.1.4 系统前置配置

自动完成以下系统层面的前置准备:

  • 依赖包安装(libaio、numactl、net-tools、perl、wget、tar 等),优先尝试挂载光驱本地源,失败则使用现有 yum 仓库。
  • 内核参数配置(sysctl):网络参数、文件系统参数、内存参数、大内存页配置等,写入 /etc/sysctl.d/mysql.conf 并立即生效。
  • 资源限制配置(limits):mysql 用户的 nofile、nproc 限制,写入 /etc/security/limits.d/mysql.conf。
  • 安全加固:关闭防火墙(firewalld)、关闭 SELinux、关闭 NUMA、关闭透明大页(THP)、设置 IO 调度策略(如 deadline)、设置 RemoveIPC=no。
  • 系统时区设置:自动设置为 Asia/Shanghai。
  • 创建 mysql 用户与用户组(GID 1001)。
  • 创建安装目录、数据目录、日志目录、binlog 目录等并设置正确权限。

2.1.5 MySQL 安装与初始化

  • 自动扫描当前目录、soft 目录、/tmp 目录,识别符合 mysql-8/9.x.tar.gz 或 mysql-8/9.x.tar.xz 命名规则的安装包。
  • 目录数据检查:解压前检查数据目录、日志目录、应用目录是否已有数据,有数据时提示用户是否清理。
  • 清理目录数据前自动停止 MySQL 服务和进程,避免文件占用。
  • 解压安装包到指定目录并重命名为标准路径(默认 /mysql/app/mysql)。
  • 检查 mysqld 版本与依赖库(ldd),确保运行环境完整。
  • 使用 mysqld --initialize-insecure 完成数据库初始化,并读取错误日志确认初始化成功。
  • 初始化后统一设置目录权限归属 mysql:mysql。

2.1.6 服务注册与启动

  • 自动生成 systemd 服务文件(/etc/systemd/system/mysql.service),配置开机自启、失败自动重启、文件句柄限制等。
  • 支持 mysqld_safe 方式启动,确保子进程异常停止时自动重启。
  • 启动失败时支持多次重试(最大 10 次),并自动获取 MySQL 错误日志、systemctl 状态、journalctl 日志辅助排查。
  • 启动后校验服务运行状态(active running)。

2.1.7 安全与远程配置

  • 修改 root 本地密码为配置文件中指定的强密码。
  • 创建 root 远程账号(root@%)并授予全部权限,支持远程管理。
  • 刷新权限使其立即生效。

2.1.8 测试数据初始化

  • 自动创建测试库(默认 fgedudb)。
  • 创建测试用户(默认 fgedu)并授权。
  • 创建测试表(默认 fgtest_table)并按配置插入测试数据。
  • 便于安装后立即进行连通性与功能验证。

2.1.9 错误处理与自动清理

  • 每个安装步骤均支持失败后重试,最大重试次数为 10 次。
  • 用户主动退出(输入 q/quit 或 Ctrl+C)或安装失败时,自动执行清理:停止并移除 MySQL 服务、清理数据目录/应用目录/日志目录内容(保留目录本身)、清理 MySQL 用户与用户组、清理配置文件等。
  • 清理使用 find 命令删除目录内容而保留目录本身,便于重新安装。

2.1.10 日志记录

  • 全程记录到 mysql_install.log(脚本同目录)。
  • 记录内容包括:每步操作的时间戳、执行的每条命令、生成的每份配置文件内容、每步执行结果、错误信息、用户交互选择等。
  • 日志同时输出到控制台,便于实时观察安装进度。

2.1.11 安装前确认

安装前显示系统信息(主机名、IP、操作系统、CPU 核心数、内存大小、MySQL 版本),用户输入 yes 确认后才开始安装,避免误操作。

2.1.12 其他特性

  • 自动删除系统默认的 /etc/my.cnf,避免配置冲突。
  • 自动卸载已安装的 mysql、mariadb、percona 包,避免版本冲突。
  • my.cnf 默认生成并读取 /mysql/data/3306/my.cnf。
  • 支持 .tar.gz 和 .tar.xz 两种安装包格式。
  • 启用 rc-local 服务实现开机自启动部分配置(如关闭透明大页)。
  • 提供独立的 mysql.server 脚本用于手工启停 MySQL 服务与查看状态。

2.2 程序目录结构

/fgedu/fgedudb/mysql/FGMySQLAutoInstall_S1.0/
├── FGMySQLAutoInstall_S1.0.py    # 主安装脚本(Python3)
├── 配置文件             # 配置文件(部署参数)
├── mysql.server                  # 手工启停MySQL服务脚本
├── mysql_install.log             # 安装过程日志
├── INSTALL.md                    # 安装步骤说明
├── README.md                     # 说明文档
├── docs/
│   └── README2.md                # 本详细说明手册
├── python-pkgs/                  # 离线Python依赖包
│   ├── fgedudb.repo              # 本地yum源配置示例
│   ├── pip-23.3.1.tar.gz
│   ├── setuptools-68.2.2.tar.gz
│   └── pyyaml wheel 包
└── soft/                         # MySQL安装包目录(需自备)
    └── mysql-8/9.x.tar.gz/xz

安装完成后 MySQL 相关目录结构:

/mysql/
├── app/mysql/                    # MySQL 程序安装目录(basedir)
├── data/3306/
│   ├── data/                     # 数据目录(datadir)
│   ├── my.cnf                    # MySQL配置文件
│   ├── mysql.pid                 # PID文件
│   └── mysql.sock -> /tmp/mysql.sock
└── log/3306/
    ├── fgedudb-error.err         # 错误日志
    ├── fgedudb-general.err       # 通用查询日志
    ├── fgedudb-query.err         # 慢查询日志
    └── binlog/                   # 二进制日志目录
/backup/                          # 备份目录(可选)

三、支持环境

3.1 操作系统支持

本脚本支持以下操作系统(通过 /etc/os-release 自动识别):

操作系统 支持版本 说明
CentOS Linux 7、8 社区企业级 Linux
AnolisOS 7、8 阿里龙蜥
Rocky Linux 7、8、9 CentOS 替代发行版
Almalinux 7、8、9 CentOS 替代发行版
RHEL(Red Hat Enterprise Linux) 7、8、9 红帽企业版
OEL(Oracle Linux Server) 7、8、9 甲骨文企业版
麒麟 Kylin V10 国产化操作系统
欧拉 openEuler 全版本 华为开源操作系统
欧拉 EulerOS 全版本 华为企业版操作系统

3.2 硬件资源要求

资源项 最低要求 推荐配置
CPU 2 核 4 核及以上
内存 2 GB 8 GB 及以上
安装目录磁盘空间 10 GB 20 GB 及以上
数据目录磁盘空间 20 GB 根据业务数据量规划,建议 50 GB 及以上
网络 可访问 yum 仓库或本地安装源 千兆及以上

3.3 软件依赖

  • Python 3(系统自带)
  • pyyaml:用于解析 YAML 配置文件(在线安装 yum install -y python3-pyyaml,或离线安装)
  • MySQL 8/9 官方二进制安装包(.tar.gz 或 .tar.xz 格式)
  • 系统命令:systemctl、yum/dnf、pvcreate/vgcreate/lvcreate、mkfs、mount、sysctl、grubby、timedatectl 等

3.4 运行权限

  • 必须以 root 用户身份运行(脚本会校验 os.geteuid() == 0)。
  • 需具备修改系统配置文件、安装软件包、创建用户、操作磁盘等权限。

四、程序使用

4.1 安装准备

4.1.1 准备 MySQL 安装包

下载 MySQL 8/9 官方二进制安装包(如 mysql-8/9.0-linux-glibc2.28-x86_64.tar.xz),放置在以下任一位置:

  • 当前脚本所在目录(.)
  • soft 子目录
  • /tmp 目录

安装包命名需符合 mysql-8/9.x.tar.gz 或 mysql-8/9.x.tar.xz 规则,脚本通过正则自动识别版本号。

4.1.2 安装 Python 依赖包

脚本运行依赖 pyyaml,提供在线与离线两种安装方式。

在线安装(推荐):

yum install -y python3-pyyaml
# 或
pip3 install pyyaml

离线安装(无法联网时):

  1. 在有网络机器上下载 pyyaml 的 wheel 包。
  2. 将 wheel 包复制到目标机器。
  3. 执行:pip3 install pyyaml-xxx.whl

验证安装:

python3 --version
python3 -c "import yaml; print('pyyaml version:', yaml.__version__)"

4.1.3 修改配置文件

复制并编辑 配置文件,根据实际环境调整以下关键参数:

  • system.packages:依赖包列表。
  • system.lvm:LVM 卷组配置(磁盘设备、卷组名、逻辑卷名、挂载点、大小、是否跳过)。
  • system.kernel:内核参数。
  • system.security:防火墙、SELinux、NUMA、透明大页、IO 调度等。
  • mysql.root_password:root 密码(请使用强密码)。
  • mysql.my_cnf:MySQL 全部参数(端口、目录、字符集、连接数、InnoDB、日志等)。
  • test:测试库、用户、表、数据。

4.2 执行安装

4.2.1 赋予执行权限

chmod +x FGMySQLAutoInstall_S1.0.py

4.2.2 运行脚本

# 方式一
./FGMySQLAutoInstall_S1.0.py

# 方式二
python3 FGMySQLAutoInstall_S1.0.py

4.2.3 安装流程说明

脚本执行后自动依次完成以下步骤:

4.2.4 安装完成输出

安装完成后脚本输出汇总信息,包括:MySQL 版本、安装目录、数据目录、端口、root 密码、测试库、测试用户、测试密码、测试表,以及生产环境清理测试数据的步骤。

4.3 手工管理 MySQL 服务

脚本目录下提供 mysql.server 脚本,用于手工启停 MySQL 与查看状态:

# 启动MySQL
./mysql.server start

# 停止MySQL
./mysql.server stop

# 重启MySQL
./mysql.server restart

# 查看状态
./mysql.server status

也可使用 systemctl 管理:

systemctl start mysql
systemctl stop mysql
systemctl restart mysql
systemctl status mysql
systemctl enable mysql
systemctl disable mysql

4.4 连接 MySQL

# 本地连接
mysql -u root -p

# 远程连接
mysql -u root -h <服务器IP> -P 3306 -p

五、程序各种案例场景与操作过程

5.1 场景一:全新生产环境标准部署

场景描述:在一台全新的 Oracle Linux 9.3 服务器(4 核 8GB 内存,已划分好 /mysql 与 /backup 两个 LVM 挂载点)上部署 MySQL 8/9 生产实例。

操作过程

  1. 上传安装包与脚本到服务器:
# 将脚本目录上传至 /fgedu/fgedudb/mysql/FGMySQLAutoInstall_S1.0/
# 将 MySQL 安装包放至 /tmp/ 或 soft/ 目录
ls /tmp/mysql-8/9.0-linux-glibc2.28-x86_64.tar.xz
  1. 修改 配置文件,因为是已配好 LVM,将 LVM 配置 skip 设为 true:
system:
  lvm:
    - vg_name: mysqlvg
      lv_name: mysqllv
      pv_devices: /dev/sdc
      mount_point: /mysql
      filesystem: xfs
      size: 50G
      skip: true   # 已配置,跳过
    - vg_name: vgbackup
      lv_name: lvbackup
      pv_devices: /dev/sdd
      mount_point: /backup
      filesystem: xfs
      size: 100G
      skip: true   # 已配置,跳过
  mysql:
    root_password: YourStrongPwd123!
    my_cnf:
      innodb_buffer_pool_size: 4G   # 按内存调整
      max_connections: 500
  1. 执行安装:
chmod +x FGMySQLAutoInstall_S1.0.py
python3 FGMySQLAutoInstall_S1.0.py
  1. 确认系统信息后输入 yes,等待安装完成。

  2. 安装完成后清理测试数据:

mysql -u root -p
DROP DATABASE fgedudb;
DROP USER 'fgedu'@'%';
FLUSH PRIVILEGES;
exit;

5.2 场景二:全新裸机自动划分 LVM 部署

场景描述:一台全新服务器,有两块空闲磁盘 /dev/sdc 和 /dev/sdd,需要脚本自动完成 LVM 划分并挂载 /mysql 与 /backup 目录后部署 MySQL。

操作过程

  1. 确认磁盘未被使用:
lsblk
pvdisplay /dev/sdc
pvdisplay /dev/sdd
  1. 修改 配置文件,LVM 配置 skip 设为 false:
system:
  lvm:
    - vg_name: mysqlvg
      lv_name: mysqllv
      pv_devices: /dev/sdc
      mount_point: /mysql
      filesystem: xfs
      size: 50G
      skip: false   # 需要脚本自动创建
    - vg_name: vgbackup
      lv_name: lvbackup
      pv_devices: /dev/sdd
      mount_point: /backup
      filesystem: xfs
      size: 100G
      skip: false  # 需要脚本自动创建
  1. 执行安装脚本,脚本会自动执行 pvcreate、vgcreate、lvcreate、mkfs、mount、写入 /etc/fstab。

  2. 安装完成后验证挂载:

df -h | grep -E 'mysql|backup'
cat /etc/fstab | grep -E 'mysql|backup'

5.3 场景三:重复安装(目录已有残留数据)

场景描述:之前安装过 MySQL 但未完全清理,数据目录、日志目录、应用目录中存在残留数据,需要重新安装。

操作过程

  1. 直接执行脚本:
python3 FGMySQLAutoInstall_S1.0.py
  1. 脚本在解压安装包前会检查各目录是否存在数据,提示:
警告: 目录 /mysql/data/3306/data/ 中存在数据
是否清理目录 /mysql/data/3306/data/ 中的数据?(y/n):
  1. 输入 y,脚本会自动停止 MySQL 服务和进程,然后清理目录数据(保留目录本身),继续安装。

  2. 等待安装完成。

5.4 场景四:国产化操作系统(麒麟 V10)部署

场景描述:在麒麟 V10 操作系统上部署 MySQL 8/9。

操作过程

  1. 确认操作系统版本:
cat /etc/os-release
# 确认 NAME 包含 Kylin,VERSION_ID 为 V10
  1. 确认 Python3 与 pyyaml 已安装:
python3 --version
python3 -c "import yaml; print(yaml.__version__)"
  1. 准备 MySQL 安装包(注意选择兼容麒麟 V10 glibc 版本的安装包)。

  2. 修改配置文件后执行安装脚本。脚本会自动识别麒麟 V10 并继续。

5.5 场景五:安装失败后重试

场景描述:安装过程中某步骤(如 MySQL 服务启动)失败,需要排查后重试。

操作过程

  1. 脚本启动失败时会自动重试(最多 10 次),并提示常见排查方法:
步骤 '注册启动服务' 失败
常见问题排查:
1. 检查端口是否被占用: lsof -i:3306
2. 检查数据目录权限: ls -la /mysql/data/3306/
3. 检查错误日志: tail -50 /mysql/log/3306/fgedudb-error.err
4. 修复问题后按回车继续,输入'q'退出:
  1. 根据提示排查问题,例如查看错误日志:
tail -100 /mysql/log/3306/fgedudb-error.err
systemctl status mysql
journalctl -u mysql -n 50
  1. 修复问题后按回车继续重试,或输入 q 退出(退出会自动清理)。

5.6 场景六:安装失败后手动清理

场景描述:安装失败且脚本自动清理未完全,需要手动清理后重新安装。

操作过程

# 停止并移除MySQL服务
systemctl stop mysql
systemctl disable mysql
rm -f /etc/systemd/system/mysql.service
systemctl daemon-reload

# 清理MySQL相关目录内容(保留目录)
find /mysql/app/mysql -mindepth 1 -delete
find /mysql/data/3306/data -mindepth 1 -delete
find /mysql/log/3306/binlog -mindepth 1 -delete
rm -f /tmp/mysql.sock*

# 清理配置文件
rm -f /etc/my.cnf
rm -f /mysql/data/3306/my.cnf
rm -f /etc/sysctl.d/mysql.conf
rm -f /etc/security/limits.d/mysql.conf

# 清理用户
userdel -r mysql
groupdel mysql

清理完成后重新执行安装脚本即可。

5.7 场景七:调整 MySQL 参数后重新部署

场景描述:已有 MySQL 实例,需要调整 innodb_buffer_pool_size 等参数后重新部署。

操作过程

  1. 修改 配置文件 中对应参数:
mysql:
  my_cnf:
    innodb_buffer_pool_size: 8G
    max_connections: 1000
  1. 备份现有数据(如需要):
mysqldump -u root -p --all-databases > /backup/all_db_backup.sql
  1. 执行安装脚本,处理目录残留数据提示(输入 y 清理)。

  2. 完成后恢复数据(如需要):

mysql -u root -p < /backup/all_db_backup.sql

六、常用问题与排查

6.1 日志文件位置

安装过程详细日志记录在脚本同目录的 mysql_install.log 文件中。排查任何问题前,建议先查看该日志文件了解完整执行过程:

# 查看完整日志
cat mysql_install.log | more

# 查看最后100行
tail -100 mysql_install.log

# 查看包含错误的行
grep -i "错误\|error\|fail" mysql_install.log

MySQL 运行错误日志默认位于:/mysql/log/3306/fgedudb-error.err

6.2 常见问题与排查

问题1:必须以 root 用户身份运行此脚本

原因:脚本需要修改系统配置、安装软件包、创建用户等,必须 root 权限。

解决:使用 root 用户或 sudo 执行:

sudo python3 FGMySQLAutoInstall_S1.0.py

问题2:配置文件 配置文件 不存在

原因:配置文件未放置在脚本同目录或命名不正确。

解决:确保 配置文件 与脚本在同一目录,文件名完全一致。

问题3:配置文件验证失败,缺少某字段

原因:配置文件缺少必填字段。

解决:根据提示补充对应字段。必填字段包括:system(packages、lvm、kernel、security)、mysql(root_password、my_cnf 及其 server-id、port、basedir、datadir)、test(database、user、password、table、table_structure、test_data)。

问题4:不支持的操作系统版本

原因:操作系统不在支持列表。

解决:确认操作系统为支持的类型(CentOS/AnolisOS/Rocky/Almalinux/RHEL/OEL 7/8/9、麒麟 V10、欧拉)。如确需在未列出系统安装,请手动完成或联系作者支持。

问题5:未找到 MySQL 安装包

原因:安装包未放置在正确位置或命名不符合规则。

解决:将安装包放至当前目录、soft 目录或 /tmp 目录,文件名符合 mysql-8/9.x.tar.gz 或 mysql-8/9.x.tar.xz 规则。可用命令确认:

ls -la mysql-8/9.*.tar.*

问题6:系统中已安装 MySQL / MySQL 服务已存在

原因:系统已有 MySQL 残留,与本次安装冲突。

解决:先卸载已有 MySQL 并清理服务:

yum remove -y mysql mysql-server mysql-client mariadb percona
systemctl stop mysql 2>/dev/null
systemctl disable mysql 2>/dev/null
rm -f /etc/systemd/system/mysql.service
systemctl daemon-reload

或使用脚本的自动清理功能(安装失败时脚本会自动清理)。

问题7:安装目录 / 数据目录已存在

原因:目标目录已有数据。

解决:执行脚本时按提示输入 y 清理目录数据,或手动清理后重新执行。

问题8:磁盘空间不足

原因:安装目录可用空间不足 10GB 或数据目录不足 20GB。

解决:使用 df -h 检查磁盘空间,扩容或更换磁盘后重试。

问题9:内存不足

原因:系统内存低于 2GB。

解决:增加内存至 2GB 以上(生产建议 8GB 以上),并相应调整 innodb_buffer_pool_size 参数。

问题10:CPU 核心数不足

原因:CPU 核心数低于 2 核。

解决:增加 CPU 核心数至 2 核及以上。

问题11:端口 3306 被占用

原因:3306 端口已被其他服务占用。

解决

# 查看占用端口的进程
lsof -i:3306
# 或
ss -tunlp | grep 3306

# 停止占用进程后重试,或在配置文件中修改 port 为其他端口

问题12:依赖包安装失败

原因:网络问题或 yum 仓库不可用。

解决:检查网络连接,配置可用的 yum 源。离线环境下可挂载系统光盘作为本地源(脚本会尝试自动挂载 /dev/cdrom 到 /mnt)。

问题13:LVM 配置失败 - 磁盘已是物理卷 / 卷组已存在 / 逻辑卷已存在

原因:指定的磁盘或卷组/逻辑卷已被使用。

解决:选择未使用的磁盘,或使用不同的卷组/逻辑卷名称,或手动清理现有 LVM:

# 查看现有LVM
pvs
vgs
lvs

# 清理(谨慎操作)
vgremove <vg_name>
pvremove <pv_device>

对于已配置好的 LVM,可在配置文件中设置 skip: true 跳过。

问题14:MySQL 服务启动失败

原因:常见原因包括端口占用、数据目录权限不对、配置文件错误、依赖库缺失等。

解决:脚本会自动显示错误日志关键信息,可执行以下命令排查:

# 查看MySQL错误日志
tail -100 /mysql/log/3306/fgedudb-error.err

# 查看服务状态
systemctl status mysql

# 查看systemd日志
journalctl -u mysql -n 50

# 检查端口
lsof -i:3306

# 检查数据目录权限
ls -la /mysql/data/3306/

修复后按回车让脚本重试,或输入 q 退出后排查。

问题15:数据库初始化失败

原因:配置参数错误、依赖库缺失、数据目录权限不对等。

解决

# 检查mysqld依赖库
ldd /mysql/app/mysql/bin/mysqld | grep "not found"
# 如有 not found,安装对应依赖包

# 查看初始化错误日志
cat /mysql/log/3306/fgedudb-error.err

# 确认数据目录权限
ls -ld /mysql/data/3306/data
chown -R mysql:mysql /mysql
chmod 700 /mysql/data/3306/data

问题16:root 密码设置失败 / 远程连接失败

原因:初始化异常或权限问题。

解决

# 检查是否能无密码登录
mysql -u root -e "SELECT 1;"

# 手动设置密码
mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';"
mysql -u root -p -e "CREATE USER 'root'@'%' IDENTIFIED BY '新密码'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"

问题17:测试数据初始化失败

原因:MySQL 服务异常、root 密码不对、SQL 语法错误。

解决:检查 MySQL 服务状态、root 密码是否正确、配置文件中测试数据的 SQL 是否符合语法。

问题18:pyyaml 未安装

原因:Python pyyaml 库未安装。

解决

# 在线安装
yum install -y python3-pyyaml
# 或
pip3 install pyyaml

# 离线安装:下载wheel包后
pip3 install pyyaml-xxx.whl

# 验证
python3 -c "import yaml; print(yaml.__version__)"

问题19:安装中断后如何完全清理重装

解决:参考 5.6 场景六手动清理,或直接重新执行脚本并按提示输入 y 清理目录数据。

问题20:大内存页配置告警(large_page_aligned_alloc mmap failed; errno 12)

原因:系统大内存页配置不足或未正确分配。

解决:检查内核参数 vm.nr_hugepages 配置值是否与实际内存匹配,或在 my.cnf 中关闭 large_pages 配置,调整 vm.hugetlb_shm_group 为 mysql 用户组 GID(1001)。

6.3 排查常用命令速查

# 查看MySQL服务状态
systemctl status mysql

# 查看MySQL进程
ps -ef | grep mysqld

# 查看端口监听
ss -tunlp | grep 3306
lsof -i:3306

# 查看MySQL错误日志
tail -100 /mysql/log/3306/fgedudb-error.err

# 查看安装日志
tail -100 mysql_install.log

# 查看systemd日志
journalctl -u mysql -n 50 --no-pager

# 查看数据目录权限
ls -la /mysql/data/3306/

# 查看磁盘空间
df -h

# 查看内存
free -h

# 查看CPU
lscpu

# 查看LVM
pvs; vgs; lvs

# 查看挂载
mount | grep mysql
cat /etc/fstab | grep mysql

七、生产环境建议

7.1 清理测试数据

安装完成后务必清理测试库与测试用户:

-- 登录MySQL
mysql -u root -p

-- 删除测试库
DROP DATABASE fgedudb;

-- 删除测试用户
DROP USER 'fgedu'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

-- 退出
exit;

7.2 修改默认密码

将 root 密码修改为符合企业安全策略的强密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新的强密码';
ALTER USER 'root'@'%' IDENTIFIED BY '新的强密码';
FLUSH PRIVILEGES;

7.3 调整 MySQL 参数

根据实际硬件配置与业务负载,调整 my.cnf 中以下关键参数:

  • innodb_buffer_pool_size:建议为物理内存的 50%~70%。
  • max_connections:根据并发连接数调整。
  • innodb_redo_log_capacity:根据写入量调整。
  • binlog_expire_logs_seconds:根据保留周期调整。

修改后重启 MySQL 使其生效:

systemctl restart mysql

7.4 安全加固

  • 生产环境建议不开放 root 远程账号,改为创建专用业务账号并授予最小权限。
  • 启用防火墙并仅开放必要端口(3306)。
  • 配置 MySQL SSL 连接。
  • 定期审计账号与权限。

7.5 定期备份

  • 配置定期逻辑备份(mysqldump)与物理备份(如使用 mysqlbackup 或 xtrabackup)。
  • 备份文件存放至 /backup 目录或其他独立存储。
  • 定期验证备份可恢复性。

八、脚本更新记录

v1.0 初始版本

  • 实现配置驱动型一键自动化安装。
  • 支持 CentOS/AnolisOS/Rocky/Almalinux/RHEL/OEL/麒麟 V10/欧拉 EulerOS 系统。
  • 自动执行系统前置配置。
  • 自动安装、初始化、配置 MySQL 8/9。
  • 自动创建测试数据并验证连接。
  • 添加错误处理和清理功能。
  • 完善日志记录。
  • 支持 .tar.gz 和 .tar.xz 格式安装包。
  • 支持多磁盘、多 VG 的 LVM 配置。
  • 支持跳过已配置的 LVM。
  • 使用 mysqld_safe 方式启动 MySQL。
  • 自动删除系统默认 /etc/my.cnf 和已安装的 mysql/mariadb/percona。
  • my.cnf 默认读取 /mysql/data/3306/my.cnf。
  • 自动设置系统时区为 Asia/Shanghai。
  • 启用 rc-local 服务实现开机自启动配置。
  • 安装前显示系统信息并要求确认。
  • 支持安装步骤失败后重试。
  • MySQL 启动失败时显示关键错误日志。

v1.0 功能增强

  • 添加目录数据检查:解压安装包时检查数据目录、日志目录、应用目录是否有数据。
  • 添加用户交互:提示用户是否清理目录数据。
  • 优化服务管理:清理目录数据前自动停止 MySQL 服务和进程。
  • 改进清理方式:使用 find 命令清理目录内容,保留目录本身。

九、联系方式

作者:风哥
官方网站   http://www.fgedu.net.cn , http://www.itpux.com
数据库教程  https://edu.51cto.com/lecturer/8020378.html
mysql一键安装教程1 https://edu.51cto.com/course/40552.html
mysql一键安装教程2 https://edu.51cto.com/course/40553.html

如有问题或建议,欢迎联系作者。

posted @ 2026-09-02 18:33  风哥数据库教程  阅读(3)  评论(0)    收藏  举报