1. 项目背景与准备工作
在Rocky Linux 10.1系统上编译安装MySQL 8.0.44是一个典型的从源码构建数据库服务的案例。作为RHEL兼容发行版,Rocky Linux继承了企业级Linux的稳定特性,而MySQL 8.0系列则带来了窗口函数、JSON增强、原子DDL等重大改进。选择编译安装而非包管理器安装,通常是为了获得以下优势:
- 定制化编译参数优化性能
- 控制安装路径和依赖项
- 获取最新版本而非仓库中的旧版
重要提示:编译安装需要2-3GB空闲磁盘空间,整个过程在4核机器上约耗时30-60分钟
1.1 系统环境检查
首先确认基础环境:
bash复制# 查看系统版本
cat /etc/rocky-release
# 检查CPU架构
uname -m
# 确认内存大小
free -h
对于MySQL 8.0.44编译,需要准备:
- 开发工具链(gcc 7.1+、make等)
- CMake 3.5+
- Boost库(1.73.0版本)
- 各类开发头文件(openssl、ncurses等)
1.2 依赖项安装
通过DNF安装基础依赖:
bash复制sudo dnf install -y gcc gcc-c++ make cmake \
openssl-devel ncurses-devel libtirpc-devel \
bison libaio-devel libarchive-devel \
rpcgen rpcsvc-proto-devel
特别要注意的是,MySQL 8.0对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/
2. 源码编译过程详解
2.1 获取MySQL源码
推荐从官方仓库获取特定版本:
bash复制wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.44.tar.gz
tar -zxvf mysql-8.0.44.tar.gz
cd mysql-8.0.44
2.2 CMake配置参数解析
关键编译配置示例:
bash复制cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=/usr/local/boost_1_73_0
参数说明:
INSTALL_PREFIX:控制安装目录DATADIR:建议将数据目录单独配置WITH_SSL:使用系统OpenSSL库UTF8MB4:支持完整emoji存储
2.3 编译与安装
执行构建过程:
bash复制make -j$(nproc) # 使用所有CPU核心加速编译
sudo make install
编译完成后检查关键文件:
bash复制ls /usr/local/mysql/bin/mysqld # 确认服务端程序
ls /usr/local/mysql/support-files/ # 检查初始化脚本
3. 数据库初始化与配置
3.1 创建系统用户和目录
安全最佳实践:
bash复制sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
3.2 初始化数据目录
使用mysqld进行初始化:
bash复制cd /usr/local/mysql
bin/mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/data/mysql
注意记录输出的临时root密码:
code复制[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: JqUkR:jT86;?
3.3 配置my.cnf文件
创建最小化配置文件:
ini复制[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/var/log/mysql/error.log
pid-file=/var/run/mysql/mysql.pid
[client]
socket=/tmp/mysql.sock
确保日志目录存在:
bash复制sudo mkdir /var/log/mysql /var/run/mysql
sudo chown mysql:mysql /var/log/mysql /var/run/mysql
4. 服务管理与安全加固
4.1 创建systemd服务
创建服务单元文件:
ini复制[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
启用服务:
bash复制sudo systemctl daemon-reload
sudo systemctl enable mysql
sudo systemctl start mysql
4.2 初始安全设置
修改root密码并删除测试数据库:
bash复制/usr/local/mysql/bin/mysql_secure_installation
建议的安全措施:
- 设置强密码策略
- 限制root远程登录
- 创建应用专用用户
- 启用审计日志(需安装插件)
5. 性能调优与问题排查
5.1 关键性能参数
在my.cnf中添加优化参数:
ini复制innodb_buffer_pool_size=4G # 建议为物理内存的50-70%
innodb_log_file_size=1G
innodb_flush_method=O_DIRECT
innodb_read_io_threads=8
innodb_write_io_threads=8
5.2 常见问题解决
问题1:启动时报错 "Failed to find valid data directory"
解决方案:
bash复制chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql
问题2:客户端连接报错 "Can't connect to local MySQL server"
检查项:
bash复制netstat -ln | grep mysql # 确认socket文件存在
ps aux | grep mysqld # 确认进程运行
问题3:内存不足导致编译失败
临时解决方案:
bash复制sudo dnf install swapspace
sudo systemctl start swapspace
6. 验证与测试
6.1 基础功能验证
执行基本检查:
bash复制mysql -uroot -p -e "SELECT VERSION();"
mysql -uroot -p -e "SHOW ENGINES;"
mysql -uroot -p -e "CREATE DATABASE test; USE test; CREATE TABLE t(id INT); INSERT INTO t VALUES(1); SELECT * FROM t;"
6.2 压力测试(可选)
使用sysbench进行简单测试:
bash复制sudo dnf install sysbench
sysbench oltp_read_write --db-driver=mysql \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=your_password \
prepare
