首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单事务中带有where子句的Mysqldump多个表

问单事务中带有where子句的Mysqldump多个表
EN

Database Administration用户
提问于 2019-03-04 20:46:57
回答 2查看 4.5K关注 0票数 0

假设我们有两个表:t1,t2数据库中的db:期望下面的代码根据where子句中指定的条件转储表:

代码语言:javascript
复制
mysqldump --login-path=login_path \
    --single-transaction db t1 \
    --where="user_id>200" , t2 --where="id>200" > /tmp/users_data.sql

但是,将弹出以下错误:

mysqldump:无法执行'SELECT /*!40001 SQL_NO_CACHE */ *从t1中id>200未知列'id‘在'where子句’(1054)

如何正确使用where子句转储多个表?如果不可能,有办法解决吗?

EN

回答 2

Database Administration用户

发布于 2019-03-04 21:39:53

MySQL转储只有一个where子句,这使得像您一样在两个表中很难使用。

一种方法是在t1中创建一个名为id的生成列,该列实际上是user_id。

代码语言:javascript
复制
ALTER TABLE t1
ADD id UNSIGNED INT GENERATED ALWAYS AS (user_id),
ADD INDEX id_key ( id)

调整类型以匹配user_id类型。

参考文献:https://dev.mysql.com/doc/refman/5.7/en/create-table-secondary-indexes.html

票数 1
EN

Database Administration用户

发布于 2019-03-05 13:14:41

解决方案1:-

使用SELECT ... INTO OUTFILE语句转储表数据,该语句将选定的行写入文件&使用LOAD DATA语句将其还原到表中。

例如:

  • 使用SELECT *从备份服务器将表备份到OUTFILE '/tmp/result.txt‘字段中,’user_id>200‘以'\n’结尾的‘’行可选地括起来;
  • 使用Create T1 (.)在还原服务器上创建相同的T1表
  • 从备份服务器复制文件以还原服务器(在Linux上使用scp命令)
  • 使用LOAD数据INFILE '/tmp/result.txt‘将表中的数据还原到表DB.T1中;

解决方案2:-

需要准备shell脚本,该脚本将在每个表的mysqldump命令中将值传递给where选项。

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

https://dba.stackexchange.com/questions/231277

复制
相关文章

相似问题

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