【发布时间】:2010-12-03 17:16:21
【问题描述】:
我正在尝试使用 mysqldump 转储 MySQL 中表的子集。我有要从表中选择的行的 id 值,存储在文件中。当我将这些值用作变量时,如下所示:
ids=`cat ids.csv`
mysqldump -u root -p db Table --where="id in ($ids)" >> dump.sql
我明白了:
x.bash: line x: /usr/bin/mysqldump: 参数列表太长
我可以尝试将单行变量 $ids (1,2,3,4,..) 分成更短的列表并在循环中调用 mysqldump,但我目前对 bash 脚本中的循环不太擅长。 或者可能有更好的方法来解决这个问题。
提前感谢您的帮助。
编辑
考虑到@ajreal 的建议, 如果我这样做了
mysql -u root -p -e "select * into outfile ./dump.sql from db.Table where id in ($ids)"
我再次收到“参数列表太长”。
我从另一个环境中获取 id 值。我运行此脚本的数据库和我获得要在 where 子句中使用的 id 值的数据库位于不同的环境中。 此外,在此步骤之前,我使用 --ignore-table 选项创建转储文件,忽略我在下一步中使用的“表”表。因此,我也更愿意在该步骤中使用 mysqldump。
【问题讨论】:
-
否定,保存到文件中并使用 mysql -u root -p..
-
经过一些更改,@Dennis 的回答非常有帮助。再次感谢。