假设我们有两个表:t1,t2数据库中的db:期望下面的代码根据where子句中指定的条件转储表:
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子句转储多个表?如果不可能,有办法解决吗?
发布于 2019-03-04 21:39:53
MySQL转储只有一个where子句,这使得像您一样在两个表中很难使用。
一种方法是在t1中创建一个名为id的生成列,该列实际上是user_id。
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
发布于 2019-03-05 13:14:41
解决方案1:-
使用SELECT ... INTO OUTFILE语句转储表数据,该语句将选定的行写入文件&使用LOAD DATA语句将其还原到表中。
例如:
scp命令)解决方案2:-
需要准备shell脚本,该脚本将在每个表的mysqldump命令中将值传递给where选项。
https://dba.stackexchange.com/questions/231277
复制相似问题