2011-02-14 25 views
3

我有一個包含zip的blob字段的mysql數據庫,我需要將它作爲bash文件保存在磁盤上。我正在做下面的事情,但最終的結果不會讀爲zip ...我做錯了什麼或者是存儲的文件實際上不是一個zip文件(數據庫中的條目實際上是由地震臺創建的,所以我無法控制它)?從bash將blob字段保存到磁盤

echo "USE database; SELECT blobcolumn FROM table LIMIT 1" | mysql -u root > file.zip 

然後我用文件編輯器打開file.zip並刪除包含列標題的第一行。然後「解壓縮」不會將其識別爲zip文件。

回答

-1

你需要跳過一列,例如

sql="USE database; SELECT blobcolumn FROM table LIMIT 1" 
mysql -u root -N <<< $sql > file.zip 
+0

這給了我一個「$ sql:ambiguous redirect」錯誤;然而使用-N選項與我的語法(echo「」| mysql)工作...但該文件仍然不是一個zip,所以我想也許有一些錯誤的數據庫 – nareto 2011-02-17 09:35:05

+0

應該是一個`<<<` – ajreal 2011-02-17 11:33:43

4

對於gzip壓縮的斑點可以使用:

echo "use db; select blob from table where id=blah" | mysql -N --raw -uuser -ppass > mysql.gz 

我還沒有一個zip文件嘗試這樣。

0

正確的做法是使用DUMPFILE,否則mysql會搞亂你的數據。

mysql -uroot -e "SELECT blobcolumn INTO DUMPFILE '/tmp/file.zip' FROM table LIMIT 1" database

0

我知道這是一個老問題,但我需要自己的答案,所以這是對我工作。

我發現mysql在最後附加了一個換行符,需要在正確的二進制值保留之前將其刪除。

echo "USE database; SELECT blobcolumn FROM table LIMIT 1" | mysql -N --raw -u root | head -c -1 > file.zip