【问题标题】:How do I restore one database from a mysqldump containing multiple databases?如何从包含多个数据库的 mysqldump 中恢复一个数据库?
【发布时间】:2011-04-05 12:24:32
【问题描述】:

我有一个包含 5 个数据库的 mysql 转储,想知道是否有办法只导入其中一个(使用 mysqldump 或其他)。

建议表示赞赏。

【问题讨论】:

  • 我认为没有。导入所有数据库并删除除您想要保留的数据库之外的所有数据库,这是我认为您能做的最好的事情 - 但您永远不知道,也许有人想出了一些东西

标签: mysql database import mysqldump restore


【解决方案1】:

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

mysql> mysql -u root -p --one-database YOURDBNAME < YOURFILE.SQL

当你这样做时当然要小心。

您也可以使用mysql dumpsplitter

【讨论】:

  • 我试过这个,但总是得到错误“ERROR 1049 (42000): Unknown database 'redmine'”。文档指出:“这对于在二进制日志中跳过对其他数据库的更新很有用。”这不是二进制日志(我认为)所以它不会工作。
  • 我发现了一个与此功能相关的有趣错误报告:bugs.mysql.com/bug.php?id=40477
  • @ThePixelDeveloper:空数据库需要先存在,然后才能工作。
  • 啊,我终于明白@RuneKaagaard 的意思了:如果要恢复“redmine”数据库,那么首先以root 身份登录mysql 并执行“CREATE DATABASE redmine”。之后“--one database”命令开关将在之后起作用。
  • Oracle 的文档警告不要使用此命令。它很容易以意想不到的结果告终。见dev.mysql.com/doc/refman/5.6/en/…
【解决方案2】:

您可以通过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. 从输出中删除 last CREATE DATABASE 行,因为我们不希望 mysqld 创建第二个数据库。

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

【讨论】:

  • 在一行中,并带有-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
猜你喜欢
  • 2014-01-30
  • 1970-01-01
  • 2012-12-15
  • 2014-08-24
  • 2012-09-05
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多