Comment faire en sorte qu'une importation d'une très grande base de données Drupal fonctionne?

7

J'utilise Vagrant et OracleVM pour exécuter Drupal 7. J'ai le site opérationnel et j'essaie d'obtenir ma base de données importée. Jusqu'à présent, j'ai exécuté drush ccet effacé le cache drush, puis je l'ai fait

drush sql-cli < mydb.sql

La commande drush prend très longtemps et je ne sais pas si elle fait même quelque chose. Le fichier de base de données est juste sous un gigaoctet.

Que puis-je faire pour que cela fonctionne ou existe-t-il une meilleure méthode?

James Ives
la source

Réponses:

6

Je ne suis pas sûr de la quantité de surcharge générée par les importations SQL importantes, je ne l'ai utilisé que pour des importations et des requêtes plus petites. Vous pouvez essayer le client mysql comme une alternative qui supprimerait la surcharge de drush.

Si vous pouvez installer la visionneuse de tuyaux sur votre machine virtuelle, vous pouvez afficher la progression de la commande consommant l'importation.

pv mydb.sql | drush sql-cli

Ou sans les frais généraux de drush

pv mydb.sql | mysql -u <DB_USER> -p<DB_PASS> <YOUR_DB>
Shawn Conn
la source
Merci! J'ai installé PV et il suit sa progression. J'avais tort, la base de données initiale était de 1 Go compressé, non compressé, c'est environ 6. Probablement pourquoi cela prend si longtemps!
James Ives
5

Le module Sauvegarde et migration a une fonctionnalité pour exclure les tables sélectionnées, telles que:

  • toutes les tables cache_ *
  • ctools_views_cache
  • ctools_object_cache
  • inonder
  • histoire
  • queue
  • sémaphore
  • chien de garde
  • search_index (économise généralement beaucoup de taille de base de données!)

Le problème des tables / données par défaut à exclure comprend également une liste intéressante de tables à ne pas migrer (choisissez ce qui vous convient), c'est-à-dire (citez-en):

Lors de la création d'un profil de sauvegarde, le module définit par défaut les tableaux suivants pour que leurs données soient exclues en fonction du problème # 209647: Conseil d'exclusion :

  • cache
  • cache_filter
  • cache_calendar_ical
  • cache_menu
  • cache_page
  • cache_views
  • séances
  • search_dataset
  • search_index
  • search_keywords_log
  • search_total
  • chien de garde
  • accesslog
  • devel_queries
  • devel_times
Pierre.Vriens
la source
5

Les bases de données plus petites seront importées plus rapidement drush cc allet drush watchdog delete allaccéléreront donc considérablement les choses, si leur suppression est une option.

En outre, pour développer la réponse de Shawn Conn, vous pouvez utiliser la visionneuse de tuyaux sans la surcharge Drush, et toujours utiliser Drush pour rechercher les informations d'identification de la base de données pour vous si vous utilisez à la drush sql-connectplace de drush sql-cli. Utilisez simplement $()pour exécuter la ligne mysql qui drush sql-connectaffiche:

pv mydb.sql | $(drush sql-connect)
greg_1_anderson
la source
5

Il est préférable de rogner la grande base de données lors du vidage en utilisant drush sql-dumppour vider le fichier SQL. Cela vous donne l'avantage de spécifier les options supplémentaires pour ignorer les tables spécifiques lors du vidage (comme le cache ou la migration des tables).

Cela peut être spécifié dans la ligne de commande (voir :)drush help sql-dump ou le configurer dans votre fichier drushrc comme indiqué dans example.drushrc.phpcomme:

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

ou par hôte, comme si vous utilisez sql-syncou sql-dumpentre des télécommandes:

$aliases['global'] = array(
  // These options will only be set if the alias is used with the specified command.
  'command-specific' => array(
    'sql-sync' => array(
      'structure-tables-key' => 'common',
      'skip-tables-key' => 'common',
      'structure-tables' => array(
        // You can add more tables which contain data to be ignored by the database dump
        'common' => array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog'),
      ),
      'skip-tables' => array(
        'common' =>array('migration_*'),
      ),
    ),
    'sql-dump' => array(
      'ordered-dump' => FALSE,
      'structure-tables-key' => 'common',
      'skip-tables-key' => 'common',
    ),
  ), // end: command-specific
);

Ensuite, vous pouvez charger ces paramètres dans votre hôte via:

$aliases['stage'] = array(
  // ...
) + $aliases['global'];

Ensuite, vous pouvez essayer quelque chose comme:

drush @source sql-dump | drush @self sql-cli

Pour surveiller la progression, vous pouvez ajouter un visualiseur de tuyaux ( pv) entre les deux (comme ... | pv | ...).

Voir également:

kenorb
la source
0

Vous semblez avoir résolu le problème, mais en voici un pour moi:

drush sql-dump> mydb.sql

Kartagis
la source