在openeuler上安装mysql 8.0必须使用mysql-community-server包,而非dnf默认的mysql-server(实为mariadb别名);需先卸载mariadb-libs等冲突包,再添加mysql官方mysql80-community源,禁用selinux并清空/etc/my.cnf以避免启动失败。

在 openEuler 上直接 dnf install mysql-server 装出来的不是 MySQL 8.0,而是 MariaDB —— 这是默认源里的别名,装完启动失败、连不上、mysqld 找不到服务单元都是必然结果。必须明确使用 Oracle 官方的 mysql-community-server 包,并绕过默认源干扰。
先卸载所有 MariaDB 相关包,避免冲突
openEuler 22.03/24.03 默认预装 mariadb-libs 等组件,它们会和 MySQL 的 libmysqlclient 冲突,导致安装后 mysqld 启动报 symbol lookup error 或直接段错误。
- 运行
rpm -qa | grep -E 'mysql|mariadb'查残留包 - 逐个卸载,重点包括:
mariadb-libs、mariadb-common、mysql-common(如果存在) - 加
--nodeps强制卸载(rpm -e --nodeps mariadb-libs),否则依赖锁死无法清除 - 卸完再跑一遍
rpm -qa | grep -E 'mysql|mariadb',输出应为空
必须用 mysql80-community-release-el8 源,不能信 dnf search 结果
dnf search mysql-server 可能显示有包,但那个 mysql-server 仍是 MariaDB 别名;真正可用的 MySQL 8.0 服务端只在官方 mysql80-community 仓库里,且需手动启用。
- 进
/etc/yum.repos.d/,执行:wget https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm - 安装源:
rpm -ivh mysql80-community-release-el8-3.noarch.rpm - 验证:
dnf repolist enabled | grep mysql80-community—— 必须看到该仓库名才有效 - 禁用其他可能干扰的 MySQL 子库(如
mysql57-community):dnf config-manager --disable mysql57-community
安装 mysql-community-server 后,启动前必须处理 SELinux 和 /etc/my.cnf
openEuler 22.03+ 默认开启 SELinux,而 MySQL 8.0 的默认策略不兼容其文件上下文,systemctl start mysqld 报 Permission denied 或 Failed to start 几乎必现。
- 临时放行:
setenforce 0(验证阶段可用) - 永久关闭(生产环境慎用):
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config,然后重启 -
/etc/my.cnf若存在,极大概率含 MariaDB 风格配置(如skip-grant-tables、innodb_buffer_pool_size = 128M等),MySQL 8.0 解析失败直接退出。建议先mv /etc/my.cnf /etc/my.cnf.bak,让服务首次启动自动生成兼容配置 - 确保
/var/lib/mysql归属正确:chown -R mysql:mysql /var/lib/mysql,权限设为755
初始化密码与首次登录必须用 mysql_native_password 插件
MySQL 8.0 默认用 caching_sha2_password,但部分客户端(尤其旧版 mysql CLI 或某些连接池)不支持,连上就报 Client does not support authentication protocol。
- 启动服务:
systemctl start mysqld,查看日志:journalctl -u mysqld -n 50 --no-pager,确认无 fatal 错误 - 提取临时密码:
grep 'temporary password' /var/log/mysqld.log - 登录后立即切换认证插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_secure_password'; - 如需远程访问,再补:
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_secure_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
最易被忽略的是:openEuler 的 /etc/my.cnf 不是“可选配置”,而是“默认破坏项”——哪怕只有一行注释,MySQL 8.0 也可能拒绝启动。清空它比调试它快得多。另外,mysql-community-server 和 mysql-server 在 openEuler 里根本不是同一个东西,看错包名等于白装。











