Mysql 转储 - 如何通过转义执行长查询?
Posted
技术标签:
【中文标题】Mysql 转储 - 如何通过转义执行长查询?【英文标题】:Mysql dump - How to execute a long query with escaping? 【发布时间】:2012-12-17 21:47:04 【问题描述】:我正在使用mysqldump
导出一个圆形立方体 MySQL 数据库,但遗憾的是,当我使用长查询时它会失败。我怎样才能摆脱它以使其正常工作?
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
的“从 user_id 所在的联系人中选择 *(从 usernam 所在的用户中选择 user_id”附近)contacts
WHERE select * from contacts where user_id in (select user_id from users where username like '%mysite.com%')': 您的 SQL 语法有错误; 请查看与您的 MySQL 服务器版本相对应的手册以了解要使用的正确语法在 第 1 行 (1064)
【问题讨论】:
查看 MySQL 文档:dev.mysql.com/doc/refman/5.1/en/… 【参考方案1】: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
【讨论】:
以上是关于Mysql 转储 - 如何通过转义执行长查询?的主要内容,如果未能解决你的问题,请参考以下文章