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 檔。-w 條件解析正確性。