gpt4 book ai didi

使用自定义查询将 Mysql 导出通过管道传输到另一个 mysql 服务器

转载 作者:行者123 更新时间:2023-11-29 00:22:27 24 4
gpt4 key购买 nike

我正在尝试在 1 个 mysql 服务器中导出一个表,并将数据直接通过管道传输到新的 sql 服务器。

假设我有一个 User 表,其中有 2 组用户 group = 1group = 2

我想做的是:

SELECT * FROM `User` WHERE `User`.`group`=1 | mysql -h newhost.com -u root -p dbname newTable

如果有所不同,其中一些查询将有连接

我试过:

mysql -e"SELECT * FROM `User` WHERE `User`.`group`=1" -u root -pxxxxxxx dbname| mysql -h newhost.com -u root -pxxxxxxxxx newDbName NewUserTable

出于某种原因,这只会引发大量错误。看起来它打开了 mysql 终端,然后它只显示了使用信息。

这是我正在尝试做的一个更接近的例子:

mysqldump -u root -pxxxxxxxx dbname Article --no_create_info --max-allowed-packet=1073741824 --lock-all-tables --where 'article_id in (SELECT article_id FROM Article LEFT JOIN Client on Article.client = Client.client_id LEFT JOIN Company on Client.company = Company.company_id WHERE Company.name="Company1")' | mysql -h rds.amazonaws.com -u root -pxxxxxxxx newdbname Article

当我在终端中运行它时,我得到 mysql usage options 输出,后面跟着:mysqldump:写入时出现 errno 32

解决方案

使用 mysqldump 我能够使用一个自定义 where 语句,该语句具有一个嵌套选择,该选择选择了我要移动的表的 ID。

NOTE: When using nested SELECT you must include the table name with the column name. IE Table1.column1. Also make sure that all of your options come before your database name. And finally when piping the data to the mysql server do not include the table name after the database.

最终工作命令:

mysqldump -u root -pxxxxxxxx --no_create_info --max-allowed-packet=1073741824 --lock-all-tables --where 'article_id in (SELECT Article.article_id FROM Article LEFT JOIN Client on Article.client = Client.client_id LEFT JOIN Company on Client.company = Company.company_id WHERE Company.name="Company1")' dbname Article | mysql -h rds.amazonaws.com -u root -pxxxxxxxx newdbname

最佳答案

这应该有效。将 mysqldump 与表和 where 子句集一起使用。

mysqldump -u [user] -p [password] [dbname] User --no_create_info --where="User.group=1" | mysql -h [hostname] -u [root] -p [dbname]

有关使用 mysqldump 进行更精细查询的更多详细信息 can be found here .包括如何使用此示例将 join 挂接到查询中的示例:

mysqldump -u db_user -p db_name table_name --no_create_info \
--lock-all-tables --where 'id in (select tn.id from table_name as tn \
join related_table as rt on tn.related_table_id = rt.id \
where rt.some_field = 1)' > data.sql

基本思想是 where 子句有它自己的查询,它会完成我认为你正在努力实现的目标。

关于使用自定义查询将 Mysql 导出通过管道传输到另一个 mysql 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com