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

mysqldump -w 參數條件備份實戰:引號陷阱與時間函式陷阱避坑指南

     編輯:MySQL 資料庫相關知識

mysqldump --where / -w 可指定備份條件,但單雙引號嵌套與函式呼叫極易出錯。本文實測避坑指南。

基本用法

mysqldump --single-transaction -w 'id < 10000' mydb mytable > mydump.sql

加入時間範圍條件

mysqldump --single-transaction -w "id < 10000 AND logintime < UNIX_TIMESTAMP('2014-06-01')" mydb mytable > mydump.sql

引號陷阱:單引號包裹導致函式參數被吃掉

# 錯誤寫法
mysqldump --single-transaction -w 'id < 10000 AND logintime < UNIX_TIMESTAMP('2014-06-01')' mydb mytable > mydump.sql

實際傳給 MySQL 的 WHERE 條件變為:

WHERE id < 10000 AND logintime < UNIX_TIMESTAMP(2014-06-01)

UNIX_TIMESTAMP('2014-06-01') 變成 UNIX_TIMESTAMP(2007)(2014-6-1=2007),條件完全錯誤。

正確引號策略

  • 外層用雙引號,內層字串字面值用單引號:-w "col < 100 AND dt > '2014-06-01'"
  • 或外層單引號,內層跳脫:-w 'col < 100 AND dt > \"2014-06-01\"'
  • 含函式時:-w "col < 100 AND ts < UNIX_TIMESTAMP('2014-06-01')"

驗證技巧

先用 echo 預覽實際命令:

echo mysqldump --single-transaction -w "id < 10000 AND logintime < UNIX_TIMESTAMP('2014-06-01')" mydb mytable

確認輸出的 WHERE 條件符合預期再執行。

進階建議

  • 大表條件備份建議改用 pt-archiver 或 SELECT ... INTO OUTFILE 分批導出,避免單一巨大 dump 檔。
  • 備份腳本納入版控,CI 流程中自動測試 -w 條件解析正確性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved