MySQL 資料庫備份與還原:mysqldump 實戰指南
mysqldump 基本用法
mysqldump -h host -u user -p password db_name [tbl_name ...] > backup.sql
-h:主機(本機可用 localhost,遠程用 IP)。
-u:用戶名。
-p:密碼(緊跟 -p 或回車輸入)。
db_name:目標資料庫。
>:Shell 重導向,將輸出寫入文件。
常見備份場景
| 需求 | 命令範例 |
| 備份單庫結構+資料 | mysqldump -uroot -p db1 > db1_full.sql |
| 僅備份結構(不含資料) | mysqldump -uroot -p -d db1 > db1_struct.sql |
| 備份單表 | mysqldump -uroot -p db1 tbl1 > tbl1.sql |
| 備份所有庫 | mysqldump -uroot -p --all-databases > all.sql |
| 含存儲過程/函數/觸發器 | mysqldump -uroot -p -R db1 > db1_with_routines.sql |
| 單事務一致性備份(InnoDB) | mysqldump -uroot -p --single-transaction db1 > db1_consistent.sql |
| 壓縮輸出 | mysqldump -uroot -p db1 | gzip > db1.sql.gz |
還原操作
- 登入 MySQL:
mysql -uroot -p
- 建立目標庫(若不存在):
CREATE DATABASE db2;
- 切換庫:
USE db2;
- 執行腳本:
SOURCE /path/db1_full.sql; 或 Shell 下 mysql -uroot -p db2 < db1_full.sql
關鍵提示
- 備份文件為 SQL 腳本,含
CREATE TABLE、INSERT 等語句,**還原前目標庫必須為空**,否則主鍵衝突報錯。
- 大庫還原建議關閉二進制日志(
SET sql_log_bin=0;)與外鍵檢查(SET foreign_key_checks=0;)加速。
- 定期驗證備份可用性:建立臨時庫執行還原,抽樣核對行數、檢查和。
- Windows 環境需將
mysqldump.exe 所在目錄加入 PATH,或使用完整路徑調用。
自動化備份腳本雛形
#!/bin/bash
# daily_backup.sh
DATE=$(date +%F)
mysqldump -uroot -p'pwd' --single-transaction --routines --triggers --events db1 | gzip > /backup/db1_${DATE}.sql.gz
# 保留 7 天
find /backup -name 'db1_*.sql.gz' -mtime +7 -delete