在進行 MySQL 資料庫備份與遷移時,正確設定備份帳號權限至關重要。本文整理 MySQL 權限對照表,並以 mysqldump 完整備份所需的最小權限集為例,說明實際授權與指令用法。
為了使用 mysqldump 進行完整備份(含結構、資料、觸發器、常式、事件、二進制日志位置),備份帳號需具備以下權限:
GRANT EVENT, RELOAD, LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY 'your_password';
| 權限 | 用途 |
|---|---|
SELECT | 讀取表資料,基礎權限 |
LOCK TABLES | 鎖定表以保證備份一致性(--lock-tables/--single-transaction) |
SHOW VIEW | 導出視圖定義 |
REPLICATION CLIENT | 獲取二進制日志位置(--master-data) |
RELOAD | 執行 FLUSH TABLES WITH READ LOCK(--master-data、--flush-logs) |
EVENT | 導出事件調度器定義(--events 或 -E) |
TRIGGER | 導出觸發器(--triggers,預設開啟) |
PROCESS | 查看所有線程(某些版本 --single-transaction 需要) |
mysqldump -u db_user_backups -p'your_password' -h Host \
--master-data=2 -E -F -R --triggers \
--add-drop-database --add-drop-table \
-B DatabaseName > backup_$(date +%F).sql
| 參數 | 說明 |
|---|---|
--master-data=2 | 輸出 CHANGE MASTER TO 註釋(含 Binlog 位置),2 表示註釋化 |
-E / --events | 導出事件 |
-F / --flush-logs | 備份前刷新 Binlog,配合 --master-data 實現增量備份基點 |
-R / --routines | 導出存儲過程與函數 |
--triggers | 導出觸發器(預設開啟) |
--add-drop-database | 在 CREATE DATABASE 前加 DROP DATABASE IF EXISTS |
--add-drop-table | 在 CREATE TABLE 前加 DROP TABLE IF EXISTS |
-B / --databases | 指定資料庫名,輸出包含 CREATE DATABASE 與 USE 語句 |
ALL PRIVILEGES:除 GRANT OPTION 外所有權限CREATE USER、DROP USER、RELOAD、SHUTDOWN、PROCESS、FILE、SHOW DATABASES、REPLICATION CLIENT、REPLICATION SLAVE、SUPERSELECT、INSERT、UPDATE、DELETECREATE、DROP、ALTER、INDEXCREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE、EXECUTE、EVENT、TRIGGERLOCK TABLESREFERENCESGRANT OPTION:允許受權者將擁有的權限授予其他用戶-- 撤銷特定權限
REVOKE INSERT, UPDATE ON db_name.* FROM 'user'@'host';
-- 撤銷所有權限(保留 USAGE)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host';
-- 徹底移除用戶
DROP USER 'user'@'host';
'backup_user'@'10.0.%.%'),禁止 '%'。audit_log 記錄備份帳號活動,設置告警偵測異常操作。

文中圖片為 MySQL 官方權限對照表截圖,輔助理解各權限層級與適用物件。