首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在mysqldump中使用查询吗?

问我可以在mysqldump中使用查询吗?
EN

Stack Overflow用户
提问于 2015-12-10 04:01:59
回答 1查看 446关注 0票数 0

我的远程服务器上有一个包含多个表的Mysql数据库。我需要得到一些这样的表和它的一些行使用PHP到一个使用SQLite的本地WPF程序。

我需要从每个表中获取的行取决于每个表的一些不同的值(我的意思是我必须对每个表应用不同的WHERE子句),并且我需要能够使用标准的MySQL操作(如左连接、联合等)。

到目前为止,我只能使用1个WHERE子句转储一个表:

代码语言:javascript
复制
exec('./mysql2sqlite.sh --databases test -u test -pTest --tables users --where "a="' . $a . '" AND b="' . $b . ' | sqlite3 db/file.sqlite');

我认为我需要的是能够执行几个查询,然后将所有结果转储到mysqldump中,这是可能的吗?

另外,这是解决这类问题的正确方法吗?或者我应该先转储所需表的格式,然后转储所需的行?

PD:我正在使用这个MySQL2SQLite转换器。

EN

回答 1

Stack Overflow用户

发布于 2015-12-10 04:37:23

我可以通过创建一个叫做tmp_backup之类的单独的临时数据库来解决这个问题,创建映射表但只包含所需行的表,然后对该数据库执行转储。临时数据库表示例:

代码语言:javascript
复制
CREATE tmp_backup.customers LIKE real_db.customers;
SELECT c.* FROM real_db.customers  c 
LEFT JOIN real_db.bad_customers o USING(customer_id) WHERE o.customer_id IS NULL

如果表很大,您也可以使用视图,但您需要修补mysqldump,因为它会将视图转储为视图,而不是表。寻找

代码语言:javascript
复制
if (strcmp(table_type, "VIEW") == 0)
    DBUG_VOID_RETURN;

在MySQL源代码的client/mysqldump.c中,将其注释掉并重新编译。您将在client/目录中找到mysqldump的新二进制文件,您可以在不完全安装的情况下直接复制到其他名称下的某个目录中。这个黑客应该可以工作,尽管我还没有验证它-当我验证的时候,我会发布更新。

更新-上面针对mysqldump的攻击确实适用于视图-我在5.5.35上测试了它,但它应该在更新的5.5以及可能的5.6/5.7版本中同样有效。在补丁之后,您确实需要为它提供-t参数,以便只获取带有定义的表数据。因此,您将首先执行mysqldump --no-data real_db以获取定义,然后执行mysqldump -t tmp_backup以获取视图数据。然后,您可以使用mysql实用程序按顺序加载(首先是定义,然后是数据)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34187947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档