首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysqldump 參數陷阱實錄:--databases 與單庫模式導致資料庫被誤刪的慘痛教訓

     編輯:MySQL 資料庫相關知識

一次生產事故複盤: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

避坑鐵律

  1. 備份腳本固定加 --no-create-db:抑制 CREATE DATABASE 輸出。
  2. 還原前必須審查 .sql 開頭 20 行,確認無 DROP/CREATE DATABASE。
  3. 生產還原採用「新庫名 + 重命名」策略:CREATE DATABASE tpcc_new; SOURCE ...; RENAME TABLE tpcc TO tpcc_old, tpcc_new TO tpcc;
  4. 自動化備份腳本加入 --single-transaction --routines --triggers --events --master-data=2 標準參數組。

這個「多一個參數、少一個庫」的教訓,值得每個 DBA 刻在鍵盤上。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved