Kre*_*ese 176
我四处寻找,只有这个解决方案帮助了我:
mysql -u root -p
set global net_buffer_length=1000000; --Set network buffer length to a large byte number
set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number
SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour
source file.sql --Import your sql dump file
SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete!
Run Code Online (Sandbox Code Playgroud)
答案在这里找到.
Bri*_*ell 27
您是否尝试过直接使用mysql命令行客户端?
mysql -u username -p -h hostname databasename < dump.sql
Run Code Online (Sandbox Code Playgroud)
如果你不能这样做,你可以通过谷歌找到任何数量的实用工具,帮助你将大型转储导入MySQL,如BigDump
小智 7
在最近的一个项目中,我们面临着处理和操作大量数据的挑战。我们的客户向我们提供了 50 个 CSV 文件,大小从 30 MB 到 350 MB 不等,总共包含大约 2000 万行数据和 15 列数据。我们的最终目标是将数据导入并操作到 MySQL 关系数据库中,以用于支持我们也开发的前端 PHP 脚本。现在,处理如此大或更大的数据集并不是最简单的任务,在处理它时,我们想花点时间分享一些在处理这样的大型数据集时应该考虑和知道的事情。
\n我可以\xe2\x80\x99再强调这第一步就够了!确保在导入之前花时间分析正在使用的数据。从长远来看,了解所有数据代表什么、哪些列与什么相关以及需要什么类型的操作将最终节省您的时间。
\n如果您继续尝试通过 PHPMyAdmin 等工具进行常规 CSV 插入,那么导入大型数据文件(例如我们使用的文件(以及更大的文件))可能会很困难。它不仅在许多情况下会失败,因为由于上传大小限制和服务器超时,您的服务器将\xe2\x80\x99无法处理与某些数据文件一样大的文件上传,而且即使它确实成功,该过程可能需要几个小时,具体取决于我们您的硬件。SQL 函数 LOAD DATA INFILE 是为了处理这些大型数据集而创建的,它将显着减少处理导入过程所需的时间。值得注意的是,这可以通过 PHPMyAdmin 执行,但您可能仍然遇到文件上传问题。在这种情况下,您可以手动将文件上传到您的服务器,然后从 PHPMyAdmin 执行(有关更多信息,请参阅他们的手册)或通过 SSH 控制台执行命令(假设您有自己的服务器)
\n LOAD DATA INFILE \'/mylargefile.csv\' INTO TABLE temp_data FIELDS TERMINATED BY \',\' ENCLOSED BY \'"\' LINES TERMINATED BY \'\\n\'\nRun Code Online (Sandbox Code Playgroud)\n无论大小数据库\xe2\x80\x99s总是好的花一点时间考虑您要为您的项目使用哪个数据库引擎。您将要了解的两个主要引擎是 MYISAM 和 InnoDB,每个引擎都有自己的优点和缺点。简而言之,需要考虑的事项(一般而言)如下:
\nMYISAM
\n数据库
\nMySQL 分析您的数据库设计/结构将成为影响其性能的一个重要因素。花些时间规划不同的字段并分析数据,找出最佳的字段类型、默认值和字段长度。您希望容纳适量的数据,并在数据不\xe2\x80\x99 无法保证时尽量避免使用 varchar 列和过大的数据类型。作为完成数据库操作后的一个附加步骤,您希望了解 MySQL 建议的所有不同字段的字段类型。您可以通过执行以下 SQL 命令来完成此操作:
\n ANALYZE TABLE my_big_table\nRun Code Online (Sandbox Code Playgroud)\n结果将是每列信息的描述,以及对数据类型类型和适当长度的建议。现在您不一定需要遵循这些建议,因为它们仅基于现有数据,但它可能会帮助您走上正确的轨道并让您思考
\n对于像这样大的数据集,根据需要对前端数据执行的操作来为数据创建适当的索引是非常重要的,但是如果您打算预先操作数据,请避免在数据上放置太多索引。它不仅会使您的 SQL 表更大,而且还会减慢某些操作的速度,例如列添加、减去和附加索引。对于我们的数据集,我们需要获取刚刚导入的信息并将其分解为几个不同的表以创建关系结构,以及获取某些列并将信息拆分为其他列。我们在我们知道可以帮助我们进行操作的最少列上放置了索引。总而言之,我们拿了一张包含 2000 万行数据的大表,并将其信息分成 6 个不同的表,其中包含主要数据以及基于现有内容新创建的数据。我们通过编写小型 PHP 脚本来解析和移动数据来完成所有这一切。
\n从编程的角度来看,使用大型数据库的一个重要部分是速度和效率。将所有数据放入数据库固然很棒,但如果您编写的用于访问数据的脚本很慢,那么\xe2\x80\x99 的意义何在?在处理大型数据集时,花时间了解脚本正在执行的所有查询并创建索引以尽可能帮助这些查询非常重要。分析查询正在执行的操作的一种方法是执行以下 SQL 命令:
\n EXPLAIN SELECT some_field FROM my_big_table WHERE another_field=\'MyCustomField\';\nRun Code Online (Sandbox Code Playgroud)\n通过将 EXPLAIN 添加到查询的开头,MySQL 将输出描述它尝试使用、确实使用了哪些索引以及如何使用它们的信息。我将这一点标记为\xe2\x80\x98找到平衡\xe2\x80\x99,因为虽然索引可以帮助你的脚本执行得更快,但它们也很容易让它运行得更慢。您需要确保索引需要的内容并且仅索引需要的内容。每个索引都会消耗磁盘空间并增加表的开销。每次对表进行编辑时,都必须重建该特定行的索引,并且这些行上的索引越多,所需的时间就越长。这一切都归结为创建智能索引、高效的 SQL 查询以及最重要的基准测试,因为您可以了解每个查询正在做什么以及执行该操作需要多长时间。
\n当我们处理数据库和前端脚本时,客户和我们都开始注意到需要更改的小事情,并且需要我们对数据库进行更改。其中一些更改涉及添加/删除列以及更改列类型。由于我们已经在数据上设置了许多索引,因此进行任何这些更改都需要服务器做一些认真的工作来保持索引到位并处理任何修改。在我们的小型 VPS 服务器上,一些更改需要长达 6 个小时才能完成\xe2\x80\xa6,这当然不利于我们快速开发。解决方案?关闭索引!有时最好关闭索引,进行更改,然后重新打开索引\xe2\x80\xa6。尤其是当您需要进行很多不同的更改时。关闭索引后,更改只需要几秒钟到几分钟而不是几小时。当我们对更改感到满意时,我们只需重新打开索引即可。这当然需要相当长的时间来重新索引所有内容,但它至少能够一次性重新索引所有内容,从而减少了一项一项更改所需的总时间。这里\xe2\x80\x99s如何做:
\nALTER TABLE my_big_table DISABLE KEYALTER TABLE my_big_table ENABLE KEY为了使数据库和脚本快速运行,不要\xe2\x80\x99忽略你的服务器。您的硬件需要与数据库和脚本一样多的关注和调整。特别是\xe2\x80\x99,查看 MySQL 配置文件以了解可以进行哪些更改以更好地提高其性能非常重要。
\n一开始使用 SQL 可能会很困难,而处理极大的数据集只会让它变得更加困难。当涉及到大型数据集时,不要害怕去找那些知道自己在做什么的专业人士。最终您将获得卓越的产品、更快的开发和更快的前端性能。当谈到大型数据库时,有时\xe2\x80\x99需要专业人士经验丰富的眼睛才能发现所有可能降低数据库性能的小警告。
\n