1. 源码包获取与解压
1.1 源码包下载要点
MySQL 8.0.43源码安装需要获取两个关键文件包:
- 主源码包(mysql-8.0.43.tar.gz)
- Boost依赖包(mysql-boost-8.0.43.tar.gz)
使用wget下载时需注意:
bash复制wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.43.tar.gz
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.43.tar.gz
注意:官方下载链接可能会随版本更新而变化,若遇到404错误,建议到MySQL官网的Archives版块手动查找对应版本。
1.2 解压顺序与目录结构
解压操作必须按顺序执行:
bash复制tar xf mysql-8.0.43.tar.gz
tar xf mysql-boost-8.0.43.tar.gz
解压后目录结构特点:
- 两个压缩包会合并到同一个mysql-8.0.43目录
- Boost库会被放置在mysql-8.0.43/boost目录下
- 若解压顺序颠倒可能导致boost目录被覆盖
实测发现的问题:
- 在CentOS 7系统上,若使用非root用户解压,可能因权限不足导致后续编译失败
- 解压后建议检查boost目录大小(完整版应有约700MB内容)
2. 编译环境准备
2.1 启用CRB仓库
CentOS/RHEL系统需要启用CRB仓库:
bash复制yum config-manager --set-enabled crb
CRB仓库的作用:
- 提供构建软件所需的额外开发工具链
- 包含新版编译器、开发库等关键组件
- 在CentOS 8+中对应PowerTools仓库
2.2 依赖包分类解析
2.2.1 基础编译工具链
bash复制yum install -y make cmake gcc gcc-c++
- make:GNU构建工具(必需)
- cmake:MySQL 8.0+采用CMake构建系统(最低要求3.5+)
- gcc/gcc-c++:C/C++编译器(建议gcc 8+)
2.2.2 核心功能依赖
bash复制ncurses ncurses-devel openssl-devel libaio-devel
- ncurses:终端控制库(影响mysql客户端功能)
- openssl:安全连接支持(生产环境必装)
- libaio:异步IO支持(提升InnoDB性能)
2.2.3 可选功能组件
bash复制zlib-devel readline-devel systemd-devel
- zlib:压缩协议支持
- readline:命令行编辑功能
- systemd:服务管理集成
2.2.4 现代编译器套件
bash复制gcc-toolset-12-gcc gcc-toolset-12-gcc-c++
关键作用:
- 提供GCC 12编译器
- 支持C++17标准(MySQL 8.0编译必需)
- 替代方案:手动安装gcc 8+
经验:在老旧系统上,gcc-toolset的安装可能遇到依赖冲突,建议先执行
yum clean all && yum makecache
3. 编译配置与执行
3.1 CMake关键参数解析
建议创建独立构建目录:
bash复制mkdir build && cd build
典型配置命令:
bash复制source /opt/rh/gcc-toolset-12/enable && \
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=../boost \
-DDOWNLOAD_BOOST=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DWITH_SYSTEMD=1 \
-DCMAKE_C_COMPILER=/opt/rh/gcc-toolset-12/root/usr/bin/gcc \
-DCMAKE_CXX_COMPILER=/opt/rh/gcc-toolset-12/root/usr/bin/g++
关键参数说明:
| 参数 | 推荐值 | 作用 |
|---|---|---|
| WITH_BOOST | ../boost | 指定Boost源码路径 |
| DOWNLOAD_BOOST | 1 | 自动下载缺失的Boost组件 |
| WITH_SYSTEMD | 1 | 生成systemd服务文件 |
| WITH_SSL | system | 使用系统OpenSSL库 |
3.2 编译优化技巧
使用多核编译加速:
bash复制make -j$(nproc)
编译过程监控:
- 内存占用:建议系统有4GB+可用内存
- 磁盘空间:需要10GB+临时空间
- 时间预估:4核机器约需1-2小时
验证编译成功:
bash复制echo $? # 返回0表示成功
常见编译问题处理:
- 内存不足:添加swap空间或减少-j参数
- 编译器错误:检查gcc-toolset是否生效
- Boost缺失:确认WITH_BOOST路径正确
4. 安装与初始化
4.1 系统用户配置
创建专用用户:
bash复制useradd -r -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql
安全建议:
- 禁止mysql用户登录shell
- 数据目录权限设置为750
- 日志文件单独存放在/var/log/mysql
4.2 环境变量设置
永久生效配置:
bash复制echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile.d/mysql.sh
source /etc/profile
验证路径:
bash复制which mysqladmin # 应显示/usr/local/mysql/bin/mysqladmin
4.3 数据库初始化
安全初始化方式:
bash复制mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
初始化日志解读:
- 临时root密码在日志文件中查找
- 错误日志位于data目录下的hostname.err
注意:生产环境不要使用--initialize-insecure参数
5. 服务管理与配置
5.1 systemd服务配置
复制服务文件:
bash复制cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
服务管理命令:
bash复制systemctl enable mysqld
systemctl start mysqld
journalctl -u mysqld -f # 查看实时日志
5.2 配置文件优化
最小化my.cnf配置:
ini复制[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
目录创建:
bash复制mkdir /var/log/mysql /var/run/mysqld
chown mysql:mysql /var/log/mysql /var/run/mysqld
6. 安全加固与验证
6.1 密码修改与验证
首次登录:
bash复制mysql -uroot -p # 使用初始化生成的临时密码
修改密码:
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
FLUSH PRIVILEGES;
连接测试:
bash复制mysqladmin -uroot -p ping # 应返回"mysqld is alive"
6.2 常见问题排查
6.2.1 启动失败排查步骤
- 检查错误日志:/var/log/mysql/mysqld.log
- 验证数据目录权限
- 确认端口3306未被占用
- 检查selinux状态(建议临时禁用测试)
6.2.2 性能调优建议
- 调整innodb_buffer_pool_size(物理内存的70-80%)
- 配置合适的max_connections(根据应用需求)
- 启用慢查询日志分析性能瓶颈
7. 编译安装后的维护
7.1 版本升级策略
源码升级步骤:
- 备份所有数据库
- 停止现有服务
- 按照相同流程编译新版本
- 使用mysql_upgrade工具升级数据
7.2 日常维护建议
- 定期备份策略:
bash复制
mysqldump -uroot -p --all-databases > backup.sql - 日志轮转配置:
bash复制yum install logrotate cp /usr/local/mysql/support-files/mysql-log-rotate /etc/logrotate.d/mysql - 性能监控:
- 安装Percona Toolkit工具集
- 配置Prometheus+Granfa监控
我在实际部署中发现,源码安装的MySQL在相同硬件条件下,比二进制包安装的性能有5-10%的提升,特别是在高并发写入场景。但维护成本相对较高,适合对性能有极致要求的场景。对于一般应用,建议评估是否值得投入额外的维护精力。