0

を使用してroundcubeMySQLデータベースをエクスポートしてMysqldumpいますが、長いクエリを使用すると失敗します。どうすればこれを回避して機能させることができますか?

mysqldump -t --skip-add-drop-table roundcubecontacts --where = "select * from contact where user_id in(select user_id from users where username like'%mysite.com%')"> roundcube_contacts.sql

上記を実行するとこのエラーが発生します。クエリを適切にエスケープするにはどうすればよいですか?

mysqldump:実行できませんでした'SELECT / *!40001 SQL_NO_CACHE / /!50084 SQL_NO_FCACHE * / * FROM contactsWHERE select * from contact where user_id in(select user_id from users where username like'%mysite.com%')' : SQL構文のエラー。MySQLサーバーのバージョンに対応するマニュアルで、使用する正しい構文を確認してください。near'select * from contact where user_id in(select user_id from users where usernam' at line 1(1064)

4

1 に答える 1

2

mysqldump--whereオプションは、WHERE句に含めるテキストを指定します。

そこにステートメント全体があり、構文エラーが発生します。

... WHERE SELECT ... 
          ^

mysqldumpはすでにを書き込んでいSELECT * FROM roundcube.contactsます。--whereオプションは、mysqldumpにWHEREキーワードを含め、その後に、生成するステートメントの一部として指定したテキストを含めるように指示しています。

次のようなものが必要です。

--where = "user_id in('%mysite.com%'などのユーザー名を持つユーザーからuser_idを選択)"

したがって、生成されるステートメントは...

... WHERE user_id in ...
          ^

また、データベース名とテーブル名はオプションに従う必要があります...

mysqldump -t --skip-add-drop-table --where="1=1" roundcube contacts \
  > roundcube_contacts.sql
于 2012-12-17T21:53:58.387 に答える