cmd → 進入 MySQL bin 目錄(如 cd C:\Program Files\MySQL\MySQL Server 8.0\bin)。mysql/mysqldump 通常已在 PATH 中。mysqldump -u username -p db_name > backup.sql
# 範例
mysqldump -u root -p mydb > mydb_20240115.sql
# 單表
mysqldump -u root -p db_name table_name > table.sql
# 多表(空格分隔)
mysqldump -u root -p db_name table1 table2 table3 > tables.sql
mysqldump -u root -p -d --add-drop-table db_name > structure.sql
# -d / --no-data:不含資料
# --add-drop-table:建表前先 DROP,利於覆蓋匯入
mysqldump -u root -p -t db_name table_name > data_only.sql
# -t / --no-create-info
mysqldump -h 192.168.1.100 -u root -p db_name > remote_backup.sql
mysqldump -u root -p db_name | gzip > db_name.sql.gz
# 解壓:gunzip -c db_name.sql.gz | mysql -u root -p db_name
mysql -u root -p db_name < backup.sql
# 指定編碼防亂碼
mysql -u root -p --default-character-set=utf8mb4 db_name < backup.sql
mysql -u root -p
mysql> USE db_name;
mysql> SOURCE /full/path/to/backup.sql;
⚠️ 路徑需用正斜線 / 或雙反斜線 \\,Windows 下建議用絕對路徑。
gunzip -c backup.sql.gz | mysql -u root -p db_name
| 參數 | 說明 |
|---|---|
--single-transaction | InnoDB 熱備份必加,取得一致性快照不鎖表 |
--master-data=2 | 備份檔含 CHANGE MASTER TO 註解,利於搭建從庫 |
--routines | 包含存儲過程/函數/觸發器 |
--triggers | 包含觸發器(預設開啟) |
--hex-blob | 二進位欄位用十六進位導出,避免編碼問題 |
--quick | 大表導出不緩存全表結果,直接串流寫檔 |
--lock-tables=false | 避免鎖表(需配合 --single-transaction) |
#!/bin/bash
# /usr/local/bin/backup_mysql.sh
DATE=$(date +%F_%H-%M)
DB="mydb"
USER="backup_user"
PASS="xxxx"
DIR="/backup/mysql"
mkdir -p $DIR
mysqldump -u$USER -p$PASS --single-transaction --routines --triggers --hex-blob $DB | gzip > $DIR/${DB}_${DATE}.sql.gz
# 保留 30 天
find $DIR -name "*.gz" -mtime +30 -delete
加入 crontab -e:0 2 * * * /usr/local/bin/backup_mysql.sh 每日 02:00 自動備份。
命令列 mysqldump + mysql 是最通用、效能最好、自動化友善的備份還原組合。掌握核心參數與管線操作,即可應對從開發環境到生產環境的各種遷移、備份、災難恢復場景。