在Linux环境下部署MySQL数据库时,RPM安装方式往往被DBA们视为最稳妥的选择。与二进制包或源码编译相比,RPM包具有完整的依赖管理机制,能够自动处理库文件冲突问题。我最近在生产环境部署MySQL 8.4.7时,就遇到了一个典型场景:客户要求将数据库安装在非标准的/opt/mysql目录下,而官方RPM默认会安装到/usr/local/mysql。这种定制化需求正是考验DBA真功夫的时候。
MySQL 8.4.7作为当前最新的稳定版本,引入了多项性能优化:
这些特性使得8.4.7版本特别适合需要处理高并发事务的电商平台和实时分析系统。接下来我将详细拆解如何在保持RPM管理优势的前提下,实现自定义目录安装的全过程。
在开始前,请确认你的Linux系统满足以下条件:
setenforce 0)重要提示:如果系统已安装MariaDB或其他MySQL分支,必须先彻底卸载以避免冲突。执行
rpm -qa | grep -i mysql和rpm -qa | grep -i mariadb检查现有安装。
MySQL 8.4.7需要以下基础依赖:
bash复制yum install -y libaio numactl-libs openssl-libs
对于自定义目录安装,还需要额外准备:
bash复制mkdir -p /opt/mysql/{data,logs,tmp}
chown -R mysql:mysql /opt/mysql
这个目录结构将用于:
从MySQL官网获取最新的8.4.7 RPM bundle:
bash复制wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.7-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-8.4.7-1.el7.x86_64.rpm-bundle.tar
关键组件说明:
为了实现自定义目录安装,我们需要解压RPM并修改安装路径:
bash复制mkdir mysql-rpm-expanded
for rpm in *.rpm; do
rpm2cpio $rpm | cpio -idmv -D mysql-rpm-expanded
done
关键目录结构调整:
创建自定义的spec文件模板:
spec复制%define _prefix /opt/mysql
%define _sysconfdir /opt/mysql/etc
%define _localstatedir /opt/mysql/data
然后使用rpmbuild重新打包:
bash复制rpmbuild --bb mysql-custom.spec \
--define '_topdir /root/rpmbuild' \
--define 'version 8.4.7' \
--define 'release 1.el7'
安装重建后的RPM包:
bash复制yum localinstall -y mysql-community-{server,client,libs}-8.4.7-1.el7.x86_64.rpm
验证安装路径:
bash复制rpm -ql mysql-community-server-8.4.7 | grep -i /opt/mysql
编辑/opt/mysql/etc/my.cnf,关键配置示例:
ini复制[mysqld]
datadir=/opt/mysql/data
socket=/opt/mysql/mysql.sock
log-error=/opt/mysql/logs/mysqld.log
tmpdir=/opt/mysql/tmp
# 性能优化参数
innodb_buffer_pool_size=4G
innodb_flush_method=O_DIRECT
使用修改后的路径进行初始化:
bash复制/opt/mysql/bin/mysqld --initialize \
--user=mysql \
--basedir=/opt/mysql \
--datadir=/opt/mysql/data
获取临时密码:
bash复制grep 'temporary password' /opt/mysql/logs/mysqld.log
创建自定义服务文件/etc/systemd/system/mysqld.service:
ini复制[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/opt/mysql/etc/my.cnf
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
启动并验证服务:
bash复制systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
执行安全向导:
bash复制/opt/mysql/bin/mysql_secure_installation
建议操作:
在/etc/profile.d/mysql.sh中添加:
bash复制export PATH=/opt/mysql/bin:$PATH
export LD_LIBRARY_PATH=/opt/mysql/lib:$LD_LIBRARY_PATH
验证安装结果:
bash复制mysql -u root -p -S /opt/mysql/mysql.sock
执行状态检查:
sql复制SHOW VARIABLES LIKE '%dir%';
STATUS;
如果服务启动失败,按以下步骤检查:
tail -50 /opt/mysql/logs/mysqld.logls -ld /opt/mysql/ls -Z /opt/mysql/连接被拒绝时的检查项:
bash复制ss -lnp | grep mysql
ps aux | grep mysqld
针对自定义安装的性能优化:
使用自定义路径的备份示例:
bash复制/opt/mysql/bin/mysqldump -u root -p \
--socket=/opt/mysql/mysql.sock \
--all-databases > /backup/mysql-full-$(date +%F).sql
未来升级时需要:
关键监控项包括: