你如何 mysqldump 特定的表?

mar*_*son 482 mysql mysqldump backup

如何在不包括其余 db 表的情况下转储特定表或一组表?

Rol*_*DBA 649

如果要从 mydb 转储表 t1、t2 和 t3

mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql
Run Code Online (Sandbox Code Playgroud)

如果您在 mydb 中有大量表并且您想转储除 t1、t2 和 t3 之外的所有内容,请执行以下操作:

DBTODUMP=mydb
SQL="SET group_concat_max_len = 10240;"
SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
TBLIST=`mysql -u... -p... -AN -e"${SQL}"`
mysqldump -u... -p... ${DBTODUMP} ${TBLIST} > mydb_tables.sql
Run Code Online (Sandbox Code Playgroud)

试一试 !!!

更新 2014-03-06 10:15 美国东部时间

@RoryDonohue向我指出GROUP_CONCAT函数需要扩展其最大长度。我将会话变量group_concat_max_len添加到我的答案中,最大长度为 10K。谢谢,@RoryDonohue。

  • 要排除几个表,您可以使用 --ignore-table=Table1 --ignore-table=Table2 --ignore-table=Table3 等。 (52认同)

cod*_*gle 84

RolandoMySQLDBA 答案的扩展说明

他包含的脚本是包含 ( 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
Run Code Online (Sandbox Code Playgroud)


小智 32

当你有多个表时,运行这样的事情会好得多:

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]
Run Code Online (Sandbox Code Playgroud)

或者像这样想:

mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';" 
       | mysql -u[user] -p[password] databasename 
       | sed '/Tables_in/d'` > [target_file]
Run Code Online (Sandbox Code Playgroud)

请记住,这些命令只能在一行中输入。


小智 16

您只需使用以下命令即可完成:

mysqldump -uusername -ppassword dbname \
  --ignore-table=schema.tablename1    \
  --ignore-table=schema.tablename2    \
  --ignore-table=schema.tablename3 > mysqldump.sql
Run Code Online (Sandbox Code Playgroud)

  • --ignore-table 是从 mysqldump 中排除某些表,而不是包含 . :) (5认同)
  • 然而,可以列出所有要排除的表,它只会转储剩余的表:-) (4认同)