Alibaba Cloud Linux 3 默认通过 dnf module enable mysql:8.0 + dnf install @mysql 安装 MySQL 8.0,需手动修复 SELinux 上下文、切换 root 认证插件为 mysql_native_password,并配置远程访问权限及防火墙。

Alibaba Cloud Linux 3 默认用 dnf + AppStream 模块安装 MySQL 8.0
Alibaba Cloud Linux 3(ACL3)不再推荐手动导入 MySQL 官方 RPM 仓库,而是原生支持 mysql:8.0 AppStream 模块 —— 这是 Red Hat 系生态(包括 ACL3)官方维护的、经过兼容性验证的稳定模块。直接启用它,比下载 mysql80-community-release-el7-*.rpm 更安全、更轻量,且避免 GPG 校验失败、libaio 缺失、compat-openssl10 冲突等常见问题。
执行前先确认系统版本:
cat /etc/alinux-release
输出应含 Alibaba Cloud Linux (Aliyun Linux) release 3.。如果不是,请勿强行套用本流程。
- 运行
dnf module list mysql查看可用模块 —— 正常应显示mysql:8.0(state 为enabled或default) - 若未启用,执行
dnf module enable mysql:8.0 - 再执行
dnf install @mysql(注意@符号,表示安装该模块组) - 安装完成后,
mysqld服务已注册但未启动,数据目录/var/lib/mysql为空,需初始化
初始化失败?检查 SELinux 和目录权限
运行 systemctl start mysqld 后如果报 Job for mysqld.service failed,或日志中出现 Can't create test file /var/lib/mysql/...,大概率是 SELinux 上下文或目录所有权异常 —— ACL3 默认启用 enforcing 模式,而 dnf install @mysql 不会自动修复 /var/lib/mysql 的上下文。
- 先停服务:
systemctl stop mysqld - 清空残留数据(仅限首次安装):
rm -rf /var/lib/mysql/* - 重设目录所有权:
chown -R mysql:mysql /var/lib/mysql - 恢复 SELinux 上下文:
restorecon -Rv /var/lib/mysql - 再启动:
systemctl start mysqld,成功后应自动生成/var/log/mysqld.log
此时 grep "temporary password" /var/log/mysqld.log 才能拿到初始密码;若无输出,说明初始化未触发,需手动运行 mysqld --initialize --user=mysql(但通常不需)。
mysql_secure_installation 报错 ERROR 1045?别跳过 root@localhost 认证环节
用初始密码登录 mysql -u root -p 成功后,立即运行 mysql_secure_installation 是标准做法。但它在 ACL3 + AppStream 模式下容易卡在第二步(设置密码),报错 ERROR 1045 (28000): Access denied for user 'root'@'localhost' —— 原因是:AppStream 模块默认使用 caching_sha2_password 插件,而 mysql_secure_installation 工具内部仍尝试用旧协议握手。
- 绕过方法:先用初始密码登录,执行以下语句强制切换认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; - 再退出,用新密码重新登录,此时
mysql_secure_installation就能正常交互 - 切勿直接注释
skip-grant-tables:ACL3 的 systemd 服务单元对安全模式有额外限制,可能导致mysqld无法加载插件
开放远程访问时,bind-address=0.0.0.0 不够,还得改 authentication_string
修改 /etc/my.cnf 中的 bind-address = 0.0.0.0 并重启服务后,外网仍连不上,常见原因是 root 用户的 host 字段仍是 localhost,且其 authentication_string 字段为空或加密格式不兼容客户端。
- 登录后先查用户:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root'; - 若
Host是localhost,执行:CREATE USER 'root'@'%' IDENTIFIED BY 'your_new_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; - 若想复用原有 root 账户,必须同时更新 host 和认证方式:
UPDATE mysql.user SET Host='%', plugin='mysql_native_password' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES; - 阿里云安全组和 firewalld 必须同步放行
3306/tcp,仅改 MySQL 配置无效
AppStream 模块部署的 MySQL 8.0 在 ACL3 上最易被忽略的点是:它不自动处理 SELinux 上下文、不兼容 mysql_secure_installation 的默认握手逻辑、且 root 用户默认不具备 % 访问权限 —— 这三点不逐一验证,90% 的“安装成功但连不上”问题都会发生。











