2011-02-15 31 views
3

我有一個腳本,本地主機更新,然後傾倒更新的結果給遠程主機:通過排序修復?

mysqldump --skip-tz-utc --no-create-info --insert-ignore --host=localhost -u u -ppass db table --where=\"timeStamp > FROM_UNIXTIME($time)\" | mysql -h remote -u u -ppass db 

隨着20條記錄,更新到本地主機是非常快(幾秒鐘),但轉儲到遠程主機接管4分鐘...當我看着mysql工作臺,它說遠程主機的狀態是「通過排序修復」和信息列是「/ *!40000 ALTER TABLE'表'ENABLE KEYS * /」。

這條消息的含義是什麼(爲什麼需要這麼長的時間才能將數據轉儲到遠程主機上)?

THX

回答

3

mysqldump被禁用索引,插入記錄,並重新啓用索引。這意味着它會影響整個表格,包括基於時間的更多記錄。

--skip-disable-keys添加到mysqldump的參數,並且應該停止發生。

+0

是添加「skip-triggers」選項一個好主意? – 2011-02-15 02:23:02

+0

取決於如果您在那裏更改觸發器並需要備份它們。我從你的使用模式中猜測,跳過觸發器是有道理的,但你必須親自看看它的細節。 – 2011-02-15 16:40:28

6

的mysqldump將重裝

DISABLE KEYS在做三件事到表;

多個插頁

ENABLE KEYS;

當您禁用鍵時,它實際上會禁用非唯一索引。

主鍵和唯一鍵立即加載。

啓動ENABLE KEYS後,所有非唯一索引將使用'Repair By Sorting'修復;

如果繞過DISABLE KEYS和ENABLE KEYS,會讓事情變得更糟,因爲主鍵,唯一鍵和非唯一鍵是逐行構建的。這在內部是一個更復雜的操作,MySQL必須執行完整的LOADING TABLE!

由於如此少的數據被添加,所以--skip-disable-key作爲'專制'建議既明智又簡潔。

順便說一句,這隻適用於MyISAM表。 InnoDB忽略DISABLE KEYS和ENABLE KEYS。