使用mysqldump,我可以将数据库和表转储到单独的文件中。
我的问题是,mysqldump中是否有办法将这些表格文件拆分成较小的部分?
因此,对于同一个表,我会得到10个1GB的.sql文件,而不是一个10GB的.sql文件?
答案 0 :(得分: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,那么您已经可以访问一个好的split util。
如果你导出它们,你可能希望在某个时候再次导入它们 - 这就是行尾的.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
至关重要,因为它可以节省大量带宽
答案 1 :(得分: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。