2011-02-14 82 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