非常に大きなDrupalデータベースのインポートを機能させるにはどうすればよいですか?


7

VagrantとOracleVMを使用してDrupal 7を実行しています。サイトを稼働させて、データベースをインポートしようとしています。これまでのところdrush cc、drushキャッシュを実行してクリアしました。

drush sql-cli < mydb.sql

drushコマンドには非常に長い時間がかかり、それが何かを実行しているかどうかはわかりません。データベースファイルはギガバイト未満です。

これを機能させるために私は何ができますか、またはより良い方法はありますか?

回答:


6

大規模なSQLインポートに加えてオーバーヘッドドラッシュがどれだけの負荷になるかはわかりません。これは、小さなインポートとクエリにのみ使用しました。ドラッシュのオーバーヘッドを取り除く代替手段として、mysqlクライアントを試すことができます。

VMにPipe Viewerをインストールできる場合は、インポートを使用するコマンドの進行状況を表示できます。

pv mydb.sql | drush sql-cli

または、ドラッシュのオーバーヘッドなし

pv mydb.sql | mysql -u <DB_USER> -p<DB_PASS> <YOUR_DB>

ありがとう!私はPVをインストールし、その進捗状況を追跡しています。私は間違っていました。最初のdbは1GB圧縮されており、非圧縮の場合は約6でした。おそらく、なぜそんなに時間がかかるのでしょう!
James Ives

5

バックアップと移行モジュールは、以下のような選択されたテーブルを、排除する機能があります:

  • すべてのcache_ *テーブル
  • ctools_views_cache
  • ctools_object_cache
  • 洪水
  • 歴史
  • キュー
  • セマフォ
  • 番犬
  • search_index(通常、データベースサイズを大幅に節約します!)

除外するデフォルトのテーブル/データに関する問題には、移行しないテーブルの興味深いリストも含まれています(適切なものを選択してください)。

バックアッププロファイルを作成すると、モジュールはデフォルトで次のテーブルを設定して、問題#209647に従ってデータを除外します。

  • キャッシュ
  • cache_filter
  • cache_calendar_ical
  • cache_menu
  • cache_page
  • cache_views
  • セッション
  • search_dataset
  • search_index
  • search_keywords_log
  • search_total
  • 番犬
  • アクセスログ
  • devel_queries
  • devel_times

5

データベースが小さいほどインポートが高速になるためdrush cc alldrush watchdog delete allこれらを削除することがオプションの場合は、処理速度が大幅に向上します。

また、Shawn Connの答えを拡張するために、Drushのオーバーヘッドなしでパイプビューアを使用できます。drush sql-connect代わりにを使用する場合は、Drushを使用してデータベース資格情報を検索できますdrush sql-cli。表示$()するmysql行を実行するために使用するだけdrush sql-connectです。

pv mydb.sql | $(drush sql-connect)

5

drush sql-dumpSQLファイルのダンプに使用して、ダンプ時に大きなデータベースをトリミングすることをお勧めします。これにより、ダンプ時に特定のテーブルをスキップする追加オプション(キャッシュテーブルや移行テーブルなど)を指定できるという利点があります。

これは、コマンドラインで指定するか(参照:)、次のようにdrushrcファイルdrush help sql-dumpで構成できます。example.drushrc.php

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

またはリモートを使用しているsql-sync場合sql-dump、またはリモート間で使用している場合のように、ホストごとに:

$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
);

次に、次の方法でこの設定をホストにロードできます。

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

次に、次のようなことを試すことができます:

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

進行状況を監視するにはpv、間にパイプビューア()を追加できます(など... | pv | ...)。

以下も参照してください。


0

あなたは問題を解決したようですが、ここに私のためのものがあります:

drush sql-dump> mydb.sql

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.