优先用官方apt/yum仓库安装,因其自动处理依赖、适配systemd、支持平滑升级;二进制包需手动配置服务单元、初始化路径易错、selinux权限难调、临时密码位置不统一,运维风险高。

直接上结论:在企业级 Linux(如 CentOS/RHEL 8+、Ubuntu 22.04+)中安装 MySQL 8.0,优先用官方 APT/YUM 仓库安装,而非二进制包。它自动处理依赖、适配 systemd、支持后续 apt upgrade 或 yum update 升级,运维成本最低。
为什么不用二进制包?
二进制包(mysql-8.0.x-linux-glibc2.17-x86_64.tar.xz)看似“纯净”,但实际埋了多个硬坑:
- 需手动写
systemd服务单元(/usr/lib/systemd/system/mysql.service),稍有路径或用户权限错误就Failed to start mysql.service: Unit mysql.service not found -
mysqld --initialize生成的临时密码藏在/var/log/mysqld.log或/data/mysql/mysql.err,而不同发行版日志路径不统一,容易漏查 -
lower_case_table_names=1必须在首次初始化时指定,二进制包方式若忘记加该参数,只能删库重来——线上环境不可接受 - 无 SELinux 上下文自动配置(RHEL/CentOS),常因
Permission denied卡在启动阶段,调试耗时远超预期
Ubuntu/Debian 系统:用 MySQL 官方 APT 仓库
这是最稳妥的路径,尤其适合需要长期维护的生产环境:
- 先卸载可能冲突的
mariadb:sudo apt purge mariadb-server mariadb-client - 下载并安装官方 APT 配置包(以
mysql-apt-config_0.8.24-1_all.deb为例):sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb,交互界面中必须选中 MySQL Server & Cluster → 按 Tab 切到 OK 回车 - 更新源并安装:
sudo apt update && sudo apt install mysql-server,安装过程会弹出图形化密码设置界面,选 Use Strong Password Encryption (RECOMMENDED) - 验证服务状态:
sudo systemctl status mysql,看到active (running)即可
RHEL/CentOS 8+:用 MySQL 官方 YUM 仓库
避免使用系统自带的 dnf module install mysql(版本老旧且默认禁用远程连接):
- 下载对应系统的 repo 包(CentOS 8 用
el8):sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-5.noarch.rpm - 启用 8.0 系列并禁用其他版本:
sudo dnf config-manager --disable mysql57-community --enable mysql80-community - 安装服务:
sudo dnf install mysql-community-server - 启动前检查 SELinux 状态:
sestatus,若为enforcing,需确保mysqld_port_t已赋给 3306:sudo semanage port -a -t mysqld_port_t -p tcp 3306(否则启动失败且报错极隐晦) - 初始化并启动:
sudo mysqld --initialize --user=mysql(注意:YUM 安装后无需手动初始化,systemctl start mysqld会自动触发)
初始化后必须做的三件事
无论哪种安装方式,首次启动后立即执行以下操作,否则后续开发和运维会反复踩坑:
- 查看临时密码:
sudo grep 'temporary password' /var/log/mysqld.log(RHEL)或sudo cat /etc/mysql/debian.cnf(Ubuntu),拿到后立刻登录:mysql -uroot -p - 强制改认证插件(兼容旧客户端):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!'; FLUSH PRIVILEGES; - 设字符集全局生效:编辑
/etc/my.cnf,在[mysqld]下添加character-set-server=utf8mb4和collation-server=utf8mb4_unicode_ci,然后sudo systemctl restart mysql
最关键的细节是:MySQL 8.0 的 caching_sha2_password 默认开启,但很多中间件(如旧版 Navicat、某些 Java JDBC 驱动)不支持,不提前切换认证方式,连上去就报 Client does not support authentication protocol——这个错误不会出现在安装日志里,只在第一次远程连接时爆发。











