在执行SQL文件时使用--ignore-table与MySQL


use --ignore-table with MySQL while execute SQL file

我有大的SQL文件,我需要将这个文件导入到ubuntu和MySql下的数据库中

我使用此命令导出数据库,并从转储中忽略一些表

  mysqldump -uroot -proot myDatabase --ignore-table=myDatabase.table1 > sql_backup.sql;

现在我需要将其导入另一个数据库并忽略导入操作中的一些表

如何在此命令中使用--ignore-table选项

mysql -hlocalhost -root -proot newdb< sql_backup.sql

我可以这样做吗,怎么做?

谢谢

我每周都有这样的问题。就我而言,当我导入数据库时,我需要删除 2 个表,但需要转储它。快速搜索后,我尝试了sed,这是我正在做的,也许对您有用:

#!/bin/bash
sed '/`log_sessions`/ d' ${1} > dumpLog
sed '/`log_sessions_requests`/ d' dumpLog > ${2}
rm dumpLog

我使用此脚本清理转储(并覆盖)删除对log_sessions的所有引用并log_sessions_requests

如果您使用表更改两个名称,它应该可以正常工作。

当然,另一种解决方案是执行多个转储...但我认为这是一个更好的方法。

已编辑:更改了脚本以避免覆盖主转储

如何使用:

  1. 将脚本保存到名为 cleanDB.sh 的新文件
  2. 像这样调用脚本 ./cleanDB.sh mainDump.sql filteredDump.sql

我想你明白了,如果需要一些解释,告诉我

您的sql_back.sql文件包含正常的 ddl 和 insert 语句。mysql 命令将执行文件中提供给它的任何命令。

您可以手动打开文件,找到要忽略的表以及相关的插入语句,然后从文件中删除它们,或者将它们注释掉并将其保存到"sql_backup_with_ignored_tables.sql"文件中并运行该文件。

不是你期望的方式。

后面的命令"执行"您提供给它的数据,而不是带有相关选项的专用"备份"工具。

首先,如果您在备份时忽略了该表,则它不在sql_backup.sql脚本中,并且您无需执行任何额外的工作。

如果 sql_backup.sql 内部有另一个表,那么我会建议两种解决方案:

  1. 使用不需要的表--ignore-table,同时进行备份。
  2. 手动或使用文本操作工具(如sed)在执行之前编辑sql_backup.sql