0

我正在导出一个圆形立方体 MySQL 数据库,Mysqldump但遗憾的是,当我使用长查询时它失败了。我怎样才能摆脱这个,让它工作?

mysqldump -t --skip-add-drop-table roundcube contacts --where="select * from contacts 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 contacts where user_id in (select user_id from users where username like '%mysite.com%')':你有SQL 语法错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在第 1 行 (1064)的 'select * from contacts where user_id in (select user_id from users where user_id in ) 附近使用

4

1 回答 1

2

mysqldump--where选项指定要包含在 WHERE 子句中的文本。

你有一个完整的语句,这会产生一个语法错误,

... WHERE SELECT ... 
          ^

mysqldump 已经在编写SELECT * FROM roundcube.contacts. --where 选项告诉 mysqldump 包含一个 WHERE 关键字,后跟您提供的文本,作为它生成的语句的一部分。

你想要更多的东西:

--where="user_id in (select user_id from users where username like '%mysite.com%')"

所以生成的语句将是......

... WHERE user_id in ...
          ^

此外,数据库名称和表名称应遵循选项...

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