麒麟系统部署MySQL需先确认架构与版本:运行uname -m和cat /etc/os-release,按x86_64/aarch64/loongarch64选择对应安装包;卸载mariadb-libs并刷新库缓存;初始化前修正datadir权限与SELinux上下文;配置bind-address=0.0.0.0并调整认证插件。

确认系统架构和版本再动手
麒麟系统不是“装个MySQL就行”的通用环境,uname -m 和 cat /etc/os-release 必须先跑一遍——x86_64、aarch64、loongarch64 对应的安装包、依赖、甚至初始化命令都不同。比如你在鲲鹏服务器(aarch64)上硬塞了 x86_64 的 mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz,解压后 ./bin/mysqld 直接报 cannot execute binary file: Exec format error,连错误日志都来不及写。
- 输出
aarch64?别碰官网“Linux - Generic x86_64”包,去华为云镜像或 MySQL 官网找带glibc2.28-aarch64后缀的 tar 包 - 输出
loongarch64?官方没提供预编译包,得从源码编译,或者用麒麟软件仓库里已适配的 RPM(但版本通常滞后) - 看到
Kylin Linux Advanced Server release V10 (Sword)或V11才算靠谱;如果是桌面版(Kylin Desktop),systemd服务脚本路径和 SELinux 策略可能略有差异,别直接抄服务器版配置
卸载 mariadb-libs 是必须动作,但不能乱删
麒麟 V10/V11 默认预装 mariadb-libs,它和 MySQL 共享 libmysqlclient 符号,不清理会导致 mysqld 启动时找不到 libcrypto.so.1.1 或直接段错误。但 rpm -e mariadb-libs 可能被系统其他组件依赖(比如某些麒麟自研工具),强行 --nodeps 卸载后,dnf update 会失败或提示冲突。
- 先查清楚:运行
rpm -qa | grep -i mariadb,只关注mariadb-libs-*.rpm这一项,其它如mariadb-server一般没装,不用管 - 稳妥做法:用
rpm -e --nodeps mariadb-libs-*.rpm卸载,之后立即执行ldconfig刷新动态库缓存 - 如果后续发现
yum命令异常,再临时重建软链:ln -sf /usr/lib64/libmariadb.so.3 /usr/lib64/libmysqlclient.so.21(仅限 MySQL 8.0.x,版本号按实际调整)
初始化失败?大概率是 datadir 权限或 my.cnf 路径错了
执行 mysqld --initialize 报错 Can't create test file /usr/local/mysql/data/xxx.lower-test,90% 是因为 /usr/local/mysql/data 所属用户不是 mysql,或者 /etc/my.cnf 里写的 datadir 和实际目录不一致。更隐蔽的是:麒麟系统默认启用 SELinux,即使权限看着对,也会因上下文标签拦截文件创建。
- 初始化前务必确认:
chown -R mysql:mysql /usr/local/mysql/data,且ls -ld /usr/local/mysql/data输出第一列是drwxr-xr-x.(末尾那个点表示 SELinux 上下文存在) -
my.cnf必须放在/etc/my.cnf或/usr/local/mysql/my.cnf,不能随便放~/my.cnf;MySQL 8.0 默认不读取用户家目录下的配置 - 如果 init 失败且日志空白,加参数试:
mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --verbose,看卡在哪一步
远程连不上?别只开防火墙,检查 bind-address 和 plugin
开了 firewall-cmd --add-port=3306/tcp 还是连不上,常见原因是 MySQL 默认监听 127.0.0.1,或者 root 用户认证插件是 caching_sha2_password,而旧版客户端(如某些国产数据库管理工具)不支持。
- 进 MySQL 后先确认:
SELECT host, user, plugin FROM mysql.user WHERE user='root';,如果plugin是caching_sha2_password,改掉:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpass'; -
my.cnf里必须有bind-address = 0.0.0.0(不是*,也不是注释掉),且确保没有其它配置文件(如/etc/my.cnf.d/*.cnf)覆盖了它 - 麒麟 V11 某些安全加固版默认启用
iptables规则链,firewalld关了也不顶用,得查iptables -L -n | grep 3306
最麻烦的其实是 aarch64 下 glibc 版本错配——比如你下了 glibc2.28 包,但系统是 glibc2.27,mysqld 启动就报 version `GLIBC_2.28' not found。这时候别硬改系统 glibc,换用低版本 MySQL(如 8.0.33)或找对应 glibc 的构建包,比折腾兼容性更省时间。


















