最稳方案是官方YUM/APT仓库加自动化脚本;二进制包适合强控路径权限但易出错,新手不建议手写完整逻辑。需彻底清理旧MySQL/MariaDB残留、正确导入GPG密钥、显式启用mysql80-community仓库、提取并重置临时密码、动态适配systemd服务名,并配置远程访问。

直接上结论:用官方 YUM/APT 仓库 + 自动化脚本最稳,二进制包安装适合路径/权限强控场景,但初始化、服务注册、密码提取这些环节极易出错,不建议新手手写完整逻辑。
脚本必须先清理旧 MySQL 和 MariaDB
残留的 mysql-community-libs 或 mariadb-libs 会导致 yum install mysql-community-server 报依赖冲突或 GPG 验证失败。常见错误现象是:
error: Failed dependencies: mysql-common(x86-64) >= 8.0.11 is needed by mysql-community-server-8.0.27-1.el7.x86_64Public key for mysql-community-client-8.0.28-1.el7.x86_64.rpm is not installed
实操建议:
- 先执行
rpm -qa | grep -i 'mysql\|mariadb',对每个结果跑rpm -e --nodeps <pkgname> - 强制删掉
/var/lib/mysql、/etc/my.cnf、/var/log/mysqld.log(哪怕目录不存在也加rm -rf防 silent fail) - 检查
id -u mysql和getent group mysql,存在就userdel -r mysql && groupdel mysql
YUM 安装脚本要处理 GPG 密钥和仓库开关
CentOS/RHEL 系统下,mysql80-community-release 包只是“开关”,不自带软件;若没导入密钥或仓库被 disable,yum install 会卡在验证环节。典型错误:
GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql"-
No package mysql-community-server available.(其实是mysql80-community仓库被 disable 了)
实操建议:
- 下载并安装 repo 包后,立刻执行
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 - 用
yum-config-manager --disable mysql57-community --enable mysql80-community显式开关,别依赖默认状态 - 加
yum makecache并捕获退出码,失败就exit 1,避免后续命令静默跳过
初始化后必须立即提取临时密码并重置
mysqld 第一次启动会生成临时 root 密码,写在 /var/log/mysqld.log(RHEL/CentOS)或 /var/log/mysql/error.log(Ubuntu),但脚本里不提取就直接 mysql -uroot -p 必然失败。更麻烦的是 MySQL 8.0 默认启用 validate_password 插件,简单密码如 123456 会被拒绝。
实操建议:
- 用
grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'提取密码,注意空格和换行干扰 - 重置密码前先关插件:
set global validate_password.policy = LOW;,否则alter user会报ERROR 1819 (HY000) - 执行
mysql -uroot -p<temp_pwd> -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_pwd';",不要交互式输入
systemd 服务名因发行版而异,脚本必须检测
Ubuntu/Debian 用 mysql,CentOS/RHEL 用 mysqld —— 写死服务名会导致 systemctl start 失败。且 systemctl enable 必须在 start 成功后执行,否则开机不自启。
实操建议:
- 用
ls /usr/lib/systemd/system/ | grep -E '^(mysql|mysqld)\.service$'推断服务名,或读/etc/os-release的ID字段 - 启动后加
systemctl is-active --quiet mysqld && systemctl enable mysqld,避免 enable 未运行的服务 - 远程访问需额外开
bind-address = 0.0.0.0和create user 'root'@'%' identified with mysql_native_password by 'xxx';,否则 Navicat 连不上
MySQL 8.0 自动安装不是“复制粘贴就能跑”,关键在清理干净、密钥可信、密码可取、服务名准确这四点。漏掉任一环节,脚本大概率半途卡死,日志里只有一行 Job for mysqld.service failed —— 而真正原因藏在前面三步里。

















