web-dev-qa-db-ja.com

drush sql-sync出力の「Query failed」エラーを解決するにはどうすればよいですか?

これは このサイトでの以前の質問 の続きです。新しい質問として投稿していただければ幸いです。次のコマンドを使用して、既存のdrupalインストールを私のMac上の場所に複製しようとしています。

echo "Pushing private files"
/usr/local/bin/drush core-rsync @hpc.dev:%private @hpc.local:%private
echo "Pushing webroot files"
/usr/local/bin/drush -y core-rsync @hpc.dev @hpc.local
echo "Pushing database"
/usr/local/bin/drush -y sql-sync --no-cache @hpc.dev @hpc.local
echo "Clearing Drupal cache"
/usr/local/bin/drush -y @hpc.local cc all

Sql-syncビットが次のエラーで失敗します:

Copying dump file from Source to Destination.                                      [ok]
Starting to import dump file onto Destination database.                            [ok]
/usr/bin/php /usr/local/drush-master/drush.php --php=/usr/bin/php  --backend=2        [notice]
--verbose --yes --strict=0 --root=/Users/cook47/Sites/drupal-test/html
--uri='http://localhost/~cook47/drupal-test'  sql-query  
--file=/tmp/hpc-drupal-dev_20160302_175129.sql.gz --file-delete 2>&1
Executing: gzip -d /tmp/hpc-drupal-dev_20160302_175129.sql.gz
Executing: mysql --defaults-extra-file=/private/tmp/drush_wKQDuq --database=hpc-drupal-dev --Host=localhost --silent  < /tmp/hpc-drupal-dev_20160302_175129.sql
Query failed.                                                                      [error]
Command dispatch complete                                                             [notice]
Command dispatch complete                                                             [notice]

SQLファイルは存在します。問題は--defaults-extra-fileの部分だと思います。最後のコマンドを手動で実行すると、次のようになります。

cook47@rcmac (Downloads ):  mysql --defaults-extra-file=/private/tmp/drush_wKQDuq --database=hpc-drupal-dev --Host=localhost --silent  < /tmp/hpc-drupal-dev_20160302_175129.sql
mysql: [ERROR] Could not open required defaults file: /private/tmp/drush_wKQDuq
mysql: [ERROR] Fatal error in defaults handling. Program aborted!

--defaults-extra-file =/private/tmp/drush_wKQDuqがどこから来たのか私にはわかりません。これは、出力の早い段階ではありません。/private/tmp /ディレクトリが存在し、そこに書き込むことができます。これが、hpc.aliases.drushrc.phpファイルの「ローカル」配列エイリアスです。

$aliases['local'] = array (
  'root' => '/Users/cook47/Sites/drupal-test/html', //CHANGEME
  'uri' => 'http://localhost/~cook47/drupal-test', //CHANGEME
  //'remote-Host' => "localhost",
  //'remote-user' => 'cook47',
  'path-aliases' => array (
    '%drush' => '/usr/local/bin/drush', //CHANGEME
    '%site' => 'sites/default/',
    '%files' => 'sites/default/files',
    '%private' => '../private',
    '%dump' => '/Users/cook47/Sites/drupal-test/drush-dump.sql',//CHANGEME
  ),
  'target-command-specific' => array(
    'sql-sync' => array(//CHANGEME
      'enable' => array(),
      'disable' => array(
      ),
    ),
  ),
  'command-specific' => array(
    'rsync' => array(
      'mode' => 'vrlzOk',
      'exclude-conf' => 1,
    ),
  ),
);

これを解決したり、解決方法を教えたりできる人はいますか?

2
Rich

手動でインポートを実行すると「ファイルが見つかりません」というエラーが発生する理由は、Drushがコマンドの完了時に一時ファイルを自動的に削除するためです。したがって、表示されているエラーは、Drushから取得した「クエリの失敗」エラーとは異なります。また、--defaults-extra-fileにはmysql接続の認証情報が含まれていますが、行の最後に表示されるファイルは実際のSQLダンプです。

Drushでsqlファイルを保持したい場合は、独自の場所を指定できます。この場合、Drushは終了時にファイルを削除しません。オプション_--target-dump=/path/to/mydump.sql_を使用します。上記の貼り付けた出力から、%dumpオプションが順守されているかどうかはわかりません(使用されているパスがサイトエイリアスに示されているものと異なるため)。 %dumpが機能しない場合は、これをターゲットコマンド固有のオプションに移動してみてください。ただし、これを行う場合、キーは_%dump_ではなく単にdumpにする必要があります。 SQLダンプファイルが削除されていない場合は、このアドバイスを無視してください。

ローカルダンプファイルを再インポートする場合は、次のようにします。

$(drush @hpc.local sql-connect) < /tmp/hpc-drupal-dev_20160302_175129.sql

これを行うと、同じ「クエリが失敗しました」というメッセージが表示されます。 $(drush @hpc.local sql-connect -d)は、より多くの情報を提供する場合があります。

「クエリが失敗しました」というメッセージの原因にはいくつかの原因が考えられますが、おそらくホストのmysqlバージョンとローカルシステムの不一致、または(可能性は低いですが)エンコーディングの不一致(たとえば、ダンプがutf-8、およびそのエンコーディングはローカルシステムでは使用できません)。

2
greg_1_anderson