哪些表格可以清除?


40

我无缘无故继承了一个客户端站点,该站点具有非常大的数据库。内容量适中,启用的模块很少。但是,数据库太大,无法轻松移动,因此我想清除它。

我已经清除了标准的缓存表,系统日志和访问日志。

我可以在标准Drupal站点中安全截断其他表格吗?


1
您可以在phpmyadmin中根据表的大小对表进行排序。尝试一下,然后查看哪些表最大,并在此处报告。例如,我已经看到了由于某种原因而无法清除的巨大会话表。如果您可以忍受必须再次登录的用户(如果他们在站点上,可能会丢失输入的表单数据,因此您可能希望与用户进行协调),那么您可以
清除

只是附带说明,下面提到的所有截断答案{cache_form}并不是真正正确的。这不是真正的缓存表。它包含正在进行的表单提交。如果删除此表中的所有数据,则用户可能会丢失数据。使用此表的正确方法是使条目过期。
mpdonadio

Answers:


21

使用备份和迁移模块,它具有良好的默认设置,可跳过不必要的数据。默认情况下,它将生成没有缓存,看门狗和其他一些表的数据库备份。

如果这样做没有帮助,请查看phpMyAdmin并告诉我们哪些表有很多条目。


1
这是我去的第一个地方。但是,数据库已超过演出时间,将无法通过此方法进行备份。我的目的是清除数据库,以便可以定期使用备份和迁移。本质上,我想知道是否还有更多可以清除的表(默认情况下,BAM不会跳过这些表)。
奈杰尔·沃特斯

如果您具有命令行访问权限,则可以使用drush开始备份和迁移。或者在命令行上访问mysql(例如:mysqldump --host = your.host.com --user = db_user --compress --password your_pw> dump.sql)这样您就不会遇到超时问题。通常,没有备份就清除不是很节省。您很容易以残破的页面结尾,而无法返回。
BetaRide 2012年

问题不在于超时。我知道我可以通过ssh / drush轻松运行备份。我想清理数据库,因为在过去的几年中,数据库已经出现了很多手,而且其中有很多不必要的杂物。我只需要知道可以安全清除的表即可(不知道如何备份或移动我的站点)。
奈杰尔·沃特斯

@BetaRide是正确的,BAM排除的默认值是安全的。其他人可能有也可能没有实际数据。
mpdonadio

22

Drupal 7表可以排除

这是Drupal 7中的表列表,您可以清除这些表(以减小数据库大小)或安全地排除以进行迁移(如有关如何减小本地导出的数据库大小以解决服务器导入限制的问题)?):

  • 访问日志
  • 批量
  • 所有与缓存相关的表,例如:
    • 快取*
    • cache_block
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • cache_menu *
    • cache_page *
    • cache_views
    • * _cache,例如features_cache或views_data_object_export_cache
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • 洪水
  • 历史
  • 队列
  • 各种search_ *表,例如:
    • search_dataset
    • search_index
    • search_keywords_log
    • search_total
  • 信号
  • 会议
  • 看门狗
  • webform_submitted_data

通常,诸如search_index和的表会watchdog使用大量的数据库空间,因此仅消除这两个表可能已经产生了很大的不同。

其他可能被排除的表

检查剩余表的大小,并确定其中最大的一个。

通常,您可能会找到没有适当清理程序的会话表。您可能还可以排除此类表。

模块备份和迁移

要进一步减少“ 如何减少本地导出的数据库大小以解决我的服务器导入限制? ”中详细说明的挑战,请同时查看“ 备份和迁移”模块。这是其项目页面的报价(在此处添加了粗体标记):

备份和还原您的Drupal MySQL数据库,代码和文件,或者在环境之间迁移站点。备份和迁移支持gzip,bzip和zip压缩以及自动计划的备份。

使用“备份和迁移”,您可以将部分或全部数据库表转储到文件下载中,或保存到服务器或异地的文件中,并从上载或先前保存的数据库转储中还原。您可以选择默认排除哪些表以及要备份和缓存哪些数据

甚至还有更多:如果您的本地环境(例如Win或Mac)与托管网站的服务器所运行的操作系统(例如Linux)不同,则这些操作系统之间的差异意味着潜在的额外挑战。我在不同操作系统之间使用“备份和迁移”模块有很好的经验,在以前典型的MySql导出/导入失败的情况下,这不会引起任何问题(工作正常)。


