能,但需绕过boost版本、cmake参数、glibc兼容性三道硬坎:确认aarch64/x86_64架构并清空mariadb/mysql残留;用mysql-boost-5.7.43源码,显式指定-dwith_boost和-denable_downloads=0;必加-dwith_ssl=system、-dwith_zlib=system、-dhave_libaio=1;初始化与my.cnf中basedir、datadir、socket路径须严格一致且权限设为mysql:mysql。

mysqld 能不能在麒麟 V10 上跑起来,不取决于你有没有执行 make install,而取决于编译时是否绕过了 Boost 版本、CMake 参数、glibc 兼容性这三道硬坎。直接套用 CentOS 的命令,在 Kylin V10 上大概率卡在 cmake .. 阶段或启动时报 undefined symbol: __cxa_thread_atexit_impl。
确认架构并彻底清空 MariaDB/MySQL 残留
这是所有后续操作的前提,跳过等于白干。
-
uname -m必须输出aarch64或x86_64;ARM 机器绝不能混用 x86 的 CMake/Boost 包 -
rpm -qa | grep -i 'mysql\|mariadb'结果必须为空;残留的mariadb-libs会 hijacklibcrypto.so,导致mysqld启动时报symbol lookup error -
rm -rf /var/lib/mysql /etc/my.cnf /usr/local/mysql要执行到位;/usr/lib64/libLLVM-7.so建议手动删掉,它和 MySQL 5.7 的链接器行为冲突
CMake 配置必须显式指定 Boost 路径且禁用自动下载
MySQL 5.7 源码包自带 Boost 是唯一可靠选择,-DENABLE_DOWNLOADS=1 在国产内网环境下必然失败,还会触发 CMake 静默下载旧版 Boost(1.59.0),与 Kylin V10 的 glibc 2.28+ 不兼容。
- 下载
mysql-boost-5.7.43.tar.gz(带 boost 的版本),解压后确保boost/boost_1_59_0目录存在,路径必须精确匹配 - CMake 命令中必须写
-DWITH_BOOST=/path/to/mysql-source/boost,不能用相对路径、软链或省略 - 必须加
-DENABLE_DOWNLOADS=0,否则 configure 阶段只在日志末尾留一句Could NOT find Boost,毫无提示
关键编译参数缺一不可,尤其针对 Kylin V10 的 glibc 行为
Kylin V10 使用较新的 glibc,MySQL 5.7 默认配置未适配其符号可见性规则,漏掉任一参数都可能导致 mysqld 启动失败。
-
-DWITH_SSL=system:强制使用系统 OpenSSL,避开源码自带 yaSSL 与libssl.so.1.1的 ABI 冲突 -
-DWITH_ZLIB=system:同理,防止 zlib 编译异常 -
-DHAVE_LIBAIO=1:Kylin V10 的libaio默认启用,不加此参数会导致 InnoDB 初始化失败 -
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql:安装路径必须与后续my.cnf中的basedir完全一致,大小写和结尾斜杠都不能错
初始化与启动前务必核对 socket 路径和权限
很多“启动成功但连不上”的问题,根源是 socket 文件路径不一致或权限不对。
-
mysqld --initialize命令中的--datadir和--basedir必须与my.cnf中的datadir、basedir严格一致 -
socket路径(如/var/lib/mysql/mysql.sock)必须在[client]和[mysqld]段中同时声明,且目录/var/lib/mysql所属用户/组必须是mysql:mysql - 启动前执行
chown -R mysql:mysql /var/lib/mysql /usr/local/mysql,否则mysqld会因权限拒绝写入 pid 或 error log
-DWITH_SSL=system,结果 mysqld 启动时找不到 SSL_library_init 符号;或者 my.cnf 里 socket 路径写成 /tmp/mysql.sock,但 client 端默认去 /var/lib/mysql/mysql.sock 找——这种路径错位不会报错,只会静默连接失败。











