从--all-databases dump导入单个数据库

sav*_*guy 64 mysql database import mysqldump

是否可以从--all-databases mysqldump导入单个数据库?我想我可以手动修改文件,但想知道是否有任何命令行选项来执行此操作.

我正在移动服务器并拥有大量数据库,其中大部分目前我不需要或者想要,但是如果需要的话,我希望可以选择恢复单个数据库.

小智 78

您可以使用以下命令:

mysql -u root -p --one-database destdbname < alldatabases.sql
Run Code Online (Sandbox Code Playgroud)

destdbname您想要还原的所需数据库在哪里.

另一个选项是恕我直言,更安全,是从--all-databases转储中提取数据库.例:

sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql
Run Code Online (Sandbox Code Playgroud)

替换dbname为所需的数据库名称.alldatabases.sql是您的sql-dump文件的名称.这样你就可以在文件中分配数据了,然后你可以使用一个简单的mysql命令进行恢复.

祝好运

(致记者:Darren Mothersele - 请看他的页面)

  • 好方案!这说我必须添加原始转储头以避免一些错误... (3认同)
  • 这应该是公认的答案 (2认同)
  • 你为什么说_恕我直言,这是更安全的另一种选择_?使用“--one-database”有什么风险吗? (2认同)

Qua*_*noi 73

mysqldump输出只是一组SQL语句.

您可以在命令行中提供所需的数据库,并使用以下命令跳过针对其他数据库的命令:

mysql -D mydatabase -o mydatabase < dump.sql
Run Code Online (Sandbox Code Playgroud)

这只会mydatabase在使用时执行命令

  • 这个答案是非常鲁莽和非常危险的.如果你启动`mysqldump --all-databases`,mysqldump输出将包含`DROP DATABASE IF EXISTS dbname; CREATE DATABASE dbname; USE dbname;`用于MySQL实例中的每个数据库,包括mysql模式.请查看mysqldump文档:http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html#option_mysqldump_all-databases.这意味着每个数据库都会被无情地覆盖.你能提供证据证明它将跳过所有数据库,但一个??? 注意:您可以使用mysqlbinlog对二进制日志执行此操作. (24认同)
  • 这个答案是不正确的.从mysqldump --all-databases生成的文件中读取MySQL语句时,-D选项无效.此外,它将在mysql架构中使用DROP和CREATE表,包括users表. (10认同)
  • 对于偏执狂,我首先创建了一个只拥有特定数据库权限的用户,然后使用该用户的凭据运行此命令.尝试切换数据库时出错,但保留了特定数据库的数据. (4认同)
  • 对我很有用,谢谢!! 你可以添加--disable-keys以避免外键错误;)mysql -u user -D --disable-keys database -o <dump.sql (2认同)