使用 mysqldump,我可以将我的数据库和表转储到单独的文件中。
我的问题是,mysqldump 中有没有办法将这些表文件分成更小的部分?
所以不是一个 10GB 的 .sql 文件,我会为同一张表获得十个 1GB 的 .sql 文件?
您可以使用 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
非常重要,因为它可以节省大量带宽
您可以将 @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。