如何将大型 MySql 备份文件拆分为多个文件?

Bri*_*nan 16 backup splitter mysql

我有一个 250 MB 的备份 SQL 文件,但新主机的限制仅为 100 MB ...

是否有程序可以让您将一个 SQL 文件拆分为多个 SQL 文件?

似乎人们回答了错误的问题......所以我会澄清更多:

我只有 250 MB 的文件,并且只有使用 phpMyAdmin 的新主机,目前数据库中没有数据。我需要将 250 MB 的文件上传到新主机,但有 100 MB 的 SQL 备份文件上传大小限制。我只需要将一个太大的文件拆分成多个文件,每个文件只包含完整的有效 SQL 语句(不能在两个文件之间拆分任何语句)。

小智 10

拆分备份文件的最简单方法是使用软件sqldumpsplitter,它允许您将 db 文件拆分为多个 db 文件。在这里下载

或者使用此终端命令。

split -l 600 ./path/to/source/file.sql ./path/to/dest/file-

这里,600 是您希望在拆分文件中包含的行数。两个参数分别是文件的源和目标。

注意:您必须检查拆分文件,不要拆分任何命令。

  • 感谢您提示正确的方向!但我建议使用“csplit”,而不是使用“split”。它不会在某个行号之后立即分割,例如,该行号可能位于“INSERT”值列表之间。您可以传递 _regex_ 来标识要分割的行。按以下方式使用它,**示例**: ` csplit -k dump.sql '/^CREATE TABLE .*/' '{900}'` 这将在每个 `create table ...` 语句之前分割转储文件。根据您的需要更改此设置。 (顺便说一句,我传递了 `{900}` 而不是 `{*}`,因为我收到错误_“csplit:*}:错误的重复计数”_,也许只是 MacOS 上的问题?) (2认同)

har*_*ymc 6

如何将 mysqldump 的输出拆分为较小的文件?

首先转储模式(它肯定适合 2Mb,不是吗?)

mysqldump -d --all-databases
Run Code Online (Sandbox Code Playgroud)

并恢复它。

之后只转储单独插入语句中的数据,因此您可以拆分文件并恢复它们,而无需在远程服务器上连接它们

mysqldump --all-databases --extended-insert=FALSE --no-create-info=TRUE
Run Code Online (Sandbox Code Playgroud)


小智 5

我编写了mysqldumpsplitter(shell 脚本),它按照指示以快速、简单的方式拆分数据库/表。查看如何从 mysqldump 中提取的所有可能用例。

sh mysqldumpsplitter.sh --source mysqldump-file.sql --extract DB --match_str database-name
Run Code Online (Sandbox Code Playgroud)