如何使用 mysqldump 跳过某些数据库表?

新手上路,请多包涵

有没有办法从 mysqldump 命令限制某些表?

例如,我将使用以下语法 转储 table1 和 table2:

 mysqldump -u username -p database table1 table2 > database.sql

但是有没有类似的方法来转储 table1 和 table2 之外的所有表?我在 mysqldump 文档中没有找到任何东西,那么暴力(指定所有表名)是唯一的方法吗?

原文由 Zac 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

您可以使用 –ignore-table 选项。所以你可以做

mysqldump -u USERNAME -pPASSWORD DATABASE --ignore-table=DATABASE.table1 > database.sql

-p 之后没有空格(这不是错字)。

要忽略多个表,请多次使用此选项,这 至少从 5.0 版 开始就可以使用。

如果您想要另一种方法来忽略多个表,您可以使用如下脚本:

 #!/bin/bash
PASSWORD=XXXXXX
HOST=XXXXXX
USER=XXXXXX
DATABASE=databasename
DB_FILE=dump.sql
EXCLUDED_TABLES=(
table1
table2
table3
table4
tableN
)

IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
   IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done

echo "Dump structure"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data --routines ${DATABASE} > ${DB_FILE}

echo "Dump content"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} ${DATABASE} --no-create-info --skip-triggers ${IGNORED_TABLES_STRING} >> ${DB_FILE}

原文由 Brian Fisher 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 mysqldump 跳过某些表

假设某些数据库中有一些测试表,您想将它们从备份中排除;您可以使用 –exclude-tables 选项指定,该选项将在所有数据库中排除名称为 test 的表:

shell> mysqldump --exclude-tables=test --resultfile=backup_excluding_test.sql

原文由 Rahul Panwar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