源码编译在麒麟os上安装mysql 8.0可行但非首选,仅适用于需定制编译选项、打补丁、修改内核级行为或glibc版本严重不匹配(如系统glibc<2.28)等特定场景,否则应优先使用官方tar.xz或rpm包。

源码编译在麒麟OS上装MySQL 8.0可行,但不是首选——它耗时长、依赖多、容易卡在cmake或rpcgen环节,除非你明确需要定制编译选项(比如启用特定加密算法、裁剪模块)或系统完全离线且无RPM/tar.xz安装条件。
确认是否真需要源码编译
麒麟V10(尤其是SP2/SP3)对RPM和二进制tar.xz支持成熟。源码编译只在两种场景下必要:一是要打补丁或修改内核级行为;二是目标环境glibc版本与预编译包严重不匹配(如系统glibc 2.17,而MySQL 8.0.4x要求≥2.28)。否则建议优先用mysql-8.0.45-linux-glibc2.28-x86_64.tar.xz或RPM Bundle。
- 检查当前glibc版本:
ldd --version,输出低于2.28时才考虑源码编译适配 - 确认已有包管理器能否解决依赖:
yum search cmake、yum search rpcgen,若都找不到或版本太旧(如cmake - 内存不足8GB或磁盘空间<20GB时,编译过程大概率失败,
make -j$(nproc)会直接OOM
必须装齐的构建依赖(Kylin V10 SP3实测)
麒麟V10默认仓库缺失关键工具,尤其rpcgen和新版cmake。不能只靠yum install gcc gcc-c++ make就开工。
本文档主要讲述的是Android 操作系统的介绍;Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 先装基础工具链:
yum install -y gcc gcc-c++ make bzip2-devel ncurses-devel openssl-devel readline-devel perl-Data-Dumper gettext-devel -
cmake必须≥3.14:yum install -y cmake3(麒麟源中叫cmake3,运行时用cmake3命令) -
rpcgen需手动编译:从https://codeload.github.com/thkukuk/rpcsvc-proto/tar.gz/refs/tags/v1.4.3下载,解压后执行./autogen.sh && ./configure && make && make install,验证:rpcgen --version输出1.4.3 - Boost库不用单独装:下载
mysql-boost-8.0.42.tar.gz(官网Archived Versions里选“Source Code + Boost”),解压后Boost已包含在boost/子目录
cmake配置阶段的关键参数
麒麟系统默认不启用systemd服务单元生成,且/usr/local/mysql路径权限常被SELinux限制,cmake命令必须显式绕过。
- 进入解压后的源码目录(如
/usr/local/src/mysql-8.0.42),创建build子目录并进入:mkdir build && cd build - 执行
cmake3而非cmake,关键参数:cmake3 .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_BOOST=../boost \ -DWITH_SYSTEMD=OFF \ -DFORCE_INSOURCE_BUILD=ON \ -DCMAKE_C_FLAGS="-O2 -g -fPIC" \ -DCMAKE_CXX_FLAGS="-O2 -g -fPIC"
-
-DWITH_SYSTEMD=OFF是重点:麒麟V10的systemd版本与MySQL 8.0的unit模板不兼容,启用会导致make install失败 -
-DFORCE_INSOURCE_BUILD=ON避免因麒麟默认/tmp挂载为noexec导致configure失败
初始化与启动时的麒麟特有问题
编译安装后不能直接systemctl start mysqld,因为没生成service文件。且首次启动的密码日志位置与RPM包不同。
- 手动初始化:
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql - 初始密码不在
/var/log/mysqld.log,而在/usr/local/mysql/data/$(hostname).err(注意不是localhost.err) - 启动服务用脚本:
/usr/local/mysql/support-files/mysql.server start,而非systemctl - 若报
libtinfo.so.6: cannot open shared object file,说明麒麟系统缺少ncurses兼容库,执行:ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libtinfo.so.6
源码编译最大的隐性成本不是时间,而是调试依赖链——一个rpcgen缺失或cmake3版本不对,就会卡在make前。生产环境建议用tar.xz部署,仅在安全合规审计要求“可验证构建过程”时才走源码路径。










