簡體   English   中英

使用二進制Blob恢復MySQL轉儲

[英]Restoring a MySQL dump with binary blobs

我正在將MySQL數據庫從現在無法訪問的服務器移至新服務器。 轉儲包含的表又包含二進制blob,這似乎在MySQL命令行客戶端中引起麻煩。 嘗試還原數據庫時,出現以下錯誤:

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

我檢查了發生錯誤的行,發現這是一個巨大的insert語句(長度約為900k個字符),似乎將二進制blob插入到表中。

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

有什么方法可以通過MySQL命令行客戶端還原此備份? 如果是,我該怎么辦?

如果您需要任何其他信息,請告訴我。

提前致謝。

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

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

然后,您可以使用像這樣的還原命令:

mysql --max_allowed_packet=64M  < your_dumpfile.sql

此處提供更多信息:[ https://dev.mysql.com/doc/refman/5.6/zh-CN/server-system-variables.html#sysvar_max_allowed_pa​​cket]

沒有解決方案,只是確認我已經看到了包含長JSON字符串的“文本”字段類型的相同行為。 MySQLdump生成的SQL(備份)文件具有INSERT語句,並且將特定文本字段的長度截斷為“大約” 64K(有許多轉義的引號/雙引號和各種UTF-8字符)-不會發出警告這種截斷已經發生。

自然,由於JSON格式的字符串過早終止,還原到JSON列的操作失敗。

在這種情況下,奇怪的是,已將備份表中的列定義為TEXT,而該列實際上應該限制為64 KB。 出於預感,我將備份表的架構更改為MEDIUMTEXT。 之后,MySQLdump不再將INSERT語句中的字符串截斷到64K以上。

看起來MySQLdump不僅會輸出整個列,還會截斷到它認為最大字符串長度應基於架構信息的任何內容,並且在截斷時不會發出警告。

暫無
暫無

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

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