OS: SUSE Linux Enterprise Server 10 SP3 (x86_64)
MySQL: 5.5.37 RPM 包安裝
安裝包列表:
MySQL-server-5.5.37-1.sles10
MySQL-client-5.5.37-1.sles10
MySQL-devel-5.5.37-1.sles10
MySQL-shared-5.5.37-1.sles10
MySQL-shared-compat-5.5.37-1.sles10
MySQL-test-5.5.37-1.sles10
MySQL-embedded-5.5.37-1.sles10
# 推薦:init 腳本停止(執行關閉鉤子、刷盤)
/etc/init.d/mysql stop
# 輸出: Shutting down MySQL. done
# 驗證進程已退出
ps -ef | grep mysqld
# 無 mysqld 進程即成功
# 核心原則:先移除依賴包,後移除被依賴包
# 1. 移除測試、嵌入式、開發包(無被依賴)
rpm -e --nodeps MySQL-test-5.5.37-1.sles10
rpm -e --nodeps MySQL-embedded-5.5.37-1.sles10
rpm -e --nodeps MySQL-devel-5.5.37-1.sles10
# 2. 移除共享庫兼容包
rpm -e --nodeps MySQL-shared-compat-5.5.37-1.sles10
# 3. 移除客戶端、共享庫
rpm -e --nodeps MySQL-client-5.5.37-1.sles10
rpm -e --nodeps MySQL-shared-5.5.37-1.sles10
# 4. 最後移除服務端核心包
rpm -e --nodeps MySQL-server-5.5.37-1.sles10
關於 --nodeps:MySQL RPM 包間相互依賴,正常移除需嚴格按反向依賴順序。使用 --nodeps 強制忽略依賴檢查,配合上述順序可避免「包正在被使用」報錯。生產環境建議**不加 --nodeps**,嚴格按 rpm -e 順序執行,若報錯再分析具體依賴。
# 1. 定位殘留路徑
find / -name mysql -type d 2>/dev/null | grep -v proc
# 典型殘留路徑:
/var/lib/mysql # 數據目錄(核心)
/var/lib/mysql/mysql # 系統庫
/usr/lib64/mysql # 庫文件
/etc/my.cnf # 配置文件(可能在 /etc/)
/usr/local/xxx/sql/mysql # 業務項目引用(勿誤刪)
# 2. 刪除 MySQL 專屬目錄(謹慎確認!)
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
rm -rf /usr/lib64/mysql
rm -rf /etc/apparmor.d/abstractions/mysql # SUSE AppArmor 配置
# 3. 配置文件備份後刪除
[ -f /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak.$(date +%F)
# 4. 日志目錄(如自定義)
rm -rf /var/log/mysql # 或 /var/log/mysqld.log
# 1. 檢查 mysql 用戶
id mysql
# uid=104(mysql) gid=106(mysql) groups=106(mysql)
# 2. 刪除用戶與組(確認無其他服務使用)
userdel mysql
groupdel mysql
# 3. 清理啟動腳本殘留
rm -f /etc/init.d/mysql
chkconfig --del mysql # 或 systemctl disable mysql
# 1. RPM 數據庫查詢
rpm -qa | grep -i mysql
# 無輸出 = 成功
# 2. 服務管理查詢
chkconfig --list | grep mysql
systemctl list-unit-files | grep mysql
# 無輸出 = 成功
# 3. 文件系統掃描
find / -name "*mysql*" -type f 2>/dev/null | head -20
# 僅剩應用代碼引用、備份文件等非 MySQL 運行時文件
| 場景 | 風險 | 應對 |
|---|---|---|
| 數據目錄掛載獨立分區 | rm -rf /var/lib/mysql 僅刪除掛載點文件,分區數據殘留 | 先 umount /var/lib/mysql,再刪除目錄,分區另行處理 |
| 共享庫被其他程序佔用 | rpm -e 報錯「文件正在被使用」 | lsof /usr/lib64/mysql/libmysqlclient.so 找到進程停止後再移除 |
| 多 MySQL 版本共存 | 誤刪較新版本文件 | 嚴格匹配版本號 rpm -e MySQL-server-5.5.37-1.sles10,勿用通配符 |
| AppArmor/SELinux 阻擋刪除 | 權限拒絕 | 臨時置於 permissive 模式或調整策略 |
| 生產環境誤操作 | 數據永久丟失 | 操作前必須確認備份可用,建議快照/備份後再執行 |
# SUSE 12+ / openSUSE 使用 zypper
zypper remove 'MySQL-*'
zypper packages --unneeded | grep mysql # 清理孤立依賴
# RHEL/CentOS 使用 yum/dnf
yum remove 'mysql*'
dnf autoremove # 清理無用依賴
RPM 方式卸載 MySQL 核心在於:**優雅停服 → 反向依賴順序移除包 → 徹底清理數據/配置/日志/用戶 → 多維驗證**。關鍵細節:
/var/lib/mysql 包含業務核心資產,**刪除前務必三確認備份**--nodeps 為雙刃劍,生產環境慎用,優先解決依賴關係/etc/my.cnf、/var/log/mysqld.log 等易遺漏路徑遵循標準化流程,可確保環境乾淨,為後續版本升級、遷移、重裝鋪平道路。