Como pular tabelas específicas com drush sql-dump?


9

Eu tenho um arquivo de configuração 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')
);

E eu tenho um arquivo de script 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

Mas quando eu o executo, o arquivo de backup ainda tem dados nas tabelas de cache. O que estou fazendo errado?

E a segunda pergunta é - se eu colocar isso no crontab, preciso colocar o arquivo de configuração em outro lugar?

Eu uso o Drush versão 8.


11
Gostaria de saber se o drushrc.phpnão está sendo executado. Tente um var_dump do $options['structure-tables']no drushrc.phpjust para confirmar que está sendo executado.
cutelo

Respostas:


0

Desculpe, não posso ajudá-lo muito com sua primeira pergunta ...

Sua segunda pergunta foi feita:

E a segunda pergunta é - se eu colocar isso no crontab, preciso colocar o arquivo de configuração em outro lugar?

O site da documentação do drush está vinculado ao arquivo de exemplo drushrc.php que diz onde você pode colocar o arquivo rc:

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

Renomeie este arquivo para drushrc.php e, opcionalmente, copie-o para um dos locais listados abaixo em ordem de precedência:

  1. Pasta do site Drupal (por exemplo, sites / {default | example.com} /drushrc.php).
  2. Drupal / drush e sites / all / drush ou a pasta / drush no diretório acima da raiz do Drupal.
  3. Em qualquer local, conforme especificado pela opção --config (-c).
  4. Pasta .drush do usuário (ou seja, ~ / .drush / drushrc.php).
  5. Pasta de configuração em todo o sistema (por exemplo, /etc/drush/drushrc.php).
  6. Pasta de instalação Drush.

Para Cron, a documentação recomenda que o Drush seja configurado para ser executado como o mesmo usuário que executa seu servidor da web. Dito isto, recomendo que você coloque seu arquivo rc no local (5), uma pasta de configuração em todo o sistema. Sim, os arquivos Drush rc mais localizados precisarão substituir o arquivo de configuração em todo o sistema, conforme necessário (tudo bem).


Todos esses links agora são 404. :(
Dale Anderson

@DaleAnderson ... esta é a Internet e nada é permanente. Aqui está um serviço útil para você. Recomendamos que você aprenda a usar, por favor, note que acabei de escolher um instantâneo de setembro de 2015 do site drush.org web.archive.org/web/20150905130324/http://www.drush.org: 80 / pt /… No momento, você deve considerar também ferramentas mais recentes, como o Drupal Console ou os documentos do Drush 9.
Tenken #

24

Despejar todas as tabelas, exceto a cachetabela e as tabelas iniciadas por cache_.

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

Somente estrutura do banco de dados. Nenhum dado.

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

Apenas dados. Nenhum dado de cache e nenhuma estrutura de cache.

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

Nenhum dado de cache, mas despejo em suas estruturas.

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

documentação do sql-dump


O --extra=--no-datanão estava funcionando para mim, mas eu era capaz de fazer --skip-tables-list="*"e funcionou.
greggles

Você pode querer usar aspas, como "cache,cache_*"para impedir que seu shell corresponda aos arquivos chamados cache_*no diretório de trabalho.
Rudolfbyker 11/07/19

0

Por alguma razão, cache_ * não funcionou para mim com drush 9+ até que eu omitisse o sublinhado. No entanto, isso pode ser específico para o meu bash / terminal (servidor). O que funcionou para mim:

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

e você sempre pode adicionar o --verbosepara ver o despejo real do mysql e seu parâmetro --ignore.


Com o bash, se cache_*corresponder a qualquer arquivo em seu diretório atual, o bash irá globar esses nomes de arquivo e usá-lo como argumento. Você pode colocar aspas duplas em volta dele para garantir que o valor literal seja passado para o comando em vez de quaisquer arquivos que ele exibir.
greggles
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.