从零到一:在Rocky Linux 9.6上源码编译部署MySQL 8.0全记录
1. 环境准备打造坚实的编译基础在Rocky Linux 9.6上源码编译MySQL 8.0就像盖房子需要打好地基。我遇到过不少新手直接开干结果被各种依赖问题卡住。咱们先花10分钟把基础环境收拾妥当后面能省下几小时的排错时间。首先确保你的系统是最新状态。我习惯先做个全面升级这个命令会更新所有已安装的包sudo dnf update -y sudo dnf upgrade -y接下来是开发工具链的安装这是编译的基石。Rocky Linux 9.6默认最小化安装时不会包含这些需要手动安装开发工具组sudo dnf groupinstall Development Tools -y编译MySQL 8.0需要特别注意几个关键依赖。有次我漏装了ncurses-compat-libs导致编译到一半报错退出。完整依赖列表如下sudo dnf install -y wget vim libaio ncurses-compat-libs rpcgen \ gcc ncurses-devel libaio bison gcc-c git cmake \ gcc-toolset-12-gcc gcc-toolset-12-gcc-c \ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck \ gcc-toolset-12-annobin-plugin-gcc磁盘空间是另一个容易踩坑的地方。建议至少准备30GB可用空间。有次我在虚拟机里只分配了15GB编译到80%时空间耗尽前功尽弃。可以用这个命令检查空间df -h如果空间不足可以通过LVM扩容。比如我的根目录在/dev/rl/root卷组添加新磁盘后vgextend rl /dev/nvme0n2 lvresize -L 19G -r /dev/rl/root2. 特殊依赖处理那些容易忽略的关键组件MySQL 8.0编译对OpenSSL版本有特定要求。官方文档不会告诉你的是某些场景下需要OpenSSL 1.0.x版本。我推荐手动编译安装避免与系统自带的OpenSSL 3.0冲突。先下载OpenSSL 1.0.2u源码包注意这是个长期支持版本wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz tar xvf openssl-1.0.2u.tar.gz cd openssl-1.0.2u配置时加上shared参数很重要否则MySQL编译时会找不到动态库./config --prefix/opt/openssl-1.0.2u shared zlib make sudo make install最后要让系统找到这个新装的OpenSSL执行echo /opt/openssl-1.0.2u/lib | sudo tee /etc/ld.so.conf.d/openssl-1.0.2u.conf sudo ldconfig另一个常被忽略的是libtirpc。在Rocky Linux 9.6上默认仓库可能没有合适的版本。我建议直接从EPEL仓库安装sudo dnf install -y epel-release sudo dnf install -y libtirpc libtirpc-devel3. MySQL源码编译魔鬼在细节里现在来到重头戏——MySQL源码编译。我建议先创建专用用户和数据目录避免使用root带来的安全隐患sudo useradd -r -s /sbin/nologin mysql sudo mkdir -p /data/mysql sudo chown -R mysql:mysql /data/mysql下载MySQL 8.0.34源码包后有个小技巧能节省大量时间。Boost库在线下载特别慢我们可以提前下载好放到指定位置tar -zxf mysql-8.0.34.tar.gz cd mysql-8.0.34 mkdir boost cp -a ../boost_1_77_0.tar.bz2 boost/CMake配置阶段是最容易出错的环节。这是我优化过的配置参数包含了生产环境需要的所有引擎和特性cmake -DCMAKE_INSTALL_PREFIX/usr/local/mysql \ -DMYSQL_UNIX_ADDR/tmp/mysql.sock \ -DEXTRA_CHARSETSall \ -DDEFAULT_CHARSETutf8mb4 \ -DDEFAULT_COLLATIONutf8mb4_general_ci \ -DWITH_MYISAM_STORAGE_ENGINE1 \ -DWITH_INNOBASE_STORAGE_ENGINE1 \ -DWITH_MEMORY_STORAGE_ENGINE1 \ -DWITH_READLINE1 \ -DENABLED_LOCAL_INFILE1 \ -DMYSQL_USERmysql \ -DMYSQL_TCP_PORT3306 \ -DMYSQL_DATADIR/data/mysql \ -DWITH_XTRADB_STORAGE_ENGINE1 \ -DWITH_PARTITION_STORAGE_ENGINE1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE1 \ -DWITH_BIG_TABLES1 \ -DDOWNLOAD_BOOST1 \ -DWITH_BOOST./boost \ -DWITH_SSLsystem \ -DOPENSSL_ROOT_DIR/opt/openssl-1.0.2u \ -DOPENSSL_INCLUDE_DIR/opt/openssl-1.0.2u/include \ -DOPENSSL_LIBRARIES/opt/openssl-1.0.2u/lib \ -DWITH_FEDERATED_STORAGE_ENGINE1 \ -DFORCE_INSOURCE_BUILD1编译过程视机器性能可能需要1-3小时。建议使用nohup防止SSH断开导致中断make -j$(nproc) sudo make install4. 初始化与配置安全启动的关键步骤编译完成后需要精心配置才能确保MySQL稳定运行。先创建配置文件/etc/my.cnf这是我的生产级配置模板cat /etc/my.cnf EOF [client] port 3306 socket /tmp/mysql.sock [mysqld] user mysql port 3306 socket /tmp/mysql.sock datadir /data/mysql slow_query_log1 slow_query_log_filemysqld-slow.log long_query_time2 sql-modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION server-id1 log-binbin_log character-set-server utf8mb4 collation-server utf8mb4_general_ci init_connect SET NAMES utf8mb4 COLLATE utf8mb4_general_ci !includedir /etc/my.cnf.d EOF初始化数据库时特别注意保存临时密码cd /usr/local/mysql/bin/ sudo ./mysqld --defaults-file/etc/my.cnf --usermysql \ --basedir/usr/local/mysql --datadir/data/mysql --initialize把MySQL添加到PATH环境变量方便日常使用echo export PATH\$PATH:/usr/local/mysql/bin/ | sudo tee -a /etc/profile source /etc/profile首次启动建议用mysqld_safe方便查看日志/usr/local/mysql/bin/mysqld_safe --usermysql 登录后立即修改root密码并创建远程管理账号mysql -uroot -p ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的强密码; CREATE USER admin% IDENTIFIED BY 另一个强密码; GRANT ALL PRIVILEGES ON *.* TO admin% WITH GRANT OPTION; FLUSH PRIVILEGES;5. 系统服务集成专业运维的必备技能生产环境需要将MySQL作为系统服务管理。创建/usr/lib/systemd/system/mysqld.service文件[Unit] DescriptionMySQL Server Afternetwork.target [Service] Usermysql Groupmysql Typenotify ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf LimitNOFILE10000 Restarton-failure RestartSec5 [Install] WantedBymulti-user.target重载systemd并设置开机启动sudo systemctl daemon-reload sudo systemctl enable mysqld sudo systemctl start mysqld验证服务状态时我习惯用组合命令查看实时日志sudo systemctl status mysqld journalctl -u mysqld -f遇到问题时可以检查错误日志定位原因默认位置在tail -f /data/mysql/$(hostname).err6. 性能调优与安全加固MySQL安装完成后建议立即进行基础安全设置。执行mysql_secure_installation等效操作mysql -uroot -p DELETE FROM mysql.user WHERE User; DROP DATABASE IF EXISTS test; FLUSH PRIVILEGES;调整InnoDB缓冲池大小根据服务器内存的70-80%sudo tee -a /etc/my.cnf EOF innodb_buffer_pool_size 4G innodb_log_file_size 256M innodb_flush_method O_DIRECT EOF配置连接数限制和超时设置max_connections 200 wait_timeout 300 interactive_timeout 300最后重启服务使配置生效sudo systemctl restart mysqld7. 常见问题排坑指南问题1CMake报错找不到OpenSSL解决方法检查OPENSSL_ROOT_DIR路径是否正确确保lib和include目录存在。问题2编译过程中内存不足建议增加swap空间或使用-j2参数限制并行编译线程数。问题3启动时报表空间错误可能是数据目录权限问题执行sudo chown -R mysql:mysql /data/mysql问题4客户端连接认证失败检查是否使用了mysql_native_password插件ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 密码;问题5慢查询日志不生效确认slow_query_log1且datadir有写入权限必要时sudo touch /data/mysql/mysqld-slow.log sudo chown mysql:mysql /data/mysql/mysqld-slow.log记得定期备份my.cnf配置文件我在/usr/local/mysql/backup/下保留了各个版本的配置方便回滚。源码编译的MySQL在性能调优时有更多灵活性但也需要更多维护精力。建议设置每周自动日志轮转和每月完整备份的定时任务
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2518931.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!