Ubuntu/Debian 系列系統下,MySQL 的安裝、卸載、字符集配置看似簡單,實則暗藏 mysql-libs 殘留、my.cnf 版本差異、systemd 服務名變更、SELinux/AppArmor 干擾等坑點。本文基於 Ubuntu 14.04/16.04 + MySQL 5.5/5.6/5.7 親測,提供「三步徹底卸載 → 兩方式安裝 → 版本感知字符集配置 → 驗證生效」標準化流程。
# 1. 檢查是否安裝
ps -aux | grep mysql
# 無輸出即未運行;有輸出則記錄進程信息
# 2. 三連擊徹底清除 (需 root/sudo)
# 步驟 1: 移除服務端包 (自動處理依賴,包含配置文件)
sudo apt-get autoremove --purge mysql-server-5.7 # 替換為實際版本:5.5/5.6/5.7/8.0
# 步驟 2: 移除公共依賴包 (libmysqlclient 等)
sudo apt-get remove mysql-common
# 步驟 3: 清理殘留配置文件 (rc 狀態包)
dpkg -l | grep ^rc | awk '{print $2}' | sudo xargs dpkg -P
# 4. 驗證徹底性
dpkg -l | grep mysql
# 應無輸出
ls /etc/mysql /var/lib/mysql /var/log/mysql 2>/dev/null
# 目錄應不存在或為空
關鍵點: autoremove --purge 同時刪除包與配置文件;mysql-common 必須單獨移除;dpkg -P 清除 rc (remove 配置殘留) 狀態包,防止重裝讀取舊配置。
# 更新源
sudo apt-get update
# 安裝服務端 + 客戶端
sudo apt-get install mysql-server mysql-client
# 安裝過程會提示設置 root 密碼 (5.5/5.6) 或生成臨時密碼 (5.7+)
# 服務自動啟動並加入開機自啟
# 1. 下載並安裝官方 repo 配置包
wget https://repo.mysql.com/mysql-apt-config_0.8.22-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
# 交互選擇:MySQL 版本 (5.6/5.7/8.0/Cluster) → Apply
# 2. 更新並安裝
sudo apt-get update
sudo apt-get install mysql-community-server mysql-community-client
進入 MySQL 確認當前字符集:
mysql -u root -p
SHOW VARIABLES LIKE '%character%';
# 編輯 /etc/mysql/my.cnf
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8 # 注意:5.5 用 default-character-set
# 編輯 /etc/mysql/my.cnf (或 /etc/mysql/mysql.conf.d/mysqld.cnf)
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4 # 關鍵:連字符版!
collation-server = utf8mb4_general_ci
# 或 8.0 推薦:collation-server = utf8mb4_0900_ai_ci
版本分水嶺: 5.5 用 default-character-set,5.6+ 必須用 character-set-server。混用將導致配置失效,字符集仍為 latin1。
# 重啟服務 (systemd)
sudo systemctl restart mysql
# 或 SysVinit
sudo /etc/init.d/mysql restart
# 進入驗證
mysql -u root -p
SHOW VARIABLES LIKE '%char%';
成功標準:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
除 character_set_system (固定 utf8) 和 character_set_filesystem (固定 binary) 外,其餘 6 項必須為 utf8mb4。
# 庫級
ALTER DATABASE `db_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
# 表級 (鎖表重建,大表用 pt-online-schema-change / gh-ost)
ALTER TABLE `db_name`.`table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
若遷移 datadir 後啟動失敗,日志顯示 Permission denied,檢查 AppArmor:
# 查看 MySQL 配置文件
cat /etc/apparmor.d/usr.sbin.mysqld
# 需包含新 datadir 路徑權限:
# /new/datadir/ r,
# /new/datadir/** rwk,
# 修改後重載
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
Linux MySQL 標準化運維鐵律:卸載三連擊 (autoremove --purge → remove common → dpkg -P rc) → 安裝選官方源 → 字符集配置版本分水嶺 (5.5 default-character-set / 5.6+ character-set-server) → 重啟驗證 6 大 utf8mb4 變量 → 存量遷移 → AppArmor 放行。每一步親測有效,可作為團隊標準操作手冊 (SOP) 直接落地。