在Linux环境下部署MySQL数据库时,RPM安装方式相比源码编译具有明显的效率优势。以CentOS 7.9系统为例,当我需要在/data/mysql目录下部署MySQL 8.4.7时,RPM方案能在15分钟内完成基础安装,而源码编译通常需要40分钟以上。更重要的是,RPM包已经过官方测试验证,避免了手动编译可能出现的依赖冲突问题。
注意:MySQL 8.4是8.0系列的最新LTS版本,其RPM包默认安装路径为/usr/local/mysql,但生产环境通常需要自定义数据目录。
首先通过cat /etc/redhat-release确认系统版本,MySQL 8.4要求:
运行以下命令检查依赖:
bash复制rpm -qa | grep -E 'glibc|openssl'
df -h /data
从MySQL官网下载以下三个核心RPM包:
使用sha256sum校验文件完整性:
bash复制sha256sum mysql-community-*.rpm | grep $(curl -s https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | grep SHA256)
bash复制mkdir -p /data/mysql/{data,logs,tmp}
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql/data
关键点说明:
创建自定义配置文件/etc/my.cnf.d/custom_path.cnf:
ini复制[mysqld]
datadir=/data/mysql/data
socket=/data/mysql/mysql.sock
log-error=/data/mysql/logs/mysqld.log
tmpdir=/data/mysql/tmp
[client]
socket=/data/mysql/mysql.sock
使用--relocate参数重定向安装路径:
bash复制rpm -ivh --prefix=/data/mysql \
--relocate /usr/local/mysql=/data/mysql \
mysql-community-*.rpm
安装后检查文件位置:
bash复制ls -l /data/mysql
# 应看到bin、lib、share等标准目录
bash复制mysqld --initialize --user=mysql \
--basedir=/data/mysql \
--datadir=/data/mysql/data
从日志获取临时密码:
bash复制grep 'temporary password' /data/mysql/logs/mysqld.log
创建systemd服务文件:
bash复制cat > /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/mysql/bin/mysqld \
--defaults-file=/etc/my.cnf
LimitNOFILE=65535
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
启动服务并修改密码:
bash复制systemctl start mysqld
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
错误现象:启动失败,日志显示"Permission denied"
解决方案:
bash复制semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
restorecon -Rv /data/mysql
错误现象:mysql用户无法写入数据目录
快速检查:
bash复制namei -l /data/mysql/data
要求每个父目录都有x权限
检查3306端口占用:
bash复制ss -tulnp | grep 3306
如需修改端口,在my.cnf中添加:
ini复制[mysqld]
port=3307
编辑/etc/sysctl.conf:
ini复制vm.swappiness = 1
vm.dirty_ratio = 60
vm.dirty_background_ratio = 5
建议使用XFS并启用屏障:
bash复制mkfs.xfs -f /dev/sdb1
mount -o defaults,noatime,nobarrier /dev/sdb1 /data
在my.cnf中优化:
ini复制innodb_buffer_pool_size=4G
innodb_flush_method=O_DIRECT
innodb_io_capacity=2000
我在实际部署中发现,当数据目录放在独立SSD分区时,将innodb_io_capacity_max设置为io_capacity的2倍能显著提升突发写入性能。同时建议定期检查磁盘空间使用情况,避免数据目录爆满导致服务异常。