Mysql 从导入单个数据库--所有数据库转储

Mysql 从导入单个数据库--所有数据库转储,mysql,database,import,mysqldump,Mysql,Database,Import,Mysqldump,是否可以从--all databases mysqldump导入单个数据库?我想我可以手动修改该文件,但不知道是否有任何命令行选项可以这样做 我正在移动服务器,并且有很多数据库,其中大部分我目前不需要或不想使用,但如果需要,我希望可以选择恢复单个数据库。mysqldump输出只是一组SQL语句 您可以在命令行中提供所需的数据库,并使用以下命令跳过针对其他数据库的命令: mysql -D mydatabase -o mydatabase < dump.sql mysql-D mydatab

是否可以从--all databases mysqldump导入单个数据库?我想我可以手动修改该文件,但不知道是否有任何命令行选项可以这样做


我正在移动服务器,并且有很多数据库,其中大部分我目前不需要或不想使用,但如果需要,我希望可以选择恢复单个数据库。

mysqldump
输出只是一组
SQL
语句

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

mysql -D mydatabase -o mydatabase < dump.sql
mysql-D mydatabase-o mydatabase

这将仅在使用
mydatabase
时执行命令

您可以使用以下命令:

mysql-u root-p——一个数据库destdbname
其中
destdbname
是要恢复的所需数据库

另一个更安全的选择是从
--所有数据库的转储中提取数据库。例如:

sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' alldatabases.sql > output.sql
用所需的数据库名称替换
dbname
alldatabases.sql
是sql转储文件的名称。这样,您将拥有单独的DB on文件,然后您可以使用一个简单的mysql命令进行恢复


(学分归:Darren Mothersele-参见)

当使用Hetzbh建议的
sed
-方法时,请确保从原始转储手动复制初始和最终行,例如:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


到sed生成的剥离文件的开始和结束。否则,导入可能会失败,因为转储中的表的字母顺序不符合外部约束(即
errno:150“外键约束格式不正确”
)。

感谢您的快速回答!太棒了。对我很有用,谢谢!!您可以添加--disable key以避免外键错误;)mysql-u user-D--disable keys-database-o这是一个非常鲁莽且极其危险的答案。如果启动
mysqldump--all databases
,mysqldump输出将包含
DROP DATABASE If EXISTS dbname;创建数据库dbname;使用dbname用于MySQL实例中的每个数据库,包括MySQL模式。请查看mysqldump文档:。这意味着每个数据库都将被无情地覆盖。您能提供证据证明它将跳过除一个数据库之外的所有数据库吗???注意:您可以使用mysqlbinlog对二进制日志执行此操作。对于偏执狂,我首先创建了一个只有特定数据库权限的用户,然后使用该用户的凭据运行此命令。我在尝试切换数据库时出错,但保留了特定数据库的数据。此答案不正确。当从mysqldump(所有数据库)生成的文件中读取MySQL语句时,-D选项无效。此外,它将在mysql模式中删除和创建表,包括用户表。这是一个很好的解决方案!这意味着我必须添加原始转储头以避免一些错误…这应该是接受的答案注意,这在Powershell中不起作用,但在CMDSED中起作用。这真的很有帮助!你怎么会说另一个更安全的选择?使用一个数据库时是否存在任何风险?
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;