将较大的 SQL 文件导入 MySQL
Posted
技术标签:
【中文标题】将较大的 SQL 文件导入 MySQL【英文标题】:Importing larger SQL files into MySQL 【发布时间】:2013-02-23 01:48:40 【问题描述】:我有一个 400 MB 的大型 SQL 备份文件。我正在尝试使用 WAMP → import 将该文件导入 mysql 数据库,但由于上传文件过大等多种原因,导入不成功.因此,我继续对 WAMP 下的 php 和 MySQL 设置的配置进行了一些更改。所做的更改是
Under WAMP->MySQL->my.ini
max_allowed_packet = 800M
read_buffer_size = 2014K
Under WAMP->PHP->PHP.ini
max_input_time = 20000
memory_limit = 128M
这是使用WAMP导入如此大的SQL文件的正确方法吗→import?
如果是这样,我是否对配置文件进行了正确的更改?上述变量允许的最大值是多少?
【问题讨论】:
你必须在命令行中导入它 对于大文件,请始终尝试使用终端/cmd .. 永远不要使用 UI。 【参考方案1】:最简单的解决方案是MySQL Workbench。只需将 .sql 文件文本复制到 MySQL Workbench 的查询窗口并执行即可。所有重命名的事情都会由它来完成。
【讨论】:
【参考方案2】:有类似的问题,但在 Windows 中。我试图弄清楚如何在 Windows 中打开一个大型 MySQL SQL 文件,这些是我必须采取的步骤:
转到下载网站 (http://dev.mysql.com/downloads/)。
下载 MySQL Community Server 并安装它(选择开发者或完全安装,它将安装客户端和服务器工具)。
从“开始”菜单打开 MySQL 命令行客户端。
输入您在安装时使用的密码。
在提示符mysql>中,输入:
CREATE DATABASE database_name;
USE database_name;
SOURCE myfile.sql
这应该会导入您的大文件。
【讨论】:
【参考方案3】:如果你在本地做,你必须做的三件事:
在您的 PHP 安装的 php.ini
或 php.cfg
中
post_max_size=500M
upload_max_filesize=500M
memory_limit=900M
或设置其他值。 重新启动 Apache。
或者
使用 PHP big dump tool。这是我见过的最好的。它是免费和开源的。
【讨论】:
如果数据库是10G怎么办?您应该将upload_max_filesize 更改为10G 吗?这不是好方法 @bksi 如果你有 10 GB 文件然后使用 bigdump 我已经通过 17 GB 数据库文件测试过 无需使用其他程序即可轻松导入。【参考方案4】:我认为最简单的方法是使用 MYSQL 命令行上传文件。
从终端使用命令访问 MySQL 命令行并运行 source
mysql --host=hostname -uuser -ppassword
source filename.sql
或直接从终端
mysql --host=hostname -uuser -ppassword < filename.sql
在提示符下。
【讨论】:
URL 错误,Internet 存档似乎没有可行的缓存副本 这已经在之前的答案中介绍过了。【参考方案5】:在 mysql 命令窗口中使用它:
mysql> use db_name;
mysql> source backup-file.sql;
【讨论】:
我更喜欢这个解决方案,因为它显示了运行脚本的输出。 您可以使用 source 命令或 \.命令:mysql> source file_name
mysql> \. file_name
Referrence
source
对 50GB 文件的性能好吗?
@wwwwan 是的,我刚刚成功获取了一个 2.6 Gb .sql 文件。只需要一点时间。您可能需要增加允许的数据包大小,请参阅this answer。【参考方案6】:
如果您在 Windows 上使用 source 命令,请记住使用 f:/myfolder/mysubfolder/file.sql
而不是 f:\myfolder\mysubfolder\file.sql
【讨论】:
正常的windows反斜杠在Windows XAMPP上没有问题。您的建议有任何证据吗?【参考方案7】:由于您声明(在对另一个人的回答的澄清评论中)您正在使用 MySQL Workbench,您可以尝试在那里使用“sql script”选项。这将避免使用命令行的需要(尽管我同意另一个答案,即爬上那匹马学习骑马很好)。
在 MySQL Workbench 中,转到文件菜单,然后选择“打开脚本”。这可能会花费很长时间,甚至可能会导致应用崩溃,因为它不是用来打开您描述的那么大的东西。
更好的方法是使用命令行。确保您的机器上安装了 MySQL 客户端。这意味着实际的 MySQL(不是 Workbench GUI 或 PhpMyAdmin 或类似的东西)。这里是a link describing the command-line tool。下载并安装后,在您的机器上打开一个终端窗口,您有两种选择可以将文件系统(例如备份文件)中的数据下载到目标数据库中。一种是使用'source'命令,另一种是使用
选项 1: 从您的备份文件所在的目录:
$mysql -u username -p -h hostname databasename < backupfile.sql
选项 2: 从您的备份文件所在的目录:
$mysql -u username -p -h hostname
[enter your password]
> use databasename;
> source backupfile.sql
显然,这两个选项都要求您有一个 SQL 备份文件。
【讨论】:
当“常规”命令行方法不起作用时,“源”方法对我有用。它还具有实时显示执行活动的好处。 ya source 方法对我来说至少可以显示查询的进度。但要花很多时间。有什么方法可以减少上传时间。【参考方案8】:在内部移动 sql 服务器时,我们遇到了同样的问题。
我们最终使用的一个很好的解决方案是将 sql 文件拆分为块。有几种方法可以做到这一点。使用
http://www.ozerov.de/bigdump/ 看起来不错(但没用过)
http://www.rusiczki.net/2007/01/24/sql-dump-file-splitter/ 使用了它,它非常有用,可以让结构摆脱混乱,您可以从那里拿走它。
希望这会有所帮助:)
【讨论】:
【参考方案9】:这个问题是几个月前的问题,但其他人正在寻找--
导入大文件的更简单方法是在文件夹 c:/wamp/apps/phpmyadmin3.5.2 中创建一个子目录“上传” 并在同一目录中的 config.inc.php 文件中编辑此行以包含文件夹名称 $cfg['UploadDir'] = '上传';
然后将传入的 .sql 文件放在文件夹 /upload 中。
在 phpmyadmin 控制台内部工作,转到新数据库并导入。您现在将看到从该文件夹上传文件的附加选项。选择正确的文件并耐心等待。它有效。
如果仍然出现超时错误,请尝试添加 $cfg['ExecTimeLimit'] = 0;到同一个 config.inc.php 文件。
我在导入用户名为 root 且密码与新服务器上的 root 密码不同的 .sql 文件时遇到了困难。我只是在导出 .sql 文件之前取消了密码,并且导入工作顺利。
【讨论】:
【参考方案10】:关于 phpMyAdmin 的第 1.16 项,他们说:
1.16 我无法上传大转储文件(内存、HTTP 或超时问题)。
从 2.7.0 版开始,导入引擎已重新编写,不应出现这些问题。如果可能,请将您的 phpMyAdmin 升级到最新版本以利用新的导入功能。
首先要检查(或要求您的主机提供商检查)是php.ini
配置文件中upload_max_filesize
、memory_limit
和post_max
_size 的值。所有这三个设置都限制了 PHP 可以提交和处理的最大数据大小。一位用户还说post_max_size
和memory_limit
需要大于upload_max_filesize。如果您的上传过大或您的托管服务提供商不愿意更改设置,有几种解决方法:
查看$cfg['UploadDir']
功能。这允许人们通过 scp、ftp 或您喜欢的文件传输方法将文件上传到服务器。然后 PhpMyAdmin 能够从临时目录中导入文件。更多信息可在本文档的配置中找到。
在上传前使用实用程序(例如BigDump)拆分文件。我们不支持此应用程序或任何第三方应用程序,但知道用户已成功使用它。
如果您有 shell(命令行)访问权限,请使用 MySQL 直接导入文件。你可以通过在 MySQL 中发出“source”命令来做到这一点:
source filename.sql;
【讨论】:
嗯……虽然这在技术上是可行的,但远非理想。【参考方案11】:您可以通过这种命令行方式导入大文件:
mysql -h yourhostname -u username -p databasename < yoursqlfile.sql
【讨论】:
@lbu 谢谢。但我从未在笔记本电脑中使用过 mysql 命令行。我总是使用 MySQL 工作台。有没有办法从工作台启动 mysql 命令行? 看起来是一个开始学习它的好借口,您无需成为专家即可使用它,您可以在工作台上做的所有事情都可以在命令行上正常工作 感谢您的回复。而且我知道我不需要成为专家就可以使用它。早些时候,我使用 putty 连接到服务器并使用命令mysql -h hostname -u username -D databasename -p
连接到 mysql shell。现在,我正在尝试连接到我自己的笔记本电脑,但无法连接。否则我很好。再次感谢。
对于超过 4 GB 的大型数据库需要很长时间。
这种方式可能会导致错误。最好的方法是使用mysql> source
(查看其他答案)【参考方案12】:
my.ini
max_allowed_packet = 800M
read_buffer_size = 2014K
PHP.ini
max_input_time = 20000
memory_limit = 128M
post_max_size=128M
【讨论】:
这篇文章被自动标记为低质量,因为它只是代码。您是否介意通过添加一些文本来扩展它来解释为什么这可以解决问题? 增加限制不是解决办法。使用 mysql 命令进行大型 sql 导入。【参考方案13】:您可以使用以下命令从任何 SQL 查询浏览器发出导入命令:
source C:\path\to\file\dump.sql
在查询窗口中运行上面的代码...并等待一会:)
这或多或少等于前面所述的命令行版本。主要区别在于它是从 MySQL 内部执行的。对于那些使用非标准编码的人来说,这也比使用命令行版本更安全,因为编码失败的风险更小。
【讨论】:
参考,任何好奇的人:dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html以上是关于将较大的 SQL 文件导入 MySQL的主要内容,如果未能解决你的问题,请参考以下文章