[英]Archive MySQL data using PHP every week
我有一個MySQL數據庫,該數據庫每周在給定的時間(大約120萬行)在每周的某一天每周一次從源中接收大量數據,並將其存儲在“實時”表中。
我想將所有數據從“活動”表復制到存檔中,並截斷該活動表,以便為下周將出現的下一個“當前數據”騰出空間。
任何人都可以建議一種有效的方法。 我真的在努力避免-插入live_中的select *。 我希望能夠使用PHP運行此存檔器,因此我無法使用Maatkit。 有什么建議么?
編輯:此外,存檔的數據需要易於訪問。 由於每個插入都帶有時間戳,因此如果我要查找上個月的數據,我可以在存檔中進行搜索
偷偷摸摸的方式:
不要復制記錄。 太久了
相反,只需重命名活動表,然后重新創建:
RENAME TABLE live_table TO archive_table;
CREATE TABLE live_table (...);
它應該非常快速且無痛。
編輯:如果您要每個旋轉周期的存檔表,我描述的方法效果最好。 如果要維護單個存檔表,則可能需要增加技巧。 但是,如果您只想對歷史數據進行臨時查詢,則可以只使用UNION。
如果只想保存幾段時間的數據,則可以執行幾次重命名操作,其方式類似於日志輪換。 然后,您可以定義一個視圖,將存檔表UNION合並為一個大的honkin'表。
EDIT2:如果您想維護自動增量的東西,您可能希望嘗試:
RENAME TABLE live TO archive1;
CREATE TABLE live (...);
ALTER TABLE LIVE AUTO_INCREMENT = (SELECT MAX(id) FROM archive1);
但可悲的是,這行不通。 但是,如果您使用PHP驅動該過程,則很容易解決。
編寫腳本以作為cron作業運行以:
這將取決於您對數據進行存檔后的處理方式,但是您是否考慮過使用MySQL復制?
您可以將另一台服務器設置為復制從屬服務器,一旦所有數據都被復制,則在刪除或使用SET BIN-LOG 0
進行截斷之前,要避免該語句也被復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.