2016-07-25 26 views
0

這裏就是我想(MySQL的例子)做:如何大的SQL轉儲文件分割成小塊,並保持在原文件中的每條記錄後面,儘管其他的刪除記錄

  1. 傾銷只有結構 - structure.sql
  2. 傾銷所有表數據 - data.sql
  3. 劈裂data.sql,並把每個表中的數據信息單獨的文件 - table1.sql,表2,SQL,table3.sql ... tablen.sql
  4. 分裂每個表成更小的文件(每個文件1K線)
  5. commiting所有文件在我的本地git倉庫
  6. 應對所有目錄進行遠程安全serwerwer

我有#4步的問題。

比如我分裂table1.sql到3個文件:table1_a.sqltable1_b.sqltable1_c.sql。 如果在新轉儲中有新記錄,那麼它就會被添加到table1_b.sql中。

但是,如果table1_a.sql中存在已刪除的記錄,則所有下一個記錄都會移動,git會將文件table1_b.sql和table1_c.sql視爲已更改並且不成功。

從根本上講,它破壞了在SCM中保留sql備份的整個思路。

我的問題:如何將大型SQL轉儲文件拆分成小塊,並保留原始文件中的每個記錄,儘管後來其他記錄刪除?

回答

0

不要將它們分開。或者用PK值的範圍來分割它們。或者將它們分割爲每個文件1行(並且在表名+主鍵的內容之後命名文件)。

(即除了更加明顯XY的答案,這是我的本能反應。)

+0

我不知道哪些值是PK。 Data.sql來自mysqldump。 –

0

斯普利特SQL轉儲在500行的文件執行在終端:

$ split -l 5000 hit_2017-09-28_20-07-25.sql dbpart- 
相關問題