MariaDB 用戶遷移筆記:10.3 → 10.11

踩坑紀錄

問題描述

在進行 MariaDB 10.3 升級到 10.11 的用戶遷移時,發現無法直接使用 mysqldump mysql user 的方式匯出用戶,因為 MariaDB 10.4 以後權限系統架構改變

版本差異

版本用戶資料表說明
MariaDB 10.3 及以前mysql.user傳統表結構
MariaDB 10.4 及以後mysql.global_privJSON 格式儲存權限

錯誤示範

# ❌ 這在 10.11 會失敗,因為 mysql.user 表已不存在
mysqldump -u root -p mysql user > users.sql

解決方案

推薦方法:使用 pt-show-grants

pt-show-grants 是 Percona Toolkit 的工具,可以產生跨版本相容的 GRANT 語句。

Ubuntu 安裝 Percona Toolkit

# 方法一:直接 apt 安裝
sudo apt update
sudo apt install percona-toolkit -y

# 方法二:從 Percona 官方源安裝(較新版本)
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt update
sudo apt install percona-toolkit -y

驗證安裝

pt-show-grants --version

匯出用戶權限

# 在 MariaDB 10.3 主機執行
pt-show-grants -u root -p > grants.sql

# 指定遠端主機
pt-show-grants -h 192.168.1.100 -u root -p > grants.sql

匯入到 10.11

# 匯入權限
mariadb -u root -p < grants.sql

# 重載權限(重要!)
mariadb -u root -p -e "FLUSH PRIVILEGES;"

驗證遷移結果

-- 在 10.11 檢查用戶是否匯入成功
SELECT user, host FROM mysql.global_priv 
WHERE user NOT IN ('root', 'mariadb.sys', 'PUBLIC', '');

-- 檢查特定用戶權限
SHOW GRANTS FOR 'appuser'@'%';

其他方法(備用)

方法二:手動產生 GRANT 語句

適用於無法安裝 pt-show-grants 的環境。

在 10.3 執行:

#!/bin/bash
OUTPUT="grants_manual.sql"

mysql -u root -p -N -e "
SELECT DISTINCT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') 
FROM mysql.user 
WHERE user NOT IN ('root', 'mysql.sys', '') AND user != ''" | while read cmd; do
    mysql -u root -p -N -e "$cmd" 2>/dev/null | sed 's/$/;/'
done > ${OUTPUT}

方法三:含密碼 Hash 的完整匯出

如果需要保留密碼(不用重設):

#!/bin/bash
# 匯出 CREATE USER(含密碼 hash)
mysql -u root -p -N -e "
SELECT CONCAT(
  'CREATE USER IF NOT EXISTS ''', user, '''@''', host, 
  ''' IDENTIFIED BY PASSWORD ''', IFNULL(password, ''), ''';'
) 
FROM mysql.user 
WHERE user NOT IN ('root', 'mysql.sys', 'mariadb.sys', '') 
  AND user != ''" > create_users.sql

# 再用 pt-show-grants 匯出權限
pt-show-grants >> create_users.sql

注意事項

  1. 不要遷移系統用戶:root、mysql.sys、mariadb.sys 等系統用戶不需要遷移
  2. 密碼相容性:10.3 和 10.11 的密碼 hash 格式相容,可直接使用
  3. 認證外掛:如使用 unix_socket 或 PAM 認證,需確認 10.11 有對應外掛
  4. 新權限:10.11 有新增權限如 BINLOG ADMIN,舊版沒有不影響遷移
  5. 務必 FLUSH PRIVILEGES:匯入後一定要執行,否則權限不會生效

快速參考

# 完整遷移流程(一行指令)
# 在 10.3 主機
pt-show-grants -u root -p > grants.sql

# 複製到 10.11 主機後
mariadb -u root -p < grants.sql && mariadb -u root -p -e "FLUSH PRIVILEGES;"

相關資源


404NOTE
404NOTE
文章: 45

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *