如何从 mysqldump 恢复转储文件?

Posted

技术标签:

【中文标题】如何从 mysqldump 恢复转储文件?【英文标题】:How do I restore a dump file from mysqldump? 【发布时间】:2010-09-11 11:17:45 【问题描述】:

我获得了一个 mysql 数据库文件,我需要将其还原为我的 Windows Server 2008 机器上的数据库。

我尝试使用 MySQL Administrator,但出现以下错误:

所选文件由 mysqldump 无法恢复 这个应用程序。

我如何让它工作?

【问题讨论】:

好问题,感谢您在我面前提出这个问题,赞成!最终选择了一个不被接受的解决方案,效果很好,但每种方法都很好。干杯。 【参考方案1】:

如果您要恢复的数据库尚不存在,则需要先创建它。

在命令行中,如果您位于包含转储文件的同一目录中,请使用以下命令(带有适当的替换):

C:\> mysql -u root -p

mysql> create database mydb;
mysql> use mydb;
mysql> source db_backup.dump;

【讨论】:

我个人喜欢这种方法。它显示了转储的进度以及不同的 sql 所花费的时间。 @Phrogz 实际上,您可以在命令行上使用mysql -u root -psecret 提供密码而无需空格,但缺点是您的密码以明文形式显示在进程列表和日志文件中。按照您的建议,最好使用空的-p 并在提示中输入。 此方法的好处是允许设置基于会话的变量(例如 FOREIGN_KEY_CHECKS),而无需编辑转储文件 这一切都很好,当手动做这种事情时,这一切都很好,但在 bash 脚本中不起作用。 一个缺点:它无法加载 gzipped 转储(例如使用 mysqldump db | gzip -9 > dumpfile.sql.gz 生成)【参考方案2】:

应该像运行这个一样简单:

mysql -u <user> -p < db_backup.dump

如果转储是单个数据库,您可能需要在文件顶部添加一行:

USE <database-name-here>;

如果它是许多数据库的转储,则 use 语句已经在其中。

要运行这些命令,请打开命令提示符(在 Windows 中)和 cdmysql.exe 可执行文件所在的目录(您可能需要四处寻找它,这取决于您如何安装 mysql,即独立或作为 WAMP 等软件包的一部分)。进入该目录后,您应该可以像上面那样键入命令。

【讨论】:

我是否使用“MySQL 命令行客户端”?我以前从未使用过 MySQL。 在文本编辑器中打开转储文件,很容易通过,如果有任何“使用”语句,那么它的多个数据库,如果没有,你必须在运行该命令之前在顶部添加一个。 当然,你放在“using”语句中的数据库必须首先存在。 查看vogs的回答。语法是mysql -u&lt;user&gt; -p mydatabasename &lt; db_backup.dump 文件开头不需要USE 语句 “在文本编辑器中打开转储文件”的建议似乎很奇怪。这可能适用于小型数据库或像 EditPad 这样的缓冲文本编辑器,但对于其他所有内容,它都会窒息。如果您不必采取这一步,那就太好了。【参考方案3】:

你只需要运行这个:

mysql -p -u[user] [database] < db_backup.dump

如果转储包含多个数据库,则应省略数据库名称:

mysql -p -u[user] < db_backup.dump

要运行这些命令,请打开命令提示符(在 Windows 中)和 cdmysql.exe 可执行文件所在的目录(您可能需要四处寻找它,这取决于您如何安装 mysql,即独立或作为 WAMP 等软件包的一部分)。进入该目录后,您应该只需键入命令即可。

【讨论】:

【参考方案4】:
mysql -u username -p -h localhost DATA-BASE-NAME < data.sql

看here - step 3:这样你就不需要USE语句了

【讨论】:

【参考方案5】:

当我们使用mysqldump 创建转储文件时,它包含一个用于重新创建数据库内容的大型 SQL 脚本。所以我们通过启动 MySQL 的命令行客户端来恢复它:

mysql -uroot -p 

(其中root 是我们的 MySQL 管理员用户名),一旦连接到数据库,我们需要命令来创建数据库并将文件读入其中:

create database new_db;
use new_db;
\. dumpfile.sql

详细信息将根据创建转储文件时使用的选项而有所不同。

【讨论】:

【参考方案6】:

运行命令进入数据库

 # mysql -u root -p 

输入用户密码然后创建新数据库

mysql> create database MynewDB;
mysql> exit

然后让 exit.Afetr that.Run 这个命令

# mysql -u root -p  MynewDB < MynewDB.sql

然后进入数据库并输入

mysql> show databases;
mysql> use MynewDB;
mysql> show tables;
mysql> exit

就是这样............您的转储将从一个数据库恢复到另一个数据库

否则有另一种转储恢复方式

# mysql -u root -p 

然后进入数据库并输入

mysql> create database MynewDB;
mysql> show databases;
mysql> use MynewDB;
mysql> source MynewDB.sql;
mysql> show tables;
mysql> exit

【讨论】:

【参考方案7】:

如果你想查看转储的进度,试试这个:

pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME

您当然需要安装“pv”。此命令仅适用于 *nix。

【讨论】:

【参考方案8】:

我按照这些步骤让它工作了……

    打开 MySQL Administrator 并连接到服务器

    选择左侧的“目录”

    在左下角的框中右击并选择“创建新架构”

    MySQL Administrator http://img204.imageshack.us/img204/7528/adminsx9.th.gifenlarge image

    为新架构命名(例如:“dbn”)

    MySQL New Schema http://img262.imageshack.us/img262/4374/newwa4.th.gifenlarge image

    打开 Windows 命令提示符 (cmd)

    Windows Command Prompt http://img206.imageshack.us/img206/941/startef7.th.gifenlarge image

    将目录更改为 MySQL 安装文件夹

    执行命令:

    mysql -u root -p dbn < C:\dbn_20080912.dump
    

    …其中“root”是用户名,“dbn”是数据库名,“C:\dbn_20080912.dump”是mysqldump .dump文件的路径/文件名

    MySQL dump restore command line http://img388.imageshack.us/img388/2489/cmdjx0.th.gifenlarge image

    享受吧!

【讨论】:

【参考方案9】:

作为先前答案的具体示例:

我需要恢复备份,以便将其导入/迁移到 SQL Server。我只安装了 MySql,但没有将其注册为服务或将其添加到我的路径中,因为我不需要让它保持运行。

我使用 Windows 资源管理器将我的转储文件放在 C:\code\dump.sql 中。然后从开始菜单项打开 MySql。创建数据库,然后使用完整路径运行源命令,如下所示:

mysql> create database temp
mysql> use temp
mysql> source c:\code\dump.sql

【讨论】:

【参考方案10】:

你可以试试SQLyog'Execute SQL script'工具来导入sql/dump文件。

【讨论】:

【参考方案11】:

使用在 Linux 上创建的 200MB 转储文件在带有 mysql 5.5 的 Windows 上进行恢复,我取得了更大的成功

source file.sql

从 mysql 提示符而不是使用

mysql  < file.sql

在命令行上的方法,导致一些错误 2006 “服务器已消失”(在 Windows 上)

奇怪的是,在 (mysql) 安装期间创建的服务引用了一个不存在的 my.ini 文件。我将“大”示例文件复制到 my.ini 我已经用建议的增加进行了修改。

我的价值观是

[mysqld]
max_allowed_packet = 64M
interactive_timeout = 250
wait_timeout = 250

【讨论】:

【参考方案12】:
./mysql -u <username> -p <password> -h <host-name like localhost> <database-name> < db_dump-file

【讨论】:

这与其他几个答案相同,这是一个八年前的问题。 虽然选择的答案非常好,但这个答案其实对我来说更有用。我的数据库文件非常大,在 Notepad++ 中打开它是一场噩梦,它无法处理大小,并且不允许我在 sql 文件的顶部添加数据库名称。在这种情况下,能够从命令行指定数据库名称实际上更有帮助。 mysql 命令不接受选项及其参数之间的空格。必须改成-u&lt;username&gt;,而且命令行根本不应该提供密码。【参考方案13】:

如果备份/转储不是从那里创建的,则无法使用 MySQL Admin 中的恢复菜单。不过值得一试。如果您选择使用复选框“忽略错误”,它会说它已成功完成,尽管它显然退出时只导入了一小部分行……请注意,这是一个转储。

【讨论】:

【参考方案14】:

mysqldump恢复生成的SQL的单行命令

mysql -u <username> -p<password> -e "source <path to sql file>;"

【讨论】:

例如mysql -u root -p12345678 -e "source /tmp/backup.sql;" 不要像这样使用密码,只要使用-p,在你按回车后命令行会提示你一个安全的密码请求。 当您负担得起交互式提示时,您是正确的。当你不能(例如无人参与的脚本)时,你可能会内联使用它【参考方案15】:

假设您已经创建了空白数据库,您还可以从命令行恢复数据库,如下所示:

mysql databasename < backup.sql

【讨论】:

【参考方案16】:

您还可以使用 MySQL Administrator 中的恢复菜单。您只需打开备份文件,然后单击恢复按钮。

【讨论】:

【参考方案17】:

如何使用 MySQLWorkbench 恢复 MySQL 数据库

您可以在查询选项卡中运行 drop 和 create 命令。

如果架构当前存在则删除它

DROP DATABASE `your_db_name`;

创建新架构

CREATE SCHEMA `your_db_name`;

打开您的转储文件

    单击在新查询选项卡中打开 SQL 脚本图标并选择您的数据库转储文件。 然后点击运行 SQL 脚本... 然后您可以预览 SQL 转储脚本的第一行。 然后您将选择默认架构名称 接下来选择默认字符集 utf8 通常是安全的选择,但您可以通过查看预览行中的类似 character_set 来辨别它。 点击运行 请耐心等待大型数据库恢复脚本,并注意您的驱动器空间会消失! ?

【讨论】:

【参考方案18】:

如果您已经在mysql 提示符下并假设您的转储文件dump.sql,那么我们也可以使用以下命令来恢复转储

mysql> \. dump.sql

如果您的转储大小较大,请将max_allowed_packet 值设置为更高。设置此值将帮助您更快地恢复转储。

【讨论】:

以上是关于如何从 mysqldump 恢复转储文件?的主要内容,如果未能解决你的问题,请参考以下文章

从 .mysql 文件恢复 MySQL 数据库

从命令行将 mysql 数据库转储到纯文本 (CSV) 备份

mysqldump - 将多个数据库从不同的 mysql 帐户转储到一个文件

从 .frm 文件恢复 mysql 数据库

数据库备份与恢复--01---mysqldump实现逻辑备份

恢复 sql 转储文件时得到 errno 150