5

我们的 bigzilla 安装有几 GB 的数据,并且没有服务器管理员。我拥有对 bugzilla 的 Web 管理访问权限,并希望获取所有附件(带有原始名称和 bug #)。

我知道有大量的数据库作为 XML 导出,但大概附件必须在之后进行解析。

我可以请求访问服务器,然后查看错误数据库中的attachments表,但是,我将不得不再次以某种方式解码附件数据。所以,

如何一次将所有 Bugzilla 的错误附件导出为文件?

也许某些桌面客户端具有此功能?或者有一天有一个脚本来创建一个 tarball?

4

3 回答 3

1

我需要查看是否已经有针对相同要求的脚本并出现在这里。由于我不理解纯 SQL 的答案,我继续创建自己的 Python 脚本。如果将来有人需要它,就在这里,

该脚本将根据作为参数给出的列名创建目录。我没有检查参数,因为这是一个快速而肮脏的脚本。

[wizard @ work]$ ./fetch_attach_from_bugzilla.py bug_id
[wizard @ work]$ ls
16  18  19  21  23  24  26 fetch_attach_from_bugzilla.py 
[wizard @ work]$

[wizard @ work]$ cat fetch_attach_from_bugzilla.py
#!/usr/bin/python

import binascii;
import MySQLdb;
import os;
import sys;

conn = MySQLdb.connect(host='',user="",passwd="",db="bugs");

r = conn.cursor();
r.execute('select bug_id from bugs');

bug_ids = r.fetchall();

for bug_row in bug_ids:
   bug_id = bug_row[0];
   cmd = 'select attachments.filename,attachments.mimetype, bugs.' + sys.argv[1] + ', attach_data.thedata from attachments left join attach_data on attachments.attach_id = attach_data.id left join bugs on bugs.bug_id = attachments.bug_id where attachments.bug_id = ' + str(bug_id);
   r.execute(cmd);

   for adata_row in r.fetchall():
      if not os.path.isdir(os.path.join(os.getcwd(),str(adata_row[2]))):
         os.mkdir(str(adata_row[2]));
      f = open(os.path.join(os.getcwd(),str(adata_row[2]),adata_row[0]), "wb+")
      f.write(adata_row[3]);
      f.close();


r.close;
conn.close;
[wizard @ work]$
于 2019-09-11T20:36:11.033 回答
1

我使用以下内容构建了一个单独的 sql 文件,可以执行该文件来获取文件。提示:注意文件名中的特殊字符

select concat('SELECT ad.thedata into DUMPFILE  \'e:/temp/attachments/'
, a.bug_id 
, '___'
, ad.id
, '___'
, replace(a.filename,'\'','')
, '\'  FROM bugs.attachments a, bugs.attach_data ad where ad.id = a.attach_id'
, ' and ad.id = '
, ad.id
,';') into outfile 'C:/Temp/attachments.sql'
from bugs.attachments a, bugs.attach_data ad where ad.id = a.attach_id;
于 2016-11-17T16:25:05.700 回答
0

我不知道现有的工具,但这里有一些从数据库中提取数据的有用参考(如果您或其他人确实制作了工具,请在此处链接。)

附件文件名在链接attachments表中,它还指定了错误号。

https://dev.mysql.com/doc/refman/5.0/en/select-into.html -- 从数据库中写入文件。

您也可以使用 bugzilla 网络服务,尽管这可能会很慢:http ://www.bugzilla.org/docs/4.0/en/html/api/Bugzilla/WebService/Bug.html#attachments

于 2014-09-23T16:53:02.640 回答