我有大的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
如果您使用表更改两个名称,它应该可以正常工作。
当然,另一种解决方案是执行多个转储...但我认为这是一个更好的方法。
已编辑:更改了脚本以避免覆盖主转储
如何使用:
- 将脚本保存到名为 cleanDB.sh 的新文件
- 像这样调用脚本 ./cleanDB.sh mainDump.sql filteredDump.sql
我想你明白了,如果需要一些解释,告诉我
您的sql_back.sql文件包含正常的 ddl 和 insert 语句。mysql 命令将执行文件中提供给它的任何命令。
您可以手动打开文件,找到要忽略的表以及相关的插入语句,然后从文件中删除它们,或者将它们注释掉并将其保存到"sql_backup_with_ignored_tables.sql"文件中并运行该文件。
不是你期望的方式。
后面的命令"执行"您提供给它的数据,而不是带有相关选项的专用"备份"工具。
首先,如果您在备份时忽略了该表,则它不在sql_backup.sql脚本中,并且您无需执行任何额外的工作。
如果 sql_backup.sql
内部有另一个表,那么我会建议两种解决方案:
- 使用不需要的表
--ignore-table
,同时进行备份。 - 手动或使用文本操作工具(如
sed
)在执行之前编辑sql_backup.sql
。