簡體   English   中英

每周使用PHP歸檔MySQL數據

[英]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作業運行以:

  1. 從“活動”表中轉儲存檔數據(使用shell腳本中的mysqldump可能更有效)
  2. 截斷實時表
  3. 修改轉儲文件中的INSERT語句,以便表名稱引用存檔表而不是活動表
  4. 將存檔數據追加到存檔表(同樣,可以僅通過外殼腳本從轉儲文件導入,例如mysql dbname <dumpfile.sql)

這將取決於您對數據進行存檔后的處理方式,但是您是否考慮過使用MySQL復制?

您可以將另一台服務器設置為復制從屬服務器,一旦所有數據都被復制,則在刪除或使用SET BIN-LOG 0進行截斷之前,要避免該語句也被復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM