一次生產事故複盤:mysqldump --databases tpcc 與 mysqldump tpcc 看似相同,實則前者輸出包含 CREATE DATABASE 與 USE 語句,若直接 SOURCE 還原且目標庫同名,會觸發 DROP DATABASE → CREATE DATABASE 導致資料清空。
# 1. 加 --databases 參數
mysqldump --databases tpcc > v1.sql
# v1.sql 內容包含:
# CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tpcc` ...
# USE `tpcc`;
# 2. 不加 --databases
mysqldump tpcc > v2.sql
# v2.sql 僅包含表結構與資料,無 CREATE/USE DATABASE
| 模式 | 輸出內容 | 還原風險 |
|---|---|---|
mysqldump --databases db | 含 CREATE DATABASE、USE db | 若目標庫存在,SOURCE 會重建庫 → 資料歸零 |
mysqldump db | 僅表結構與資料 | 安全,需預先建庫並 USE |
--no-create-db:抑制 CREATE DATABASE 輸出。DROP/CREATE DATABASE。CREATE DATABASE tpcc_new; SOURCE ...; RENAME TABLE tpcc TO tpcc_old, tpcc_new TO tpcc;--single-transaction --routines --triggers --events --master-data=2 標準參數組。這個「多一個參數、少一個庫」的教訓,值得每個 DBA 刻在鍵盤上。