必须先配置MySQL官方仓库,因openEuler默认源仅含MariaDB,不含MySQL社区版;需使用el8后缀的仓库包(如mysql80-community-release-el8-3.noarch.rpm),导入RPM-GPG-KEY-mysql-2023密钥,并启用mysql80-community仓库,再安装server/client/client-plugins等全组件包。

直接用 dnf install mysql-community-server 会失败——openEuler 默认源里压根没有 MySQL 社区版,必须先配对官方仓库,否则连包都搜不到。
为什么 dnf search mysql 找不到 mysql-community-server
openEuler 自带的软件源只提供 mariadb,不包含 Oracle 官方的 MySQL。MySQL 官方仓库是独立维护的,且 repo 包名里的系统标识必须严格匹配:openEuler 22.03/24.03 都兼容 RHEL 8,所以必须用 el8 后缀的仓库包,不能用 el7 或 el9。
-
mysql80-community-release-el8-3.noarch.rpm是当前最稳的版本(截至 2026 年 9 月),el8表示适配 RHEL 8 兼容系,openEuler 就属于这一类 - 如果下载了
el7版本,dnf repolist能看到源,但dnf install会报No match for argument: mysql-community-server - 别信 “自动识别系统” —— repo 包不带检测逻辑,全靠人工选对后缀
rpm --import 导入密钥失败或被跳过
不导入 GPG 密钥,dnf install 会卡在 signature verification failed,哪怕你加了 --nogpgcheck,后续启动 mysqld 也可能因插件签名缺失而报 Plugin caching_sha2_password could not be loaded。
- 必须用最新密钥地址:
https://repo.mysql.com/RPM-GPG-KEY-mysql-2023(不是旧的mysql_pubkey.asc) - 执行命令后,检查是否生效:
rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n' | grep mysql,应看到含mysql-2023的条目 - 若提示
curl: (7) Failed to connect,说明网络不通,可手动下载再导入:wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 && rpm --import RPM-GPG-KEY-mysql-2023
安装后 mysql -u root -p 连不上,报错 Plugin 'caching_sha2_password' is not loaded
这不是密码错了,而是客户端插件没装全。只装 mysql-community-server 会导致 mysql-community-client-plugins 缺失,而该包提供 caching_sha2_password.so 和 mysql_native_password.so。
- 正确安装命令是:
dnf install -y mysql-community-{server,client,client-plugins,common,libs,icu-data-files}-8.0.44-1.el8.x86_64(注意版本号和架构要与 repo 包一致) - 如果提示
No package mysql-community-icu-data-files available,说明仓库未启用对应模块:运行dnf repolist enabled | grep mysql,确认输出含mysql80-community且状态为enabled;若只有mysql80-community-source,需手动启用主仓库:dnf config-manager --enable mysql80-community - 装完立刻验证:
ls /usr/lib64/mysql/plugin/caching_sha2_password.so存在才算真正就位
初始登录成功但改不了密码,ALTER USER 报错 ERROR 1396
MySQL 8.0 初始化后生成的 root 用户默认 host 是 'localhost',但某些 openEuler 环境 DNS 解析把 localhost 映射成 127.0.0.1,导致 'root'@'localhost' 实际不可见。
- 先查真实用户:
mysql -u root -p -e "SELECT User, Host FROM mysql.user;" - 如果看到
root | 127.0.0.1,就得用这个 host 改密码:ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'YourPass123!'; - 更彻底的解法是初始化时指定 host:
mysqld --initialize --user=mysql --explicit_defaults_for_timestamp不够,得配合配置文件中skip-name-resolve关闭 DNS 反查 - 别急着删用户——误删
'root'@'localhost'可能导致无法本地登录,只能重进--skip-grant-tables恢复
最关键的遗漏点往往不在安装命令本身,而在仓库启用状态、插件包完整性、以及 root 用户 host 的实际值——这三个地方任一出错,都会让整个流程卡在“看似装好了却连不上”的死循环里。


















