必须先停止服务并终止所有MySQL/MariaDB进程,否则新安装会卡在初始化;需彻底卸载相关RPM包、删除/var/lib/mysql等残留目录、清理/etc/my.cnf配置及mysql用户组,并确认启用MySQL 8.0官方仓库再安装。

必须先停服务、杀进程,否则新安装会卡在初始化
CentOS 8 默认可能预装 mariadb-libs 或残留 mysqld 进程,哪怕没手动启动过,也会导致 mysqld 启动失败、mysql 命令报错或端口被占。不清理干净,mysqld --initialize 直接失败是常态。
- 运行
systemctl list-units | grep -i mysql和systemctl list-units | grep -i mariadb查服务是否加载 - 强制停掉所有可能服务:
systemctl stop mysqld、systemctl stop mariadb、systemctl stop mysql - 确认无残留进程:
ps aux | grep -E '(mysql|mysqld|mariadb)',有输出就kill -9掉对应 PID
卸载 RPM 包不能只删 server,libs 和 client 必须一并清
只执行 yum remove mysql-community-server 会留下 mysql-community-libs、mysql-community-client、mariadb-libs 等包,后续 yum install mysql-community-server 会因依赖冲突中止,报错类似 package mysql-community-libs conflicts with mariadb-libs。
- 列出全部相关包:
rpm -qa | grep -E 'mysql|mariadb' - 批量卸载(推荐):
yum remove $(rpm -qa | grep -E 'mysql|mariadb') -y - 若提示
mariadb-libs冲突,单独强删:rpm -e --nodeps mariadb-libs - 执行后再次
rpm -qa | grep -E 'mysql|mariadb',输出应为空
/var/lib/mysql、/etc/my.cnf、mysql 用户组全得手动删
RPM 卸载不会自动清理数据目录、配置文件和系统用户。残留的 /var/lib/mysql 会导致新 mysqld 初始化失败;残留的 /etc/my.cnf 可能启用旧插件或错误路径;残留的 mysql 用户/组会让 systemd 启动时权限报错。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 删数据与配置:
rm -rf /var/lib/mysql /etc/my.cnf /etc/my.cnf.d /etc/logrotate.d/mysql /usr/lib64/mysql /usr/bin/mysql - 删用户和组:
userdel -r mysql(失败加-f),再groupdel mysql - 检查 SELinux 模块残留:
find / -name "*mysql*" 2>/dev/null | grep -E "(lib|etc|var|usr)",重点看/var/lib/selinux/targeted/active/modules/100/mysql等路径,人工判断后rm -rf
装 MySQL 8.0 前必须确认 yum repo 启用的是 8.0,不是默认 5.7
直接 yum install mysql-community-server 很可能装上 5.7 或系统自带模块版(如 mysql-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64),这类包和官方社区版行为不一致,mysql_secure_installation 可能跳过密码设置,且不支持某些 8.0 新特性。
- 下载并安装 8.0 官方源:
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm && rpm -ivh mysql80-community-release-el8-1.noarch.rpm - 确认 8.0 仓库已启用:
yum repolist enabled | grep mysql,输出中应含mysql80-community且状态为 enabled - 安装:
yum install mysql-community-server -y - 启动验证:
systemctl start mysqld,然后grep 'temporary password' /var/log/mysqld.log
最容易被忽略的是 SELinux 模块残留和 /var/log/mysqld.log 文件。前者会让 systemctl start mysqld 静默失败(日志里只有 AVC denied);后者若存在旧内容,新实例初始化时可能复用旧密码逻辑,导致临时密码不可用。

















