【问题标题】:saving blob field to disk from bash将 blob 字段从 bash 保存到磁盘
【发布时间】:2011-06-26 20:38:26
【问题描述】:

我有一个 mysql 数据库,其中包含一个包含 zip 的 blob 字段,我需要将它保存为磁盘上的文件,来自 bash。我正在执行以下操作,但最终结果不是 zip……我做错了什么还是存储的文件实际上不是 zip(数据库中的条目实际上是由地震台创建的,所以我无法控制)?

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

然后我用文件编辑器打开 file.zip 并删除包含列标题的第一行。然后 'unzip' 不会将其识别为 zip 文件。

【问题讨论】:

    标签: mysql bash


    【解决方案1】:

    对于 gzipped blob,您可以使用:

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

    我没有用 zip 文件尝试过这个。

    【讨论】:

      【解决方案2】:

      正确的做法是使用DUMPFILE,否则mysql会弄乱你的数据。

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

      【讨论】:

      • 这要求mysql用户已被授予全局权限FILE,并且您希望将文件转储到mysql服务器上(而不是通过远程连接在本地)。
      【解决方案3】:

      我知道这是一个老问题,但我自己需要答案,所以这对我有用。

      我发现mysql在末尾附加了一个换行符,需要在保留正确的二进制值之前将其删除。

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

      【讨论】:

        【解决方案4】:

        您需要跳过列,例如

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

        【讨论】:

        • 这给了我一个“$sql: ambiguous redirect”错误;但是使用 -N 选项和我的语法 (echo "" | mysql) 工作......但文件仍然不是 zip,所以我想可能是 db 有问题
        猜你喜欢
        • 2012-04-21
        • 2011-02-13
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        相关资源
        最近更新 更多