# 備份單庫
mysqldump -u root -p db_name > backup.sql
# 還原單庫(需先建庫)
mysql -u root -p -e "CREATE DATABASE db_name;"
mysql -u root -p db_name < backup.sql
# 導出(含結構+數據+存儲過程+觸發器)
mysqldump -u root -p \
--single-transaction --routines --triggers --events \
--master-data=2 --hex-blob --quick \
sugarcrm > sugarcrm_$(date +%F).sql
# 壓縮存儲
mysqldump -u root -p sugarcrm | gzip > sugarcrm_$(date +%F).sql.gz
# 還原
gunzip -c sugarcrm_2024-01-15.sql.gz | mysql -u root -p sugarcrm
# 或
mysql -u root -p sugarcrm < sugarcrm_2024-01-15.sql
# 指定多庫
mysqldump -u root -p --databases bugs sugarcrm > bugs_sugarcrm.sql
# 驗證包含庫
grep "Current Database:" bugs_sugarcrm.sql
mysqldump -u root -p --all-databases > all_dbs_$(date +%F).sql
mysqldump -u root -p sugarcrm accounts_contacts > accounts_contacts.sql
# 源庫備份並直接導入目標庫(需目標庫已存在)
mysqldump -h src_host -u root -p src_db | mysql -h dst_host -u root -p dst_db
# 參數說明
# -h src_host: 源服務器
# -h dst_host: 目標服務器
# 管道直接傳輸,無中間文件,適合遷移、構建從庫
等同於:--add-drop-table --add-locks --create-options --quick --extended-insert --lock-tables --set-charset --disable-keys
--extended-insert 避免超大 SQL 行等同於:--skip-add-drop-table --no-set-names --skip-disable-keys --skip-add-locks
| 場景 | 推薦參數 | 避免參數 |
|---|---|---|
| InnoDB 大庫熱備份 | --single-transaction --master-data=2 --routines --triggers --events --hex-blob --quick --max_allowed_packet=1G | --lock-tables (阻塞寫入) |
| MyISAM 庫備份 | --lock-tables --extended-insert=FALSE --disable-keys | --single-transaction (無效) |
| 跨版本遷移 | --compatible=mysql40 --no-create-options | --routines (語法可能不兼容) |
| 僅結構遷移 | --no-data --routines --triggers --events | --quick (無數據無需) |
| 僅數據同步 | --no-create-info --extended-insert=FALSE | --routines |
mydumper -h localhost -u root -p -B db_name -o /backup -t 8 -c
# -t 8: 8線程並行, -c: 壓縮
# 1. 全量恢復
mysql -u root -p db_name < full_backup.sql
# 2. 重放增量 binlog
mysqlbinlog --start-datetime="2024-01-15 10:00:00" \
--stop-datetime="2024-01-15 14:30:00" \
/var/lib/mysql/binlog.000001 | mysql -u root -p db_name
# 導出後批量替換
sed -i "s/DEFINER=\`[^@]*\`@\`[^@]*\`/DEFINER=CURRENT_USER/g" backup.sql
# 或指定目標用戶
sed -i "s/DEFINER=\`[^@]*\`@\`[^@]*\`/DEFINER=\`app\`@\`%\`/g" backup.sql
head -20 backup.sql 包含版本、字符集、USE DATABASEgrep -c "CREATE TABLE" backup.sql 表數量預期一致