ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

CentOS Stream 9下MySQL 8.4.7卸载与自定义安装指南

CentOS Stream 9下MySQL 8.4.7卸载与自定义安装指南

1. 项目背景与需求解析

最近在CentOS Stream 9服务器上部署新应用时,遇到了MySQL 8.4.7版本与现有环境不兼容的问题。更棘手的是,默认安装将数据库文件放在了系统盘,而我们需要将其迁移到大容量数据盘。经过多次实践,我总结出一套完整的解决方案,不仅能彻底卸载现有MySQL,还能实现自定义路径安装。

这个需求在数据库运维中非常典型——当遇到版本冲突、存储空间不足或性能优化时,我们经常需要"重装+迁移"的组合操作。传统做法需要手动执行十几个步骤,而通过脚本化处理,整个过程可以压缩到5分钟内完成,且保证数据安全无损。

2. 环境准备与安全防护

2.1 系统环境确认

首先通过以下命令确认系统版本和MySQL状态:

cat /etc/redhat-release # 确认是CentOS Stream 9 mysql --version # 确认当前安装的是8.4.7 df -h # 查看磁盘分区情况

重要提示:操作前务必确认备份了所有数据库!即使是一键脚本,数据安全永远是第一位的。

2.2 备份策略实施

推荐使用mysqldump进行全量备份:

mkdir -p /backup/mysql mysqldump -u root -p --all-databases > /backup/mysql/full_backup_$(date +%F).sql

对于大型数据库,可以考虑物理备份:

systemctl stop mysqld rsync -av /var/lib/mysql /backup/mysql/ systemctl start mysqld

3. 彻底卸载MySQL 8.4.7

3.1 标准卸载流程

常规卸载命令如下:

dnf remove mysql-server mysql-client mysql-common

但这种方式往往会有残留,我们需要更彻底的清理方案。

3.2 深度清理脚本

创建clean_mysql.sh脚本:

#!/bin/bash # 停止服务 systemctl stop mysqld # 移除软件包 dnf remove -y mysql-* # 清理残留文件 rm -rf /var/lib/mysql rm -rf /var/log/mysqld.log rm -rf /etc/my.cnf rm -rf /etc/my.cnf.d # 删除用户和组 userdel mysql groupdel mysql # 清理依赖项 dnf autoremove -y

执行权限和运行:

chmod +x clean_mysql.sh ./clean_mysql.sh

3.3 验证卸载结果

检查是否还有残留:

rpm -qa | grep mysql find / -name "*mysql*"

4. 自定义路径安装MySQL 8.4.7

4.1 准备数据盘

假设我们要安装到/data/mysql:

mkdir -p /data/mysql chown -R mysql:mysql /data/mysql

4.2 官方源安装

添加MySQL官方YUM源:

rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

安装指定版本:

dnf install -y mysql-server-8.4.7

4.3 配置文件定制

编辑/etc/my.cnf:

[mysqld] datadir=/data/mysql socket=/data/mysql/mysql.sock [client] socket=/data/mysql/mysql.sock

4.4 初始化数据库

使用新路径初始化:

mysqld --initialize --user=mysql --datadir=/data/mysql

查看临时密码:

grep 'temporary password' /var/log/mysqld.log

5. 服务配置与优化

5.1 安全加固

运行安全脚本:

mysql_secure_installation

建议设置:

  • 修改root密码
  • 移除匿名用户
  • 禁止root远程登录
  • 移除测试数据库
  • 重载权限表

5.2 服务管理

配置systemd单元文件:

systemctl enable mysqld systemctl start mysqld systemctl status mysqld

5.3 性能调优

根据服务器配置调整/etc/my.cnf:

innodb_buffer_pool_size = 4G innodb_log_file_size = 512M max_connections = 200

6. 数据恢复与验证

6.1 恢复备份数据

mysql -u root -p < /backup/mysql/full_backup_2023-11-15.sql

6.2 验证安装结果

检查安装路径:

mysql -e "SHOW VARIABLES LIKE 'datadir';"

验证版本:

mysql -e "SELECT VERSION();"

7. 常见问题解决方案

7.1 初始化失败问题

错误现象:

[ERROR] --initialize specified but the data directory exists and is not writable

解决方法:

chown -R mysql:mysql /data/mysql rm -rf /data/mysql/*

7.2 服务启动失败

查看详细日志:

journalctl -xe

常见原因:

  • SELinux阻止访问
  • 目录权限不正确
  • 配置文件语法错误

7.3 连接socket问题

错误信息:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

解决方案:

ln -s /data/mysql/mysql.sock /var/lib/mysql/mysql.sock

8. 一键脚本整合

将上述流程整合为reinstall_mysql.sh:

#!/bin/bash # 参数定义 MYSQL_VERSION="8.4.7" DATA_DIR="/data/mysql" BACKUP_DIR="/backup/mysql" # 备份阶段 mkdir -p $BACKUP_DIR mysqldump -u root -p --all-databases > $BACKUP_DIR/full_backup_$(date +%F).sql # 卸载阶段 systemctl stop mysqld dnf remove -y mysql-* rm -rf /var/lib/mysql /var/log/mysqld.log /etc/my.cnf /etc/my.cnf.d userdel mysql groupdel mysql dnf autoremove -y # 安装阶段 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm dnf install -y mysql-server-$MYSQL_VERSION # 配置阶段 mkdir -p $DATA_DIR chown -R mysql:mysql $DATA_DIR cat > /etc/my.cnf <<EOF [mysqld] datadir=$DATA_DIR socket=$DATA_DIR/mysql.sock [client] socket=$DATA_DIR/mysql.sock EOF # 初始化 mysqld --initialize --user=mysql --datadir=$DATA_DIR chown -R mysql:mysql $DATA_DIR # 服务启动 systemctl enable mysqld systemctl start mysqld # 获取临时密码 TEMP_PWD=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}') echo "临时密码: $TEMP_PWD"

使用说明:

  1. 保存为reinstall_mysql.sh
  2. chmod +x reinstall_mysql.sh
  3. ./reinstall_mysql.sh
  4. 根据输出的临时密码登录并修改

9. 后续维护建议

  1. 定期备份策略:
# 每天全量备份 0 2 * * * mysqldump -u root -pPASSWORD --all-databases > /backup/mysql/full_$(date +\%F).sql
  1. 监控磁盘空间:
df -h /data
  1. 性能监控设置:
# 安装监控工具 dnf install -y mytop
  1. 定期维护:
-- 每周执行 ANALYZE TABLE; OPTIMIZE TABLE;
返回列表