mysqldump --其中 = 運算子無法取得所有行

mysqldump --其中 = 運算子無法取得所有行

我遇到一個特定表的情況,該表現在認為它包含 4 PB 的資料。我知道這聽起來很酷,但我向你保證,它只位於 60GB 分割區上。

該表有 9 個欄位。其中之一是domain_id田地。它是識別行的最佳字段,因為只有大約 6300 行。唯一符合的其他欄位選項有超過 200 萬筆記錄,而且這更加困難。

我無法直接進行 mysqldump,因為它會嘗試輸出所有 4PB 的資料並在接近該資料之前很久填充驅動器,因此我需要透過手術刪除好東西,銷毀資料庫,然後重新建立它。

我相信,如果我可以對每筆記錄進行轉儲domain_id,那麼我將從中獲取大部分可用資料。這就是我正在嘗試使用的:

mysqldump -u root --skip-opt -q --no-create-info --skip-add-drop-table \
 --max_allowed_packet=1000000000 database table --where="domain_id=10" \
 > domains10.sql

使用這個我希望導出每一行domain_id 10

但是,當我檢查匯出時,我只得到 1 行,但是當我查看資料庫時,卻發現有很多行。就好像操作員剛找到一個,然後就放棄了。

我嘗試過各種運算符。使用<>我可以獲得更多數據,但匯出在數據已受到損害的某些行處短暫停止。由於需要檢查 6000 多個行,我無法輕鬆縮小匯出中受影響的行的範圍。

因此,我需要的是一個基本上可以做我想做=的事情的運算符,只需匯出與特定欄位匹配的所有記錄即可。

另請注意,我獲得此資料庫甚至可訪問的唯一方法是透過 innodb 強制恢復 3。

期待任何有幫助的答案。

答案1

從您所寫的內容來看,資料庫似乎已損壞(認為 4PB 而不是 60GB 是一種贈品)。

我懷疑除非您先修復資料庫,否則您無法保證檢索到的資訊的可靠性。你試過這個嗎?

否則,如果您執行“-f”鍵 - 即使遇到錯誤仍繼續,會發生什麼?

答案2

你認為桌子實際上應該有多大?

您可以嘗試將其轉換為 myisam:

alter table ggg engine=myisam;

但是,聽起來您的資料庫已損壞。

最好的計劃可能是聯絡 innodb 人員尋求支援。

http://www.innodb.com/

答案3

我不是資料庫管理員,所以也許這個想法是完全錯誤的,但是轉儲中的資料是否應該與文字字串的所有記錄保持一致?我想知道您是否可以轉儲“4 PB”資料庫並透過 grep/strings 過濾器重定向它,這樣如果損壞的資料不是有效的字串,它就不會被寫入磁碟。這取決於損壞的資料是否只是難以理解的垃圾...

否則這裡的其他人將不得不建議修復工具來嘗試修復資料庫。

答案4

嘗試新增--skip-extended-insert.寫入文件時,事情可能會被破壞。

相關內容