1. 为什么选择源码编译安装MySQL 8.0?
在CentOS环境下安装MySQL 8.0主要有三种方式:使用官方二进制包、通过yum仓库安装和源码编译安装。源码编译虽然步骤相对复杂,但能带来几个显著优势:
- 定制化程度高:可以精确控制需要编译的模块和功能,比如只启用InnoDB引擎而禁用其他存储引擎
- 性能优化:针对特定CPU架构进行编译优化(如启用SSE4.2指令集)
- 版本控制灵活:可以自由选择任何小版本(如8.0.28、8.0.33等)
- 依赖管理透明:所有依赖库的版本和配置完全掌握在自己手中
重要提示:生产环境建议使用相同编译参数在所有节点保持一致性,避免因环境差异导致的问题
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖安装
2.1 系统环境要求
推荐使用干净的CentOS 7/8/9最小化安装环境,确保:
- 可用磁盘空间 ≥ 5GB(源码+编译中间文件)
- 内存 ≥ 4GB(编译过程内存消耗较大)
- 已配置好网络连接(需要下载源码和依赖)
bash复制# 检查系统版本
cat /etc/redhat-release
# 检查内存和磁盘
free -h
df -h
2.2 安装基础开发工具
首先安装必要的编译工具链:
bash复制# CentOS 7
sudo yum groupinstall "Development Tools" -y
sudo yum install cmake3 ncurses-devel openssl-devel libtirpc-devel rpcgen -y
# CentOS 8/9
sudo dnf groupinstall "Development Tools" -y
sudo dnf install cmake ncurses-devel openssl-devel libtirpc-devel rpcgen -y
2.3 安装MySQL专用依赖
MySQL编译需要一些特殊依赖:
bash复制# 公共依赖
sudo yum install bison boost-devel libcurl-devel libevent-devel libicu-devel \
lz4-devel protobuf-devel zlib-devel zstd-devel -y
# 解决常见依赖问题
sudo ln -s /usr/bin/cmake3 /usr/bin/cmake # CentOS 7 cmake版本兼容
3. 源码获取与编译配置
3.1 下载MySQL源码
推荐从Oracle官方下载源码包:
bash复制wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33.tar.gz
tar zxvf mysql-8.0.33.tar.gz
cd mysql-8.0.33
注意:版本号请替换为最新的稳定版,可通过
https://dev.mysql.com/downloads/mysql/查看
3.2 CMake配置参数详解
创建编译目录并配置参数:
bash复制mkdir bld
cd bld
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=OFF \
-DENABLED_LOCAL_INFILE=ON \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=../boost
关键参数说明:
| 参数 | 说明 | 推荐值 |
|---|---|---|
| CMAKE_INSTALL_PREFIX | 安装目录 | /usr/local/mysql |
| MYSQL_DATADIR | 数据存储目录 | /data/mysql |
| WITH_SSL | SSL支持 | system(使用系统openssl) |
| WITH_ZLIB | 压缩支持 | system |
| DEFAULT_CHARSET | 默认字符集 | utf8mb4 |
3.3 常见配置问题解决
-
Boost库缺失:
bash复制
wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz tar zxvf boost_1_73_0.tar.gz -C /usr/local/ -
CMake版本过低:
bash复制# CentOS 7升级CMake sudo yum remove cmake -y wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz tar zxvf cmake-3.22.1.tar.gz cd cmake-3.22.1 ./bootstrap && make && sudo make install
4. 编译与安装过程
4.1 执行编译
bash复制make -j $(nproc) # 使用所有CPU核心加速编译
编译时间视机器性能而定(通常30分钟-2小时),期间可以:
- 监控编译进度:
watch -n 10 "ps -ef | grep make | wc -l" - 查看CPU/内存使用:
top
4.2 安装到系统
bash复制sudo make install
安装完成后目录结构:
code复制/usr/local/mysql
├── bin # 可执行文件
├── docs # 文档
├── include # 头文件
├── lib # 库文件
├── share # 配置文件
└── support-files # 辅助脚本
4.3 初始化数据目录
bash复制sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql --datadir=/data/mysql
安全提示:生产环境应使用
--initialize生成随机root密码,而非--initialize-insecure
5. 系统配置与优化
5.1 创建mysql用户和组
bash复制sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
5.2 配置环境变量
bash复制echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
5.3 创建配置文件my.cnf
bash复制sudo tee /etc/my.cnf <<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
# 性能优化参数
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
socket=/tmp/mysql.sock
EOF
5.4 配置systemd服务
bash复制sudo tee /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=65536
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable mysqld
sudo systemctl start mysqld
6. 安全加固与验证
6.1 修改root密码
bash复制mysqladmin -u root password 'YourStrongPassword123!'
6.2 运行安全脚本
bash复制mysql_secure_installation
按提示完成以下安全设置:
- 更改root密码
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重载权限表
6.3 验证安装
bash复制mysql -uroot -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'innodb_version';"
预期输出应显示MySQL 8.0.x版本信息。
7. 常见问题排查
7.1 编译错误解决
-
内存不足:
bash复制# 临时增加swap空间 sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 sudo mkswap /swapfile sudo swapon /swapfile -
依赖冲突:
bash复制# 清理后重新配置 rm CMakeCache.txt make clean
7.2 启动失败排查
查看错误日志:
bash复制tail -n 50 /data/mysql/error.log
常见问题:
- 权限问题:
chown -R mysql:mysql /data/mysql - 端口冲突:
netstat -tulnp | grep 3306 - 配置文件错误:
mysqld --verbose --help | grep -A 1 "Default options"
7.3 性能调优建议
- 根据服务器内存调整
innodb_buffer_pool_size(建议占总内存70%) - 调整
innodb_io_capacity和innodb_io_capacity_max匹配你的存储设备性能 - 启用性能schema监控:
sql复制UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';
8. 维护与管理技巧
8.1 备份策略
bash复制# 物理备份
sudo systemctl stop mysqld
tar czvf mysql_backup_$(date +%F).tar.gz /data/mysql
sudo systemctl start mysqld
# 逻辑备份
mysqldump -uroot -p --all-databases --single-transaction > full_backup.sql
8.2 升级注意事项
- 先备份数据和配置文件
- 在测试环境验证新版本
- 查看官方升级说明中的不兼容变更
- 使用
mysql_upgrade工具升级系统表
8.3 监控设置
推荐配置:
sql复制-- 启用性能监控
INSTALL COMPONENT "file://component_sys_vars";
INSTALL COMPONENT "file://component_pfs_notification";
配置Prometheus监控:
yaml复制# mysqld_exporter配置
scrape_configs:
- job_name: 'mysql'
static_configs:
- targets: ['localhost:9104']
metrics_path: /metrics
params:
collect[]:
- global_status
- info_schema.innodb_metrics
