麒麟ARM系统上MySQL部署避坑,编译安装步骤详解?

2026-04-30 21:201阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1069个文字,预计阅读时间需要5分钟。

麒麟ARM系统上MySQL部署避坑,编译安装步骤详解?

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/nullsystemctl 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.1libtinfo.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
  • 同理处理 libtinfosudo 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
  • 安装时加 --nodepssudo 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部署避坑,编译安装步骤详解?

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/nullsystemctl 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.1libtinfo.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
  • 同理处理 libtinfosudo 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
  • 安装时加 --nodepssudo 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!