mysqldump 是 MySQL 官方提供的邏輯備份工具,支援完整庫、單表、僅結構、僅資料、遠程備份等多種場景。本文整理常用指令格式與實戰範例,涵蓋從基礎備份到自動化腳本的完整用法,適合 DBA 與開發者速查參考。
mysqldump [options] db_name [tbl_name ...] > backup.sql
mysqldump [options] --databases db_name1 [db_name2 ...] > backup.sql
mysqldump [options] --all-databases > backup.sql
| 參數 | 說明 |
|---|---|
-u, --user |
使用者名稱 |
-p, --password |
密碼(建議不帶值,互動式輸入) |
-h, --host |
主機位址(預設 localhost) |
-P, --port |
連接埠(預設 3306) |
-d, --no-data |
僅匯出結構(不含資料) |
-t, --no-create-info |
僅匯出資料(不含 CREATE TABLE) |
--single-transaction |
InnoDB 熱備份必備,啟動事務確保一致性 |
--routines |
包含預存程序/函數 |
--triggers |
包含觸發器 |
--events |
包含排程事件 |
--master-data=2 |
附加 CHANGE MASTER TO 註解,適合主從同步基準點 |
--hex-blob |
二進位欄位以十六進位匯出 |
--compress |
壓縮傳輸(遠程備份建議開啟) |
mysqldump -u root -p --single-transaction --routines --triggers --events db_name > db_full_$(date +%F).sql
mysqldump -u root -p -d db_name > db_structure.sql
# 單表
mysqldump -u root -p db_name table1 > table1.sql
# 多表(結構+資料)
mysqldump -u root -p db_name table1 table2 table3 > tables_subset.sql
# 多表(僅結構)
mysqldump -u root -p -d db_name table1 table2 table3 > tables_structure.sql
mysqldump -u root -p --tables db_name table1 table2 > out.sql
mysqldump -h 192.168.1.100 -u root -p --single-transaction db_name | gzip > db_remote_$(date +%F).sql.gz
cd C:\Program Files\MySQL\MySQL Server 5.7\bin
mysqldump -u root -p db_name > D:\backups\db_%date:~,4%%date:~5,2%%date:~8,2%.sql
mysql -u root -p db_name < backup.sql
mysql -u root -p db_name < structure.sql
mysql -u root -p --default-character-set=utf8mb4 db_name < backup.sql
SHOW DATABASES; -- 查看所有資料庫
USE db_name; -- 切換資料庫
SHOW TABLES; -- 查看資料表
DESCRIBE table_name; -- 查看表結構
SHOW CREATE TABLE table_name; -- 查看建表 SQL
#!/bin/bash
# daily_backup.sh
BACKUP_DIR="/backup/mysql"
DB_USER="backup_user"
DB_PASS="secure_password"
DB_NAME="production_db"
DATE=$(date +%F_%H-%M-%S)
mkdir -p $BACKUP_DIR
mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers --events $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# 保留 7 天
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
加入 crontab:0 2 * * * /scripts/daily_backup.sh 每天凌晨 2 點自動備份。
--single-transaction 的備份,會鎖表阻塞寫入SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, RELOAD, REPLICATION CLIENT 權限Percona XtraBackup 進行物理熱備份,速度更快、對業務影響更小