如何从mysqldump恢复转储文件?


542

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

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

所选文件是由mysqldump生成的,无法由该应用程序还原。

我该如何工作?

Answers:


586

它应该像运行此命令一样简单:

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

如果转储是单个数据库,则可能必须在文件顶部添加一行:

USE <database-name-here>;

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

要运行这些命令,请打开命令提示符(在Windows中)并cd转到mysql.exe可执行文件所在的目录(您可能需要仔细检查一下,这取决于您如何安装mysql,即独立安装还是作为mysql的一部分WAMP之类的软件包)。进入该目录后,您应该只需键入上面的命令即可。


1
我是否使用“ MySQL命令行客户端”?我以前从未使用过MySQL。
扎克·彼得森

1
在文本编辑器中打开转储文件,这很容易完成,如果有任何“ using”语句,则有多个数据库,如果没有,则必须在顶部添加一个运行该命令。
贾斯汀·贝内特

6
当然,您放入“ using”语句中的数据库必须首先存在。
贾斯汀·贝内特

112
参见vogs答案。语法 mysql -u<user> -p mydatabasename < db_backup.dump 不需要USE在文件开头声明
Toskan 2014年

1
“在文本编辑器中打开转储文件”的建议似乎很奇怪。这可能适用于小型数据库或像EditPad这样的缓冲文本编辑器,但对于其他所有内容,它都会使您感到窒息。如果您不必执行此步骤,那就太好了。
mikato

718

如果要还原的数据库尚不存在,则需要首先创建它。

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

C:\> mysql -u root -p

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

52
我个人喜欢这种方法。它显示转储的进度,以及确切地显示不同的sql正在花费多少时间。
ToughPal 2010年

11
@Phrogz实际上,您可以使用命令行在mysql -u root -psecret 不带空格的情况下提供密码,但缺点是您的密码以明文形式显示在进程列表和日志文件中。如您建议的那样,最好使用empty -p并在提示符下键入它。
Joe Holloway

这种方法的好处是无需编辑转储文件即可设置基于会话的变量(例如FOREIGN_KEY_CHECKS)
Chris Cooper

用手做这种事情时,这一切都很好,但是在bash脚本中不起作用。
chacham15 2015年

1
缺点之一:它无法加载压缩的转储文件(例如使用生成的文件mysqldump db | gzip -9 > dumpfile.sql.gz
Marinos

245

您只需要运行以下命令:

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

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

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

要运行这些命令,请打开命令提示符(在Windows中)并cd转到mysql.exe可执行文件所在的目录(您可能需要仔细检查一下,这取决于您如何安装mysql,即独立安装还是作为mysql的一部分WAMP之类的软件包)。进入该目录后,您应该只需键入命令即可。


60
mysql -u username -p -h localhost DATA-BASE-NAME < data.sql

这里-步骤3:这样,您就不需要USE语句


33

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

mysql -uroot -p 

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

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

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


19

运行命令进入数据库

 # 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

14

我按照以下步骤进行工作...

  1. 打开MySQL Administrator并连接到服务器

  2. 选择左侧的“目录”

  3. 右键单击左下角的框,然后选择“创建新架构”

    MySQL管理员http://img204.imageshack.us/img204/7528/adminsx9.th.gif 放大图像

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

    MySQL新模式http://img262.imageshack.us/img262/4374/newwa4.th.gif 放大图像

  5. 打开Windows命令提示符(cmd)

    Windows命令提示符http://img206.imageshack.us/img206/941/startef7.th.gif 放大图像

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

  7. 执行命令:

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

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

    MySQL转储还原命令行http://img388.imageshack.us/img388/2489/cmdjx0.th.gif 放大图像

  8. 请享用!



11

如果要查看转储的进度,请尝试以下操作:

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

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


10

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

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

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

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

9

使用在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

9
./mysql -u <username> -p <password> -h <host-name like localhost> <database-name> < db_dump-file

这与其他几个答案相同,这是一个已有八年历史的问题。
miken32 '16

2
尽管选择的答案非常好,但该答案对我实际上更有用。我的数据库文件很大,在Notepad ++中打开它是一场噩梦,它无法处理大小,并且不允许我在sql文件的顶部添加数据库名称。在这种情况下,实际上可以从命令行指定数据库名称更为有用。
Najeeb

mysql命令不接受选项及其参数之间的空格。必须使用-u<username>密码,并且完全不应在命令行上提供密码。
罗兰·伊利格

4

如果没有从那里创建备份/转储,则不能使用MySQL Admin中的Restore菜单。虽然值得一试。如果您选择使用复选框“忽略错误”,它将表示已成功完成,尽管它显然仅以导入的行的一小部分退出...这是转储,请注意。


2

一线命令可从中还原生成的SQL mysqldump

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

1
例如mysql -u root -p12345678 -e "source /tmp/backup.sql;"
Jossef Harush

不要使用这样的密码,只需使用-p,然后在按Enter键后命令行将提示您输入安全的密码。
user2473015 '18

当您负担得起交互式提示时,您是正确的。如果您无法使用(例如,无人看管的脚本),则可能会内联使用它
Jossef Harush

1

您也可以使用MySQL Administrator中的还原菜单。您只需要打开备份文件,然后单击“还原”按钮。


0

如何使用MySQLWorkbench还原MySQL数据库

您可以在查询选项卡中运行放置并创建命令。

如果当前存在该架构,则将其删除

DROP DATABASE `your_db_name`;

创建一个新的架构

CREATE SCHEMA `your_db_name`;

打开转储文件

MySQLWorkbench打开sql文件

  1. 单击“ 在新查询中打开SQL脚本”选项卡图标,然后选择数据库转储文件。
  2. 然后单击“运行SQL脚本...”。
  3. 然后,它将预览SQL转储脚本的第一行。
  4. 然后,您将选择默认架构名称
  5. 接下来,选择默认字符集 utf8通常是一个安全的选择,但是您可以通过查看预览行中的character_set之类的内容来辨别它。
  6. 点击运行
  7. 请耐心等待大型数据库还原脚本,并注意驱动器空间将逐渐消失!🎉

0

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

sudo mysql databasename < backup.sql
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.