MySQL 自动安装脚本操作手册
1. 概述
install_mysql.py 是一个用于在 Linux 系统上自动化安装 MySQL 社区版(通用二进制包)的 Python 脚本。
它通过读取同一目录下的 my.cnf 配置文件,完成从创建系统用户、解压安装包、初始化数据库到注册 systemd 服务的全流程,极大简化了手动部署的繁琐步骤。
下载地址:MySQL 自动安装Python脚本
目标系统:支持 systemd 的 Linux 发行版(如 CentOS 7+、RHEL 7+、Ubuntu 16.04+ 等)。
运行身份:必须使用 root 用户执行(因为涉及创建用户、修改系统目录、注册服务等操作)。
依赖环境:Python 3.6+(建议 3.8+),且已安装 tar、chown、systemctl 等系统工具。
2. 前置准备
2.1 下载 MySQL 通用二进制包
从 MySQL 官网(https://dev.mysql.com/downloads/mysql/)下载适合您系统架构的 Linux - Generic 二进制压缩包(.tar.gz 或 .tar.xz)。
例如:mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz。
2.2 准备配置文件 my.cnf
脚本依赖同目录下的 my.cnf 文件,该文件包含 [install] 和 [mysqld] 两个节。
[install] 节定义安装路径、用户组、目录结构等参数。
[mysqld] 节定义 MySQL 服务端配置项(会生成最终的 my.cnf)。
请务必按照下文“配置文件详解”填写完整,否则脚本将报错退出。
2.3 确保系统环境
- 关闭或配置好防火墙(如需外部访问,开放 3306 端口)。
- 若启用 SELinux,需提前设置 MySQL 数据目录上下文(或临时设为 permissive 测试)。
- 确保 /etc/systemd/system/ 目录可写,且 systemctl 命令可用。
3. 配置文件详解(my.cnf)
3.1 [install] 节
配置项 说明 示例值
group 运行 MySQL 的系统组名 mysql
user 运行 MySQL 的系统用户名 mysql
root_dir 所有 MySQL 相关文件的根目录(将在此目录下以用户名创建子目录) /opt/mysql
program_dir 存放二进制程序包的相对目录名(在 root_dir/user/ 下) program
data_dir 存放数据的相对目录名(在 root_dir/user/ 下) data
conf_dir 存放配置文件的相对目录名(在 root_dir/user/ 下) conf
instance_dir 实例数据子目录名(在 data_dir/ 下) instance
instance_subdirs 实例下需要创建的子目录,逗号分隔(如 data,log,tmp) data,log,tmp
generic_binary MySQL 通用二进制压缩包的文件名(必须放在脚本同目录下) mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz
binary_dir 解压后得到的目录名(即压缩包内顶层目录名) mysql-8.0.41-linux-glibc2.28-x86_64
symlink_path 软链接路径,指向 binary_dir,便于版本切换 /usr/local/mysql
说明:
最终的安装目录结构如下(假设 root_dir=/home/mysql, user=mysql):
/home/mysql/
├── program/ (程序目录)
│ └── mysql-8.0.41-linux-glibc2.28-x86_64/ (程序版本,用于区分不同版本)
├── data/ (数据目录)
│ └── mysqldata/ (实例目录,用于区别多实例数据库)
│ ├── mydata/ (数据库数据目录)
│ ├── sock/ (pid sock 文件目录)
│ ├── log/ (日志目录)
│ ├── tmpdir/ (临时目录)
│ ├── innodb_ts (InnoDB系统表空间)
│ ├── innodb_log (redo 日志)
│ ├── undo (undo 表空间)
│ ├── slowlog (慢日志)
│ ├── binlog (二进制日志)
│ └── relaylog (中继日志)
└── conf/
└── my.cnf (由脚本生成)
symlink_path 通常设为 /usr/local/mysql,便于 PATH 引用。
3.2 [mysqld] 节
该节的所有键值对将作为 MySQL 服务配置项写入最终的 my.cnf。
根据下载的二进制文件包修改,改成自己下载的名的文件名。
generic_binary = /home/blake/mysql-8.0.46-linux-glibc2.28-x86_64.tar.xz
binary_dir = mysql-8.0.46-linux-glibc2.28-x86_64
[install]group=mysql user=mysql root_dir=/home generic_binary=/home/blake/mysql-8.0.46-linux-glibc2.28-x86_64.tar.xz binary_dir=mysql-8.0.46-linux-glibc2.28-x86_64 symlink_path=/usr/local/mysql program_dir=program data_dir=data conf_dir=conf instance_dir=mysqldata instance_subdirs=mydata,sock,tmpdir,log,innodb_ts,innodb_log,undo,slowlog,binlog,relaylog[mysqld]user=mysql port=3306basedir=[symlink_path]socket=[instance_path]/sock/mysql.sock pid-file=[instance_path]/sock/mysql.pid datadir=[instance_path]/mydata tmpdir=[instance_path]/tmpdir log-error=[instance_path]/log/error.log slow_query_log=ON slow_query_log_file=[instance_path]/slowlog/slow-query.log log-bin=[instance_path]/binlog/mysql-binrelay-log=[instance_path]/relaylog/mysql-relay-bininnodb_data_home_dir=[instance_path]/innodb_ts innodb_log_group_home_dir=[instance_path]/innodb_log innodb_undo_directory=[instance_path]/undo/注意:必须至少设置 basedir、datadir、socket 等关键项,否则 MySQL 可能无法正常初始化或启动。
4. 执行步骤
4.1 放置文件
将以下三个文件放在同一目录下:
- install_mysql.py(脚本文件)
- my.cnf(配置文件)
- mysql--linux-xxx.tar.xz(二进制压缩包)
4.2 赋予脚本执行权限
chmod+x install_mysql.py4.3 以 root 执行
sudopython3 ./install_mysql.py脚本将自动执行所有步骤,并在终端输出详细日志。执行过程约需 1~5 分钟(取决于压缩包大小和磁盘速度)。
4.4 初始化完成后获取临时密码
脚本成功执行后,会在日志中打印 MySQL 生成的临时 root 密码,形如:
2026-07-0210:30:15 - INFO - 临时密码: xxxxxx (请立即修改) 请立即复制保存该密码,否则后续无法登录。4.5 启动与验证
脚本会自动启用并启动 mysqld 服务,您可以用以下命令检查状态:
systemctl status mysqld若服务正常运行,可通过以下命令登录并修改密码:
/usr/local/mysql/bin/mysql-uroot-p#输入临时密码后,执行:ALTERUSER'root'@'localhost'IDENTIFIED BY'新密码';5. 常见问题与排错
5.1 脚本报错“配置文件缺少 [install] 节”
请检查 my.cnf 中是否包含 [install] 和 [mysqld] 节,且无拼写错误。
确保配置项名称与脚本要求完全一致(区分大小写)。
5.2 解压时报错“发现危险路径成员”
这是安全保护机制,说明您的二进制压缩包可能被篡改或包含恶意链接。请从官网重新下载正版包。
5.3 初始化失败,提示“data directory already exists”
脚本不会覆盖已有数据目录。请清空 instance_path 下的所有内容后重试,或调整 instance_dir 配置。
5.4 临时密码提取失败
脚本会打印完整的初始化输出(stderr),您可以手动从中查找类似 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: xxxxxx 的行,复制末尾的密码。
5.5 MySQL 服务启动失败
- 查看日志:journalctl -u mysqld -n 50,常见原因:
- 配置文件中的路径权限不足(确保目录属主为 mysql:mysql)。
- 端口被占用(修改 port 配置)。
- SELinux 阻止(临时 setenforce 0 测试)。
- 内存不足(调整 innodb_buffer_pool_size 等)。
5.6 环境变量未生效
脚本已生成 /etc/profile.d/mysql.sh,重新登录终端或执行 source /etc/profile.d/mysql.sh 即可使 mysql 命令可用。
5.7 如何升级 MySQL 版本?
修改 my.cnf 中的 generic_binary 和 binary_dir 为新版本,删除旧的软链接和二进制目录,然后重新运行脚本(数据目录若不变,需手动备份或迁移)。
6. 安全建议
修改默认 root 密码:初始化后立即更改,并设置强密码。
限制访问来源:在 my.cnf 中设置 bind-address=127.0.0.1 或通过防火墙限制。
定期备份数据:使用 mysqldump 或物理备份工具。
监控日志:定期检查 log-error 文件,及时发现异常。
保持更新:订阅 MySQL 安全公告,及时打补丁。
7. 卸载说明
- 如需彻底卸载,请按顺序执行:
- 停止服务:systemctl stop mysqld
- 禁用服务:systemctl disable mysqld
- 删除服务文件:rm /etc/systemd/system/mysqld.service
- 删除安装目录:rm -rf /opt/mysql/mysql(根据您的 root_dir 调整)
- 删除软链接:rm /usr/local/mysql
- 删除环境变量文件:rm /etc/profile.d/mysql.sh
- 删除系统用户(可选):userdel mysql; groupdel mysql
8. 技术支持
如遇到脚本本身逻辑问题,请检查日志中 ERROR 级别信息,并对照脚本源码排查。
对于 MySQL 运行时的配置调优,请参考官方文档(https://dev.mysql.com/doc/)。
附录:脚本执行示例输出(节选)
2026-07-0210:30:00 - INFO - 执行:groupaddmysql2026-07-0210:30:00 - INFO - 组 mysql 创建成功2026-07-0210:30:00 - INFO - 执行:useradd-m-s/sbin/nologin-gmysql mysql2026-07-0210:30:00 - INFO - 用户 mysql 创建成功2026-07-0210:30:00 - INFO - 创建目录: /opt/mysql/mysql/program(权限 0o755)...2026-07-0210:30:15 - INFO - 临时密码: 3kL#f9Pq (请立即修改)2026-07-0210:30:20 - INFO - MySQL 服务已启动祝您部署顺利!