必须先添加oracle官方mysql 8.0仓库,因opensuse默认源不含mysql-community-server,直接zypper install mysql会安装mariadb或旧版;需严格匹配系统版本(如sl15对应leap 15.x),依次执行下载repo包、导入gpg密钥、安装repo、替换为国内镜像源、强制zypper refresh,再完整安装server/client/client-plugins/icu-data-files/common/libs组件,启动后须用临时密码登录并执行alter user切换认证插件为mysql_native_password。

必须先加官方 MySQL 8.0 仓库,系统自带源里根本没有
openSUSE 默认源不提供 mysql-community-server,直接 zypper install mysql 装出来的不是 Oracle 官方 MySQL 8.0,而是 MariaDB 或旧版包。必须手动添加 Oracle 官方仓库。关键点是 repo 包名要和你的系统版本严格匹配:sl15 对应 openSUSE Leap 15.x,sl16 对应 Leap 16.x(若已发布)。错用会导致 zypper search mysql-community-server 返回空结果。
执行顺序不能跳步:
- 下载 repo 包:
wget https://repo.mysql.com/mysql80-community-release-sl15-1.noarch.rpm - 导入 GPG 密钥(跳过会报
signature verification failed):rpm --import https://mirrors.nju.edu.cn/mysql/RPM-GPG-KEY-mysql-2023 - 安装 repo:
rpm -Uvh mysql80-community-release-sl15-1.noarch.rpm
替换镜像源并强制刷新,否则容易卡在超时或元数据过期
官方源域名 repo.mysql.com 在国内直连极不稳定,zypper refresh 常因超时失败,进而导致后续安装找不到包。必须手动替换为国内镜像源,并显式刷新。
操作步骤:
- 替换地址:
sed -i.bak 's|http://repo.mysql.com|https://mirrors.nju.edu.cn/mysql|g' /etc/zypp/repos.d/mysql-community*.repo - 强制刷新:
zypper refresh(别依赖 autorefresh,它可能没触发) - 验证是否生效:
zypper repos | grep mysql应看到状态为enabled且 URL 已变
安装必须指定完整组件名,漏装 client-plugins 就连不上
zypper install mysql-community-server 看似简洁,但实际会缺 mysql-community-client-plugins 和 mysql-community-icu-data-files,导致启动后执行 mysql -u root -p 报错:Plugin caching_sha2_password could not be loaded,或者连接直接被拒绝。
正确命令要一次性装全核心组件:
zypper install -y mysql-community-{server,client,client-plugins,icu-data-files,common,libs}-8.0.43-1.sl15.x86_64- 注意:版本号(如
8.0.43)和架构后缀(sl15.x86_64)必须与zypper info mysql-community-server显示的一致;不一致就提示no package provides - 不要写
*.rpm——zypper不支持通配符展开,会直接报错
启动后必须立刻处理初始密码和认证插件,否则连不进数据库
MySQL 8.0 启动首次生成的 root 密码只在日志里出现一次,路径通常是 /var/log/mysql/mysqld.log 或 /var/log/messages,用 grep 'temporary password' /var/log/mysql/mysqld.log 查。但更关键的是:默认认证插件是 caching_sha2_password,很多老客户端(比如某些 PHP 扩展、Navicat 旧版)不支持,直接报 Authentication plugin 'caching_sha2_password' cannot be loaded。
临时解决办法(登录后立即执行):
- 用初始密码登录:
mysql -u root -p - 切换插件并改密:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; - 如果提示密码策略不满足,先关策略再设密:
SET GLOBAL validate_password.policy = LOW;,再执行上条 ALTER
这个插件切换动作极易被忽略——看着服务起来了,mysql 命令却死活连不上,问题就出在这一步。











