
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.cnf3.1 [install] 节配置项 说明 示例值group 运行 MySQL 的系统组名 mysqluser 运行 MySQL 的系统用户名 mysqlroot_dir 所有 MySQL 相关文件的根目录将在此目录下以用户名创建子目录 /opt/mysqlprogram_dir 存放二进制程序包的相对目录名在 root_dir/user/ 下 programdata_dir 存放数据的相对目录名在 root_dir/user/ 下 dataconf_dir 存放配置文件的相对目录名在 root_dir/user/ 下 confinstance_dir 实例数据子目录名在 data_dir/ 下 instanceinstance_subdirs 实例下需要创建的子目录逗号分隔如 data,log,tmp data,log,tmpgeneric_binary MySQL 通用二进制压缩包的文件名必须放在脚本同目录下 mysql-8.0.41-linux-glibc2.28-x86_64.tar.xzbinary_dir 解压后得到的目录名即压缩包内顶层目录名 mysql-8.0.41-linux-glibc2.28-x86_64symlink_path 软链接路径指向 binary_dir便于版本切换 /usr/local/mysql说明最终的安装目录结构如下假设 root_dir/home/mysql, usermysql/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.xzbinary_dir mysql-8.0.46-linux-glibc2.28-x86_64[install]groupmysql usermysql root_dir/home generic_binary/home/blake/mysql-8.0.46-linux-glibc2.28-x86_64.tar.xz binary_dirmysql-8.0.46-linux-glibc2.28-x86_64 symlink_path/usr/local/mysql program_dirprogram data_dirdata conf_dirconf instance_dirmysqldata instance_subdirsmydata,sock,tmpdir,log,innodb_ts,innodb_log,undo,slowlog,binlog,relaylog[mysqld]usermysql port3306basedir[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_logON 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 赋予脚本执行权限chmodx 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#输入临时密码后执行ALTERUSERrootlocalhostIDENTIFIED 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 rootlocalhost: 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-address127.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 mysql8. 技术支持如遇到脚本本身逻辑问题请检查日志中 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 服务已启动祝您部署顺利