银河麒麟V10(Kylin Linux V10)下MySQL编译安装的常见问题与解决方案
1. 银河麒麟V10下MySQL编译安装前的准备工作在银河麒麟V10操作系统上编译安装MySQL首先需要做好充分的准备工作。这个国产操作系统基于Linux内核但有些细节和常见的CentOS、Ubuntu等发行版有所不同。我在这类国产化替代项目中踩过不少坑总结出几个关键点。系统自检是第一步。建议先执行uname -a确认系统架构银河麒麟V10常见的有x86_64和aarch64两种版本。我遇到过同事在ARM架构服务器上误装x86软件包导致的各种诡异错误。内存检查也很重要编译MySQL 5.7至少需要2GB空闲内存可以用free -h查看。有次在虚拟机里编译时因为swap分区没设置好导致编译过程中被OOM killer强制终止。开发工具链的安装要特别注意版本兼容性。银河麒麟V10自带的GCC版本可能较低而MySQL 5.7要求GCC 4.8以上。我推荐用系统包管理器先更新基础工具sudo yum install -y gcc gcc-c make bison ncurses-devel openssl-devel目录规划容易被忽视但很重要。建议建立清晰的目录结构比如/usr/soft存放所有源码包/usr/local/mysql作为安装目录/data/mysql作为数据目录记得提前用mkdir -p创建这些目录并给当前用户赋权。有次我忘了给数据目录写权限导致初始化数据库时报错排查了半天才发现是权限问题。2. 解决CMake和GCC的版本兼容问题MySQL的编译依赖CMake和GCC这两个工具的版本问题是最常见的拦路虎。在银河麒麟V10上系统自带的CMake版本通常较低需要手动升级。卸载旧版CMake时有个细节要注意不能简单地yum remove cmake因为可能有其他依赖包。我推荐这样彻底清理sudo rpm -qa | grep cmake | xargs sudo rpm -e --nodeps下载新版CMake时官网提供了.sh格式的安装脚本但在银河麒麟上可能会遇到libcrypto.so缺失的问题。更稳妥的方式是下载预编译的tar包。比如对于aarch64架构wget https://cmake.org/files/v3.22/cmake-3.22.0-linux-aarch64.tar.gz tar -zxvf cmake-3.22.0-linux-aarch64.tar.gz -C /usr/local/建立软链接时要小心覆盖系统命令。我习惯把新版本工具放在/usr/local/bin下而不是直接替换/usr/bin下的文件。这样可以随时切换版本sudo ln -sf /usr/local/cmake-3.22.0-linux-aarch64/bin/* /usr/local/bin/GCC的编译安装更复杂些。在银河麒麟上编译GCC 4.9.4时可能会遇到mpfr库版本冲突。我的经验是先安装依赖库到自定义目录export CUSTOM_PATH/usr/local/gcc-deps ./configure --prefix$CUSTOM_PATH/gmp-5.0.2 make make install然后编译GCC时指定这些库的路径./configure --with-gmp$CUSTOM_PATH/gmp-5.0.2 \ --with-mpfr$CUSTOM_PATH/mpfr-3.1.2 \ --with-mpc$CUSTOM_PATH/mpc-0.93. MySQL源码编译的典型错误处理下载MySQL源码时建议选择带Boost库的版本。我在内网环境遇到过下载失败的情况可以先用其他机器下载好boost_1_59_0.tar.gz然后手动放到指定目录。CMake配置阶段最容易出问题。常见的错误是找不到Boost库这时需要明确指定路径cmake .. -DWITH_BOOST/usr/soft/mysql-5.7.27/boost/boost_1_59_0如果遇到CMake Error at cmake/boost.cmake:81可以尝试以下三种方案手动下载Boost并解压到指定目录添加-DDOWNLOAD_BOOST1参数让CMake自动下载删除CMakeCache.txt后重新配置编译过程中的报错也各有特点。比如出现prctl.h not found错误时需要从系统目录复制头文件cp /usr/include/sys/prctl.h /usr/soft/mysql-5.7.27/include还有次遇到error: nullptr was not declared这是因为GCC版本太低不支持C11特性。这时要么升级GCC要么修改源码中的C11语法。多核编译能大幅提升速度但要注意系统负载。我一般用nproc查看CPU核心数然后留出2个核心不给编译用make -j $(($(nproc)-2))4. 安装后的配置与优化编译完成后安装只是第一步。在银河麒麟V10上还需要进行一些特殊配置。初始化数据库时建议使用mysqld_safe方式/usr/local/mysql/bin/mysqld --initialize-insecure --usermysql --basedir/usr/local/mysql --datadir/data/mysql这里有个细节银河麒麟的SELinux策略可能导致权限问题。如果启动失败可以尝试restorecon -R /data/mysql配置文件调整也很关键。我建议在/etc下创建my.cnf时保留原系统的配置习惯[mysqld] basedir/usr/local/mysql datadir/data/mysql socket/tmp/mysql.sock character-set-serverutf8mb4系统服务集成方面银河麒麟V10使用systemd管理服务。可以这样创建服务单元文件cat /etc/systemd/system/mysqld.service EOF [Unit] DescriptionMySQL Server Afternetwork.target [Service] Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld_safe Restarton-failure [Install] WantedBymulti-user.target EOF最后别忘了设置环境变量。我通常在/etc/profile.d/下创建单独的文件echo export PATH/usr/local/mysql/bin:$PATH /etc/profile.d/mysql.sh source /etc/profile.d/mysql.sh5. 国产化环境下的特殊问题处理在银河麒麟V10这类国产操作系统上还会遇到一些特有的问题。依赖库冲突比较常见。比如系统自带的openssl可能与MySQL需要的版本不兼容。我的解决方法是静态编译cmake .. -DWITH_SSLsystem -DOPENSSL_ROOT_DIR/usr/local/openssl中文路径支持需要特别注意。银河麒麟默认使用zh_CN.UTF-8编码但MySQL的表名大小写敏感。建议在my.cnf中明确设置lower_case_table_names1 collation-serverutf8mb4_general_ci性能调优方面国产CPU如飞腾、鲲鹏需要针对架构优化。可以在编译时添加特定参数CFLAGS-marcharmv8-a -mtunecortex-a72 CXXFLAGS$CFLAGS cmake ..监控系统资源使用也很重要。我习惯用银河麒麟自带的ksysguard工具观察MySQL进程的资源占用情况。6. 验证与故障排查指南安装完成后系统的验证和故障排查同样重要。基础验证包括/usr/local/mysql/bin/mysqladmin version /usr/local/mysql/bin/mysqlshow如果连接失败先检查socket文件位置。银河麒麟的/tmp目录可能有特殊权限设置可以改用其他位置[client] socket/var/lib/mysql/mysql.sock日志分析是排查问题的利器。银河麒麟的日志系统可能将MySQL错误日志记录在/var/log/messages中建议在my.cnf中明确指定日志路径log-error/var/log/mysqld.log性能测试时可以用sysbench工具。在ARM架构上运行需要调整一些参数sysbench oltp_read_write --db-drivermysql --mysql-hostlocalhost --mysql-port3306 prepare遇到无法启动的情况可以尝试安全模式/usr/local/mysql/bin/mysqld_safe --skip-grant-tables 7. 安全加固与日常维护在国产化环境中安全配置需要更加谨慎。基础安全设置包括ALTER USER rootlocalhost IDENTIFIED BY 复杂密码; DELETE FROM mysql.user WHERE User; FLUSH PRIVILEGES;防火墙配置要适应银河麒麟的防火墙管理方式firewall-cmd --add-servicemysql --permanent firewall-cmd --reload备份策略建议结合国产化环境特点。我常用物理备份方式innobackupex --userroot --passwordxxx /backup/mysql/定期维护可以通过银河麒麟的定时任务实现echo 0 3 * * * /usr/local/mysql/bin/mysqlcheck -A -o | crontab -国产CPU的NUMA架构需要特别关注。可以在my.cnf中添加[mysqld] innodb_numa_interleaveON
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2428367.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!