2017-02-21 58 views
0

我正在將MySQL數據庫從現在無法訪問的服務器移動到新的服務器。轉儲包含的表又包含二進制blob,這似乎會給MySQL命令行客戶端帶來麻煩。當試圖恢復數據庫,我收到以下錯誤:使用二進制blob恢復MySQL轉儲

ERROR at line 694: Unknown command '\''. 

我檢查在其中發生錯誤的路線,發現它是一個巨大的INSERT語句,這似乎(約長90萬個字。)將二進制斑點插入到表中。

現在,我發現thesetwo似乎與我的連接的問題。但是,兩個答案都證明不能解決我的問題。添加--default-character-set=utf8甚至--default-caracter-set=latin1都沒有改變任何內容,並且創建與--hex-dump的轉儲是不可能的,因爲源數據庫服務器不再可訪問。

有什麼辦法可以通過MySQL命令行客戶端恢復此備份?如果是的話,我需要做什麼?

如果您需要任何其他信息,請讓我知道。

在此先感謝。

編輯:我正在使用MySQL 5.6.35。此外,除了上面所述的嘗試之外,我已經嘗試將max_allowed_packet系統變量增加到其最大值 - 在服務器和客戶端上 - 但都無濟於事。

回答

0

如果我沒有記錯,您需要將my.cnf中的max_allowed_pa​​cket設置爲足夠大的值以容納轉儲文件中的最大數據blob,然後重新啓動MySQL服務器。

然後,您可以像使用恢復命令這一個:

mysql --max_allowed_packet=64M < your_dumpfile.sql 

此處瞭解詳情: [https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_allowed_packet]

+0

啊,對。我忘了提及那個,我的壞處。我已經嘗試將max_allowed_pa​​cket設置爲最大值(1073741824)並將相同的值添加到'mysql',但沒有任何更改。錯誤消息保持不變。 – mezzodrinker

0

沒有解決,只是確認,我已經看到了同樣的行爲與「文本「包含長JSON字符串的字段類型。 MySQLdump生成的SQL(備份)文件具有INSERT語句,它將該特定文本字段的長度截斷爲「約」64K(有許多轉義引號/雙引號和各種UTF-8字符) - 而不發出警告這種截斷髮生了。

當然,由於JSON格式化字符串的提前終止,還原到JSON列失敗。

在這種情況下奇怪的是,備份表中的列被定義爲TEXT,實際上應該將其限制爲64 KB。在預感中,我將備份表的模式更改爲MEDIUMTEXT。在那之後,MySQLdump不再在64K以上的INSERT語句中截斷該字符串。

它看起來好像MySQLdump不只是輸出整個列,而是截斷它認爲最大字符串長度應基於模式信息的任何內容,並且在截斷時不會發出警告。