0

我正在使用 mediawiki API(例如http://en.wikipedia.org/w/api.php),我希望能够“截断”mysql表,以便在保留一些的同时重置本地安装表(用户,?...)。SQL 查询是什么?

我会说: tuncate 除了 ${PREFIX}_user 和更新 ${PREFIX}_user set user_editcount=0 之外的所有表?

还有其他(更安全)的建议吗?

4

2 回答 2

2

正确答案已发布在 MediaWiki 邮件列表中:请参阅http://lists.wikimedia.org/pipermail/mediawiki-l/2009-October/032322.html

根据那个帖子,截断可能是可以的user_newtalk, page, revision, text, archive, pagelinks, templatelinks, imagelinks, categorylinks, category, externallinks, langlinks, hitcounter, watchlist, image, oldimage, filearchive, , recentchanges, searchindex, interwiki, querycache, objectcache, log_search, trackbacks, job, querycache_info, redirect, querycachetwo, page_restrictions, protected_titles, page_props, change_tags, tag_summary, .valid_tagl10n_cache

在较新的版本中,将msg_resource和添加msg_resource_list到该列表,以截断与消息相关的缓存

另外:如果截断图像表,请记住删除图像文件夹中的文件。否则它们将不同步,并且您可能无法上传某些图像。

于 2010-01-10T13:46:30.143 回答
0

从数据库中获取表列表:

echo "show tables;" | mysql -u user_name -p db_name > tables

确定要截断哪些表,然后创建一个 sql 脚本

TRUNCATE TABLE a;
TRUNCATE TABLE b;
update <prefix>user set user_editcount=0;

然后通过客户端运行它:

mysql -u user_name -p database_name < truncate-all.sql
于 2009-11-16T18:54:52.943 回答