如何转储一个特定的表或一组表而不包含其他数据库表?

评论

另请参见:mysqldump是否有任何选项忽略数据库进行备份?

#1 楼

如果要从mydb转储表t1,t2和t3,请执行以下操作:如果mydb中有大量表,并且要转储除t1,t2和t3之外的所有内容,请执行以下操作:
mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql

试试看!!!!
更新2014-03-06 10:15 EST
@RoryDonohue向我指出,GROUP_CONCAT函数需要扩展其最大长度。我将会话变量group_concat_max_len添加到了答案中,最大长度为10K。谢谢@RoryDonohue。

评论


要仅排除几个表,可以使用--ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3等。

– codewaggle
2012年12月13日在13:06

@codecowboy,您可以将SQL =“ $ {SQL} AND table_name NOT IN('t1','t2','t3')”更改为SQL =“ $ {SQL} AND table_name NOT LIKE'foo \ _%'” 。我刚刚对其进行了测试,并且可以正常工作。您可以将条件更改为'%foo%',以获取名称中包含“ foo”的所有表(包括“ food”,“ fool”等)。

–瓶Butkus
2014年12月23日下午2:55

考虑到--ignore-table参数的存在,将表排除在外的方法难道不是多余的吗?如果是这样,从答案中删除脚本并推荐--ignore-table会更好吗?

–马克·阿默里(Mark Amery)
16-09-26在17:34

@codewaggle给出错误-选项--ignore-table = 。的非法使用,除非我将表指定为schemaname.tablename。

– WAF
17年1月10日在14:33

很酷的东西,任何原因SQL变量不是多行的吗?

–sdkks
17年6月23日在4:32

#2 楼



他所包含的脚本是一种很好的方法,它可以包含(and table_name in)或排除(and table_name NOT in)表列表。

如果您只需要排除一个或两个表,就可以使用--ignore-table选项分别排除它们:

mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql


评论


这是最好的答案!

–爆发
3月12日10:08

#3 楼

当您有多个表时,最好运行以下命令:

mysql databasename -u [user] -p[password] -e 'show tables like "table_name_%"' 
       | grep -v Tables_in 
       | xargs mysqldump [databasename] -u [root] -p [password] > [target_file]


或者这样的想法: />
请记住,这些命令只能在一行中键入。

#4 楼

您只需使用以下命令即可做到:

 mysqldump -uusername -ppassword dbname \
  --ignore-table=schema.tablename1    \
  --ignore-table=schema.tablename2    \
  --ignore-table=schema.tablename3 > mysqldump.sql
 


评论


--ignore-table将从mysqldump中排除某些表,而不包括。 :)

–普拉文南
2013年9月16日在7:02

然而,可以列出所有要排除的表,它只会转储剩下的表:-)

–科林·哈特(Colin't Hart)
15年1月7日在18:17

最近发表