良好的补充,与任何表cache_前置或_cache附加安全截断为好,如features_cacheviews_data_object_export_cache
会员名:BEEBEE

1
值得一提的是,可以排除搜索表数据,但是在大型站点上重建索引可能需要非常,非常长的时间。逐案判断。
mpdonadio

2
另外,有关缓存数据的B&M摘录也有些不正确。在站点上启用后,它将排除高速缓存表。但是,如果在设置B&M之后添加模块,则缓存表可能不会添加到排除数据列表中。我已经多次看到这种情况,通常是当我覆盖默认配置文件上的设置时。
mpdonadio

@MPD:感谢您提供有趣的反馈(尚不知道!)。关于搜索表:有效点。但就我个人而言,我始终会采用重建方法:它有助于克服限制,并确保索引与目标中的实际内容匹配。关于您的第二条评论:摘录是从项目页面上摘录的,所以也许您想在其问题队列中提交有关此问题的信息(Drupal.SE不是报告错误等的地方,对吗?) 。
Pierre.Vriens

@ Pierre.Vriens假设您已运行cron并确保进行索引,则匹配内容无关紧要。B&M,很确定这是一个已知问题。另外,有关会话数据的部分也不是100%正确。该表很大,因为默认会话时间约为三周。_drupal_session_garbage_collection将根据系统设置使该表保持整洁。
mpdonadio

19

根据我的经验,我清除了所有“ cache_ *”表。

  • 如果我不关心过去的Drupal日志,则加上“看门狗”
  • 如果我不关心已登录的用户,请加上“ accesslog”
  • 如果我不在乎索引节点的内容,请加上“搜索”

1
同样在这里,我也会开会。
Alex Weber

2
给任何尝试此操作的人的注释:首先创建备份。并且不要丢弃表,而是清空或截断。
timofey.com 2012-09-25

9

有时我会运行以下SQL来监视顶级表的增长:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =  'yourdbnamehere'
ORDER BY table_rows DESC 

我应该检查哪个列的增长?,您是说TABLE_ROWS
Bala

8

看门狗和会话也可以清除,请记住所有用户都将注销。


6

使用mySQL,您可以使用mysqldump程序做一些有趣的事情,以全部或部分导出数据库。例如,这仅导出结构:

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --no-data dbname > ~/dbname.sql

然后,您可以使用“忽略表”选项进一步导出数据,例如

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --ignore-table=dbname.huge_table --ignore-table=dbname.massive_table --ignore-table=dbname.useless_table some_host >> ~/dbname.sql

这会将数据放在早期文件的末尾,而忽略了一些大表。

如果随后需要大量表,则可以使用上述方法将它们导出到其他文件,然后可以成块导入它们(尽管可能需要fk选中)。

您在上传文件之前对文件进行了gzip压缩,或者这是一个愚蠢的问题?



2

没有这一点,但分享我的经验......如果你不使用备份和迁移模块和手动导出他们一些你可以清空表/截断将是超级高手watchdogcachecache_menucache_blockcache_contentcache_form因为它们可能含有大量我想并不会伤害大量的清除缓存内容,但这又是我的经验,因此我没有遇到麻烦或数据丢失。


2

一些想法:

  • 完全不同的方法是使用要保留的数据视图创建RSS feed 。然后创建一个全新的Drupal安装并使用Feed API导入此数据。
  • 还有另一种方法:雇用学生,然后让他/她将数据手动传输到您的全新安装中。
  • 或者这个:告诉我们更多关于哪些表非常大以及为什么的原因(如果您知道的话)。

2

检查以下example.drushrc.php列表:

$options['structure-tables']['common'] = array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog');
$options['skip-tables']['common'] = array('migration_*');

就在不同环境之间移动数据库而言,清除它们是安全的(尤其是在使用大型数据库时)。但是,您仍然需要了解要清除的内容。


1

可以清除的其他表:

  • 批量
  • webform_submitted_data

其他可能占用相当多空间的事情:-内容的旧版本(无法通过简单的截断来清除)。-locales_source和locales_target。如果您有不再使用的语言或不再使用的模块的字符串翻译。这些表似乎永远不会被清除。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.