Mysql

從 MySQL 5.5 附件表備份/導出數據一直失敗!

  • September 19, 2017

任何人都可以請幫助!- 我在 MySQL 5.5 數據庫中有一個大表。它是一個表,其中包含 blob/二進制數據的混合以及帶有指向文件路徑的連結的數據行。它有超過一百萬行。

我在從該表中獲取數據以將其遷移到另一台伺服器時遇到了絕望的問題。

我已經嘗試了各種方法 - mysqldump(帶和不帶 -quick),通過命令行轉儲查詢結果。使用 MySQL 管理工具 (Navicat) 打開數據並將其導出到文件、CSV,或將數據傳輸(逐行)到另一個數據庫和/或另一個伺服器,但都無濟於事。

當嘗試使用數據庫管理工具 (Navicat) 時,它會獲得大約 250k 條記錄,然後失敗並出現“記憶體不足”錯誤。我無法從我嘗試過的其他程序中獲得任何錯誤消息,但它們似乎在大約相同數量的記錄中失敗。

我嘗試過使用 MySQL 記憶體變數(緩衝區大小、日誌文件大小等),這似乎確實對導出停止的位置產生了影響(目前我實際上讓它變得更糟)。

另外 - max_allowed_pa​​cket 設置為非常大,因為我知道這也可能是一個問題。

我真的是在黑暗中拍攝,我不停地轉來轉去,嘗試同樣的事情,卻一無所獲。誰能給我任何具體的指導,或者推薦任何我可以用來提取這些數據的工具?

在希望和提前感謝!

下面是更多資訊 - 以下是一些問題和建議:

我試圖轉儲的表的大小 - 很難說,但是當 mysqldump 死亡時,sql 轉儲會達到 27gb。總共可能是大約 4 倍。

我嘗試執行以下 mysqldump 命令:

mysqldump --single-transaction --quick mydatabase attachments --password=abc123 -u root > d:\attachments.sql 

這給出了錯誤:

mysqldump:錯誤 2013:在查詢期間失去與 MySQL 伺服器的連接,在行中轉儲表附件:251249 – Mayb2Moro 4 小時前

伺服器有 8gb 記憶體,下面複製了一些相關設置。它是一個 INNODB 數據庫/表。

innodb_buffer_pool_size=3000M
innodb_log_file_size=1113M
max_allowed_packet=2024M
query_cache_size=52M
tmp_table_size=500M
myisam_sort_buffer_size=50M

嘗試增加您的net_write_timeout(在您的 blob 和二進制值場景中,可能預設值 60secs 太小)

參考:

net_write_timeout

一般來說:

net_read_timeout

這是您執行的 mysqldump 命令

mysqldump --single-transaction --quick mydatabase attachments --password=abc123 -u root > d:\attachments.sql

您應該嘗試兩個參數

擴展插入

有人在 MySQL 文件中寫了這篇文章

由 Enrico Modanese 於 2006 年 7 月 13 日下午 1:05 發布

我經常出錯

$$ MySQL 4.* and 5.* $$關於重新載入具有大 blob 的數據庫轉儲。我發現解決方案使用–skip-extended-insert 禁用–extended-insert(包含在多個選項–opt 中,預設啟用)。我認為這種方式更安全,但也更慢。

hex-blob(可選)

使用十六進製表示法轉儲二進制列(例如,‘abc’ 變為 0x616263)。受影響的數據類型是 BINARY、VARBINARY、BLOB 類型和 BIT。

概括

您的 mysqldump 現在應該如下所示

mysqldump --single-transaction --skip-extended-insert --hex-blob --quick mydatabase attachments --password=abc123 -u root > d:\attachments.sql

警告

使用–skip-extended-insert將使每一行成為單個 INSERT 命令。這會導致兩個問題

  1. 慢得多的mysqldump
  2. 更大的mysqldump

確保云端硬碟D:有足夠的空間(也許 2TB ???)

試一試 !!!

引用自:https://dba.stackexchange.com/questions/47851