麒麟ARM系统上MySQL部署避坑,编译安装步骤详解?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1069个文字,预计阅读时间需要5分钟。
ARM版麒麟系统上安装MySQL,如果不清理mariadb残留、不兼容aarch64架构、不处理libncurses.so.5和libssl.so.10缺失,基本无法安装成功。
确认系统架构与MariaDB残留必须一步到位
麒麟V10 ARM环境里,uname -m 输出必须是 aarch64,否则所有后续下载的MySQL包都无效。x86_64包扔进去直接报 cannot execute binary file。同时,rpm -qa | grep -i mariadb 一查一个准——只要输出非空,就说明有冲突源。
常见错误现象:安装MySQL RPM时卡在 conflicts with file from package mariadb-libs;或启动后日志里反复出现 symbol lookup error: undefined symbol: mysql_server_init。
- 先停服务:
systemctl stop mariadb 2>/dev/null、systemctl stop mysqld 2>/dev/null - 强制卸载全部相关包:
sudo rpm -e --nodeps $(rpm -qa | grep -E 'mariadb|mysql' | grep -v mysql-community) - 删干净残留:
rm -rf /var/lib/mysql /etc/my.cnf* /usr/lib64/libmysqlclient* - 验证是否清空:
rpm -qa | grep -i mariadb应无输出;ldd /usr/bin/mysql | grep "not found"若报错,说明还有库没清或没装
libncurses.so.5 和 libtinfo.so.5 缺失怎么修
MySQL 5.7/8.x 二进制包编译时链接的是较老的 ncurses 5 系列,但麒麟V10默认带的是 libncurses.so.6.1 和 libtinfo.so.6。直接运行 mysqld --initialize 就会崩在 error while loading shared libraries: libncurses.so.5。
不能靠 yum install ncurses-compat-libs —— 麒麟V10的软件源里这个包名可能叫 ncurses-compat-libs 或压根没有;离线环境更没法自动拉。
- 先找系统里已有的库:
find /usr/lib64 -name "libncurses.so.*" 2>/dev/null,通常看到/usr/lib64/libncurses.so.6.1 - 创建软链(仅限
/usr/lib64):sudo ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5 - 同理处理
libtinfo:sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5 - 别碰
/lib64下的系统核心库;软链目标必须是绝对路径,且不能指向符号链接本身(避免循环)
libssl.so.10 not found 的安全解法
MySQL 8.0.27+ 在ARM下常因 OpenSSL 版本不匹配报 libssl.so.10 not found。这不是版本低,而是“名字不对”——麒麟V10自带的是 libssl.so.1.1,而MySQL找的是 RHEL/CentOS 风格的旧命名。
严禁用 ln -s /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.10 硬凑,某些场景会触发 TLS 握手失败或连接中断。
- 正确做法:装兼容包
compat-openssl10,来源必须是可信镜像(如阿里云 CentOS Vault):wget http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/aarch64/os/Packages/compat-openssl10-1.0.2o-4.el8.aarch64.rpm - 安装时加
--nodeps:sudo rpm -ivh compat-openssl10-1.0.2o-4.el8.aarch64.rpm --nodeps - 验证:
ls /usr/lib64/libssl.so.10*应存在;ldd $(which mysqld) | grep ssl不再报错 - 注意:该包只提供兼容符号链接和基础函数,不替换系统 OpenSSL 主库,不影响其他服务
初始化与启动前必须检查的三件事
即使二进制能跑、依赖全通,mysqld --initialize 还可能静默失败,导致后续 systemctl start mysqld 一直卡在 activating。
- 用户权限:必须用
mysql用户初始化数据目录,不能用 root 直接跑:sudo chown -R mysql:mysql /usr/local/mysql/data - SELinux 状态:麒麟V10默认启用,
sestatus若为enforcing,需临时设为permissive或放行 MySQL 端口与数据目录上下文 - 配置文件路径:MySQL 8 默认不读
/etc/my.cnf,要显式指定:mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql;否则初始化会写到/var/lib/mysql,跟 systemd 服务定义的datadir不一致
最易被忽略的是 datadir 权限和 SELinux 上下文——哪怕所有命令都敲对了,这两个点出问题,服务就是起不来,日志里却只有一行 Starting MySQL... FAILED!。
本文共计1069个文字,预计阅读时间需要5分钟。
ARM版麒麟系统上安装MySQL,如果不清理mariadb残留、不兼容aarch64架构、不处理libncurses.so.5和libssl.so.10缺失,基本无法安装成功。
确认系统架构与MariaDB残留必须一步到位
麒麟V10 ARM环境里,uname -m 输出必须是 aarch64,否则所有后续下载的MySQL包都无效。x86_64包扔进去直接报 cannot execute binary file。同时,rpm -qa | grep -i mariadb 一查一个准——只要输出非空,就说明有冲突源。
常见错误现象:安装MySQL RPM时卡在 conflicts with file from package mariadb-libs;或启动后日志里反复出现 symbol lookup error: undefined symbol: mysql_server_init。
- 先停服务:
systemctl stop mariadb 2>/dev/null、systemctl stop mysqld 2>/dev/null - 强制卸载全部相关包:
sudo rpm -e --nodeps $(rpm -qa | grep -E 'mariadb|mysql' | grep -v mysql-community) - 删干净残留:
rm -rf /var/lib/mysql /etc/my.cnf* /usr/lib64/libmysqlclient* - 验证是否清空:
rpm -qa | grep -i mariadb应无输出;ldd /usr/bin/mysql | grep "not found"若报错,说明还有库没清或没装
libncurses.so.5 和 libtinfo.so.5 缺失怎么修
MySQL 5.7/8.x 二进制包编译时链接的是较老的 ncurses 5 系列,但麒麟V10默认带的是 libncurses.so.6.1 和 libtinfo.so.6。直接运行 mysqld --initialize 就会崩在 error while loading shared libraries: libncurses.so.5。
不能靠 yum install ncurses-compat-libs —— 麒麟V10的软件源里这个包名可能叫 ncurses-compat-libs 或压根没有;离线环境更没法自动拉。
- 先找系统里已有的库:
find /usr/lib64 -name "libncurses.so.*" 2>/dev/null,通常看到/usr/lib64/libncurses.so.6.1 - 创建软链(仅限
/usr/lib64):sudo ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5 - 同理处理
libtinfo:sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5 - 别碰
/lib64下的系统核心库;软链目标必须是绝对路径,且不能指向符号链接本身(避免循环)
libssl.so.10 not found 的安全解法
MySQL 8.0.27+ 在ARM下常因 OpenSSL 版本不匹配报 libssl.so.10 not found。这不是版本低,而是“名字不对”——麒麟V10自带的是 libssl.so.1.1,而MySQL找的是 RHEL/CentOS 风格的旧命名。
严禁用 ln -s /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.10 硬凑,某些场景会触发 TLS 握手失败或连接中断。
- 正确做法:装兼容包
compat-openssl10,来源必须是可信镜像(如阿里云 CentOS Vault):wget http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/aarch64/os/Packages/compat-openssl10-1.0.2o-4.el8.aarch64.rpm - 安装时加
--nodeps:sudo rpm -ivh compat-openssl10-1.0.2o-4.el8.aarch64.rpm --nodeps - 验证:
ls /usr/lib64/libssl.so.10*应存在;ldd $(which mysqld) | grep ssl不再报错 - 注意:该包只提供兼容符号链接和基础函数,不替换系统 OpenSSL 主库,不影响其他服务
初始化与启动前必须检查的三件事
即使二进制能跑、依赖全通,mysqld --initialize 还可能静默失败,导致后续 systemctl start mysqld 一直卡在 activating。
- 用户权限:必须用
mysql用户初始化数据目录,不能用 root 直接跑:sudo chown -R mysql:mysql /usr/local/mysql/data - SELinux 状态:麒麟V10默认启用,
sestatus若为enforcing,需临时设为permissive或放行 MySQL 端口与数据目录上下文 - 配置文件路径:MySQL 8 默认不读
/etc/my.cnf,要显式指定:mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql;否则初始化会写到/var/lib/mysql,跟 systemd 服务定义的datadir不一致
最易被忽略的是 datadir 权限和 SELinux 上下文——哪怕所有命令都敲对了,这两个点出问题,服务就是起不来,日志里却只有一行 Starting MySQL... FAILED!。

