0

使用 mysqldump,我可以将我的数据库和表转储到单独的文件中。

我的问题是,mysqldump 中有没有办法将这些表文件分成更小的部分?

所以不是一个 10GB 的 .sql 文件,我会为同一张表获得十个 1GB 的 .sql 文件?

4

2 回答 2

1

您可以使用 MySQL Dump 从查询中获取数据,但是当您需要将数据拆分为特定大小的块时,我总是发现这很难管理。

由于您需要 1Gb 文件,因此我将表拆分为 1Gb 段。

我已经使用INTO OUTFILE了,但是在这个阶段也可以使用 MySQL 转储

SELECT * FROM table
ORDER BY adminid ASC
INTO OUTFILE 'c:/table.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY

如果您使用的是 Windows,这确实缺少一个好的拆分实用程序,所以我建议使用 GNU Core Utilities 捆绑包http://gnuwin32.sourceforge.net/packages/coreutils.htm

安装后可以split在命令提示符下使用

cd C:\Program Files (x86)\GnuWin32\bin
split -C 1024m -d c:\table.csv c:\table.part_

如果您使用的是 Linux,那么您已经可以访问一个好的拆分工具。

如果你导出它们,你可能想在某个时候再次导入它们——这就是行尾的 .part_ 很重要的地方,因为 mysqlimport 试图找出要导入到的表名,. 可用于拆分表,但允许将多个文件导入到同一个数据库表中。

然后可以使用这些导入

mysqlimport --local --compress --user=username --password=password --host=dbserver.host --fields-terminated-by=, --fields-optionally-enclosed-by="\"" --lines-terminated-by="\n" databasename c:\table.csv

--local需要,否则 mysqlimport 想要在远程主机上查找文件

--compress非常重要,因为它可以节省大量带宽

于 2013-03-27T15:08:06.090 回答
1

您可以将 @jason 完整转储拆分为表和数据库。您可以使用mysql-dump-splitter提取您选择的表/数据库。此外,在转储过程中,您可以使用如下过滤器:

Dump all data for 2015:
mysqldump --all-databases --where= "DATEFIELD >= '2014-01-01' and DATEFIELD < '2015-01-01' " | gzip > ALLDUMP.2015.sql.gz

前提是您应该在所有表中都有 DATEFIELD 列!或者,您也可以指定 ID 列以限制转储仅提取指定范围的 ID。

于 2015-02-25T12:39:17.083 回答