mysqld 在 kylin v10 上成功启动的前提是严格绕过 boost 版本、cmake 参数、glibc 兼容性三大陷阱:需确认 aarch64/x86_64 架构、清空 mariadb 残留、显式指定 -dwith_boost=/path/to/boost 且 -denable_downloads=0、强制 -dwith_ssl=system 等关键参数,并确保权限、socket 路径与配置一致。

mysqld 能否成功启动,取决于编译时是否绕过了三个硬性依赖陷阱:Boost 版本不匹配、CMake 配置参数缺失、GCC 与系统 glibc 兼容性断裂。直接套用 CentOS 或 Ubuntu 的编译命令,在 Kylin V10 上大概率会卡在 cmake .. 阶段或初始化失败。
确认架构与清理残留是前置刚性条件
不做这步,后续所有操作都是在污染环境中堆砌错误。
-
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要执行到位;Kylin V10 的/usr/lib64/libLLVM-7.so也建议手动删掉,它和 MySQL 5.7 的链接器行为冲突
CMake 配置必须显式指定 Boost 路径且禁用下载
MySQL 5.7 源码包自带 Boost 的版本(如 mysql-boost-5.7.43.tar.gz)是唯一可靠选择,-DENABLE_DOWNLOADS=1 在国产化内网环境下必然失败,且会触发 CMake 自动下载旧版 Boost(1.59.0),与 Kylin V10 的 glibc 2.28+ 不兼容。
- 解压后进入源码目录,确保
boost/boost_1_59_0存在(路径必须精确匹配) - CMake 命令中必须包含:
-DWITH_BOOST=/path/to/mysql-source/boost,不能用相对路径或软链 - 务必加上
-DENABLE_DOWNLOADS=0,否则 CMake 会在 configure 阶段静默失败,只留一句Could NOT find Boost在日志末尾
关键编译参数不能省略,尤其针对 Kylin V10 的 glibc 行为
Kylin V10 使用较新的 glibc,而 MySQL 5.7 默认配置未适配其符号可见性规则,缺少以下参数会导致 mysqld 启动时报 undefined symbol: __cxa_thread_atexit_impl。
-
-DWITH_SSL=system:强制使用系统 OpenSSL,避免源码自带的 yaSSL 与 Kylin 的libssl.so.1.1ABI 冲突 -
-DWITH_ZLIB=system:同理,避开自带 zlib 编译异常 -
-DHAVE_LIBAIO=1:Kylin V10 的libaio是默认启用的,不加此参数会导致 InnoDB 初始化失败 -
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql:安装路径必须与后续my.cnf中的basedir完全一致,大小写和结尾斜杠都不能错
初始化和启动阶段最容易忽略的权限与 socket 路径一致性
即使编译通过,mysqld --initialize 成功,mysql.server start 仍可能静默退出——问题往往出在两个地方。
- 执行初始化前,
chown -R mysql:mysql /usr/local/mysql /var/lib/mysql必须覆盖 data 目录及其父级,Kylin V10 的 SELinux 策略比 CentOS 更严格 -
my.cnf中的socket值(如/var/lib/mysql/mysql.sock)必须与mysql.server脚本里硬编码的mysql_sock变量值完全相同,否则客户端连接时提示Can't connect to local MySQL server through socket - 首次启动后立即检查
tail -n 20 /var/lib/mysql/hostname.err,若出现InnoDB: Unable to lock ./ibdata1,说明 data 目录权限未正确归属mysql用户
=0、漏掉 system 后缀,都会让整个编译流程在最后关头崩塌,而且错误信息极其隐蔽。建议把完整 CMake 命令写成一行并反复核对,而不是分多行粘贴。











