rpm安装适合Red Hat系系统,自动处理依赖和配置但路径固定;tar.gz安装自由灵活可多实例并行,但需手动配置所有细节。

rpm安装:省事但受限于系统和路径
rpm安装本质是“开箱即用”的二进制部署,适合CentOS/RHEL/Fedora这类Red Hat系系统。它由包管理器自动处理依赖、注册服务、创建用户、写入默认路径,安装后直接执行 systemctl start mysqld 就能跑起来。
- 安装命令极简:
rpm -ivh mysql-community-server-8.0.33-1.el7.x86_64.rpm
- 卸载干净:
rpm -e mysql-community-server会连带删掉/var/lib/mysql、/etc/my.cnf等所有注册文件 - 但路径被硬编码死:二进制在
/usr/sbin/mysqld,数据目录强制为/var/lib/mysql,无法改;一台机器只能装一个实例(除非手动改配置+端口+datadir,但 systemd 服务脚本不认) - 容易踩坑:若系统已预装
mariadb-libs,rpm 会因冲突失败,必须先yum remove mariadb-libs --nodeps
tar.gz安装:自由但得自己扛全部责任
tar.gz(实际多为 mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz 这类二进制分发包)本质是“解压即用”,不走包管理器,所有路径、用户、服务、权限都得你手动配。
- 优势明显:可任意指定安装路径(如
/opt/mysql-8.0.33)、数据路径(/data/mysql-prod)、端口、socket 文件位置;同一台机器轻松并行运行多个 MySQL 实例 - 启动方式不同:没有
systemctl服务单元,得靠bin/mysqld_safe --defaults-file=/etc/my.cnf &或自己写 systemd unit 文件 - 初始化必须手动:
bin/mysqld --initialize --user=mysql --datadir=/data/mysql-prod --basedir=/opt/mysql-8.0.33
否则启动报错Can't find error-message file或空密码无法登录 - 常见疏漏:忘记
chown -R mysql:mysql /data/mysql-prod,或漏装libaio(CentOS 7+ 必装,否则mysqld直接段错误退出)
别混淆:tar.gz ≠ 源码编译,rpm ≠ 一定最安全
很多人误以为 tar.gz 是源码包——其实官网下载的 *-linux-glibc*.tar.* 全是预编译好的二进制,和 rpm 一样不编译,只是没打包进 rpm 数据库。真正源码编译(.tar.gz 后缀但内容含 configure 或 CMakeLists.txt)需装 cmake、gcc、ncurses-devel 等十几项依赖,耗时长,仅适合定制引擎或调试内核。
- rpm 宣称“自动处理依赖”,但只管 rpm 仓库里的包;若你系统用了第三方 repo(如 percona、remi),可能反而因版本冲突卡住
- tar.gz 虽要手动,但所有动作透明:你能看清
my.cnf放哪、日志写哪、pid 文件路径,故障排查时少一层黑盒 - 安全更新节奏不同:rpm 可用
yum update mysql-community-server一键升级;tar.gz 升级得停库、替换二进制、重跑mysql_upgrade(5.7+ 已弃用,但兼容性检查仍需手动做)
怎么选?看场景,不是看教程推荐
生产环境上线前,先问自己三个问题:
- 是否必须多实例共存?→ 选
tar.gz(例如开发/测试/预发共用一台物理机) - 是否由运维统一纳管(Ansible/Puppet)且要求标准化?→ 选
rpm(服务名、日志路径、启动方式全一致) - 是否在非 Red Hat 系发行版(如 Ubuntu/Debian)?→
rpm不能用,只能选tar.gz或官方.deb包
最后提醒一句:无论哪种方式,my.cnf 中的 lower_case_table_names=1 和 character_set_server=utf8mb4 这两项,装完立刻配,别等业务表建了一堆再改——改不了,只能 dump/reload。










