2010-08-29 73 views
15

我有一个与5数据库的MySQL转储,并想知道是否有一种方法只导入其中一个(使用mysqldump或其他)。如何从包含多个数据库的mysqldump恢复一个数据库?

建议感激。

+0

我不认为有。导入所有的数据库,并删除除了你想保留的那一个以外的所有数据库是你能做的最好的事情 - 但你永远不知道,也许有人想出了一些东西 – 2010-08-29 20:22:30

回答

15

您可以通过sed管道转储的SQL并让它为您提取数据库。类似:

cat mysqldumped.sql | \ 
sed -n -e '/^CREATE DATABASE.*`the_database_you_want`/,/^CREATE DATABASE/ p' | \ 
sed -e '$d' | \ 
mysql 

两个sed命令:

  1. 仅打印CREATE DATABASE线(包括CREATE DATABASE线)之间的匹配线,和
  2. 删除从所述最后CREATE DATABASE线输出,因为我们不希望mysqld创建第二个数据库。

如果您的转储不包含CREATE DATABASE行,则还可以匹配USE行。

+0

在一行中,使用'-u'和'-p'选项: 'cat all-databases.sql | sed -n -e'/^CREATE DATABASE。* \'the_database_you_want \'/,/^CREATE DATABASE/p'| sed -e'$ d'| mysql -u my_username -p“ – 2013-12-05 20:26:37

27

您可以使用mysql命令行--one-database选项。

当然,当你这样做的时候要小心。您可以使用mysql dumpsplitter

+0

我试过这个,但总是得到错误“ERROR 1049 (42000):未知数据库'redmine'“。该文档指出:“这对跳过对二进制日志中其他数据库的更新很有用。”这不是一个二进制日志(我认为),所以它不会工作。 – 2010-08-29 23:09:11

+1

我发现了一个与此功能相关的有趣的错误报告:http://bugs.mysql.com/bug.php?id=40477 – 2010-08-29 23:16:40

+1

@ThePixelDeveloper:一个空的数据库需要先存在,然后才能正常工作。 – 2012-09-12 12:20:45

相关问题