如何使用drush sql-dump跳过特定表?


9

我有一个drush配置文件〜/ .drush / drushrc.php:

if (!isset($options['structure-tables']['common'])) {
  $options['structure-tables']['common'] = array(
    'cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog'
  );
}

$options['structure-tables']['common'] = array_merge($options['structure-tables']['common'], 
  array('ctools_css_cache', 'ctools_object_cache', 'logz', 'views_object_cache')
);

我有一个bash脚本文件:

/usr/bin/drush sql-dump --root="/home/username/domains/sitename/www" --skip-tables-key="common" --gzip --result-file=/home/username/backup/$year/$month/dbname_$date_now_time.sql

但是当我执行它时,备份文件仍然在缓存表中有数据。我究竟做错了什么?

第二个问题是-如果将其放入crontab中,是否需要将配置文件放在其他位置?

我使用Drush版本8。


1
我想知道是否drushrc.php没有运行。尝试的一个的var_dump $options['structure-tables']drushrc.php刚刚以确认它正在运行。
cleaver

Answers:


0

抱歉,您的第一个问题对您无济于事...

您的第二个问题问:

第二个问题是-如果将其放入crontab中,是否需要将配置文件放在其他位置?

drush文档网站链接到drushrc.php示例文件,说,你可以将RC文件:

https://raw.githubusercontent.com/drush-ops/drush/master/examples/example.drushrc.php

将此文件重命名为drushrc.php,并可以选择将其按优先顺序复制到以下列出的位置之一:

  1. Drupal网站文件夹(例如,sites / {default | example.com} /drushrc.php)。
  2. Drupal / drush和sites / all / drush文件夹,或Drupal根目录上方的目录中的/ drush文件夹。
  3. 在--config(-c)选项指定的任何位置。
  4. 用户的.drush文件夹(即〜/ .drush / drushrc.php)。
  5. 系统范围的配置文件夹(例如/etc/drush/drushrc.php)。
  6. Drush安装文件夹。

对于Cron,文档建议将Drush配置为以与运行Web服务器相同的用户身份运行。话虽如此,我建议您将rc文件放置在系统范围的配置文件夹(5)中。是的,更多本地化的Drush rc文件将需要根据需要覆盖您的系统范围的配置文件(很好)。


所有这些链接现在都是404。:(
Dale Anderson

@DaleAnderson ...这是互联网,没有任何东西是永久的。这是为您提供的便捷服务,我建议您学习使用方法,请注意,我只是选择了drush.org网站web.archive.org/web/20150905130324/http://www.drush.org的 2015年9月快照: 80 / en /… 此时,您还应该考虑查看较新的工具,例如Drupal Console或Drush 9文档。
tenken '18

24

转储除cache表和以开头的表以外的所有表cache_

drush sql-dump --skip-tables-list=cache,cache_* > dumpfile.sql

仅数据库结构。完全没有数据。

drush sql-dump --extra=--no-data > dumpfile.sql

仅数据。没有缓存数据,也没有缓存结构。

drush sql-dump --skip-tables-list=cache,cache_* --data-only > dumpfile.sql

没有缓存数据,而是在其结构中转储。

drush sql-dump --structure-tables-list=cache,cache_* > dumpfile.sql

sql-dump文档


那个--extra=--no-data不是对我有用,但是我能够做到,--skip-tables-list="*"而且确实有用。
greggles

您可能需要使用引号,例如"cache,cache_*"防止外壳程序匹配cache_*工作目录中调用的文件。
rudolfbyker '19

0

出于某种原因,直到我省略下划线之前,cache_ *不适用于rush 9+。但是,这可能特定于我的(服务器)bash /终端。对我有用的是:

drush sql-dump --skip-tables-list=cache*

并且您总是可以添加--verbose来查看实际的mysql转储,它是--ignore参数。


使用bash时,如果cache_*与您当前目录中的任何文件匹配,则bash会遍历这些文件名并将其用作参数。您可以在其周围加上双引号,以确保将文字值传递给命令,而不是传递给它引起混乱的任何文件。
greggles
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.