rpm安装在银河麒麟V10 ARM上基本不可行,更可靠的是二进制包(.tar.xz)方式;需先确认aarch64架构和匹配的glibc版本,强制卸载mariadb-libs,初始化时必须显式指定--defaults-file,并配置防火墙与MySQL远程访问权限。

rpm 安装在银河麒麟V10 ARM上基本不可行,除非你手上有完整、顺序正确的 mysql-community-*.rpm 包集合,且系统 glibc 版本严格匹配(如 glibc2.17)。实际中更可靠的是二进制包(.tar.xz)方式——它不依赖系统包管理器,规避了麒麟V10自带的 yum 源缺失、rpm 依赖解析失败、systemd 单元文件不兼容等典型问题。
确认 aarch64 架构和 glibc 版本
ARM 部署的第一道门槛不是 MySQL,而是环境匹配。银河麒麟V10 的内核虽是 4.19.90,但用户空间 glibc 版本才是关键:
-
uname -m必须返回aarch64,否则所有 ARM 包都无效 -
ldd --version查出的 glibc 版本,决定了你要下载哪个后缀的包:
— 若为glibc 2.17(麒麟V10常见),选mysql-8.0.xx-linux-glibc2.17-aarch64.tar.xz
— 若为glibc 2.28(较新龙蜥或升级版麒麟),则必须用glibc2.28后缀包,混用会报cannot execute binary file: Exec format error - 别信“el7”或“el9”标签——麒麟V10 不是 RHEL 克隆版,
.rpm包里的%post脚本常调用systemctl或chkconfig,而麒麟V10 默认用sysvinit或定制 init,直接失败
卸载残留 mariadb-libs 是硬性前置条件
银河麒麟V10 预装的 mariadb-libs 会与 MySQL 的 libmysqlclient.so 冲突,导致 mysqld 启动时直接 segfault。这不是警告,是必现错误:
- 运行
rpm -qa | grep -i mariadb,重点看mariadb-libs和mariadb-connector-c - 用
rpm -e --nodeps <包名>强制卸载,--nodeps在此处安全且必要——MySQL 8 自带全部依赖库 - 卸载后执行
find /usr -name "libmysqlclient.so*" 2>/dev/null,确保无残留。若有,手动rm(注意备份) - 跳过这步?
mysqld --initialize可能成功,但后续service mysqld start一定失败,日志里只有Segmentation fault (core dumped)
初始化时必须显式指定 --defaults-file
二进制部署下,mysqld 默认不读 /etc/my.cnf,尤其在非标准路径(如 /usr/local/mysql)启动时。漏掉这个参数,会导致:
- 字符集变成默认
latin1,中文插入直接报错Incorrect string value -
lower_case_table_names=1不生效,表名大小写敏感,应用迁移出问题 -
datadir被忽略,数据写入到/usr/local/mysql/data而非你预设的/data/mysql - 正确命令示例:
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql --initialize
远程访问需同时放开两个层
装完 MySQL 以为能远程连?大概率卡在 Can't connect to MySQL server on 'xxx' (113)。这不是密码问题,是国产系统双层拦截:
- 第一层:麒麟V10 自带防火墙
ufw或iptables默认禁用3306端口,运行sudo ufw allow 3306或sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT - 第二层:MySQL 用户权限。
root@localhost默认不允许远程登录,必须显式创建:CREATE USER 'root'@'%' IDENTIFIED BY 'your_password';GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES; - 额外注意:
bind-address在/etc/my.cnf中必须设为0.0.0.0或注释掉,否则只监听本地
mysqld 初始化过程本身不复杂,但国产 ARM 环境下每个环节都有隐性耦合点——架构、glibc、init 机制、预装软件、安全策略,缺一不可。最容易被跳过的其实是 --defaults-file 和 glibc 版本校验,而这俩恰恰决定服务能否真正跑起来。


















