如何从 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 中)和 cd
到 mysql.exe
可执行文件所在的目录(您可能需要四处寻找它,这取决于您如何安装 mysql,即独立或作为 WAMP 等软件包的一部分)。进入该目录后,您应该可以像上面那样键入命令。
【讨论】:
我是否使用“MySQL 命令行客户端”?我以前从未使用过 MySQL。 在文本编辑器中打开转储文件,很容易通过,如果有任何“使用”语句,那么它的多个数据库,如果没有,你必须在运行该命令之前在顶部添加一个。 当然,你放在“using”语句中的数据库必须首先存在。 查看vogs的回答。语法是mysql -u<user> -p mydatabasename < db_backup.dump
文件开头不需要USE
语句
“在文本编辑器中打开转储文件”的建议似乎很奇怪。这可能适用于小型数据库或像 EditPad 这样的缓冲文本编辑器,但对于其他所有内容,它都会窒息。如果您不必采取这一步,那就太好了。【参考方案3】:
你只需要运行这个:
mysql -p -u[user] [database] < db_backup.dump
如果转储包含多个数据库,则应省略数据库名称:
mysql -p -u[user] < db_backup.dump
要运行这些命令,请打开命令提示符(在 Windows 中)和 cd
到 mysql.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<username>
,而且命令行根本不应该提供密码。【参考方案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 数据库转储到纯文本 (CSV) 备份
mysqldump - 将多个数据库从不同的 mysql 帐户转储到一个文件