首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Debian/Ubuntu 徹底卸載 MySQL/MariaDB 並清理殘留文件指南

     編輯:MySQL 資料庫相關知識

使用 apt-get --purge remove 往往無法完全清理 MySQL 產生的資料目錄、配置文件、日誌,導致重新安裝繼承舊問題。本文提供徹底卸載的標準流程。

標準卸載流程

# 1. 停止服務
sudo systemctl stop mysql
# 或
sudo service mysql stop

# 2. 移除所有相關套件 (含配置文件)
sudo apt-get --purge remove mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

# 3. 移除不再需要的依賴套件
sudo apt-get autoremove

# 4. 清理 apt 緩存
sudo apt-get autoclean

深度清理殘留文件 (關鍵步驟)

# 5. 刪除資料目錄 (謹慎!備份優先)
sudo rm -rf /var/lib/mysql/
sudo rm -rf /var/lib/mysql-files/
sudo rm -rf /var/lib/mysql-keyring/

# 6. 刪除配置目錄
sudo rm -rf /etc/mysql/
sudo rm -rf /etc/mysql.conf.d/

# 7. 刪除日誌目錄
sudo rm -rf /var/log/mysql/

# 8. 刪除運行時 socket/pid 目錄
sudo rm -rf /var/run/mysqld/
sudo rm -rf /tmp/mysql.sock

# 9. 刪除 AppArmor 配置 (如存在)
sudo rm -rf /etc/apparmor.d/usr.sbin.mysqld
sudo rm -rf /etc/apparmor.d/abstractions/mysql

驗證清理完成

# 檢查是否有殘留套件
dpkg -l | grep -i mysql

# 檢查殘留文件
find / -name "*mysql*" -type d 2>/dev/null | grep -v "/proc\|/sys\|/run"

# 檢查用戶/組是否殘留
getent passwd mysql
getent group mysql
# 如存在且不再需要:
# sudo deluser mysql
# sudo delgroup mysql

重新安裝

# 更新套件索引
sudo apt-get update

# 安裝指定版本 (如 MySQL 8.0)
sudo apt-get install mysql-server-8.0

# 或 MariaDB
sudo apt-get install mariadb-server

常見坑點提醒

  1. 資料目錄非套件擁有:/var/lib/mysql 由 mysql 運行時建立,--purge 不會刪除,必須手動 rm -rf
  2. 配置文件分散:/etc/mysql/my.cnf、/etc/mysql/conf.d/、/etc/mysql/mysql.conf.d/ 皆可能包含自定義配置
  3. AppArmor/SELinux 策略:可能阻止新安裝的 mysqld 讀寫資料目錄,需同步清理或重新配置
  4. systemd 服務單元:systemctl daemon-reload 確保舊單元緩存清除

一鍵清理腳本 (生產環境請逐行審核後執行)

#!/bin/bash
set -euo pipefail

echo "=== 停止服務 ==="
systemctl stop mysql 2>/dev/null || service mysql stop 2>/dev/null

echo "=== 移除套件 ==="
apt-get --purge remove -y 'mysql-*' 'mariadb-*' 2>/dev/null
apt-get autoremove -y
apt-get autoclean -y

echo "=== 清理文件 ==="
dirs=(
    "/var/lib/mysql"
    "/var/lib/mysql-files"
    "/var/lib/mysql-keyring"
    "/etc/mysql"
    "/etc/mysql.conf.d"
    "/var/log/mysql"
    "/var/run/mysqld"
)
for d in "${dirs[@]}"; do
    if [[ -d "$d" ]]; then
        rm -rf "$d"
        echo "Removed: $d"
    fi
done

echo "=== 驗證 ==="
dpkg -l | grep -E 'mysql|mariadb' || echo "無殘留套件"
echo "完成!"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved