所以我只能导出这样的表:
mysqldump -u root -p db_name table_name > table_name.sql
有什么办法可以用mysqldump导出表的一部分?例如,0-1,000,000行,1,000,000-2,000,000行,等等。
我应该使用mysqldump还是查询来执行此操作?
Answers:
mysqldump -uroot -p db_name table_name --where='id<1000000'
或者你可以使用
SELECT * INTO OUTFILE 'data_path.sql' from table where id<100000
-t
和> dump_file_name.dump
,所以它应该像;mysqldump -t -uroot -p db_name table_name -w"id<1000000" > file_name.dump
--where='name="foo"'
就我而言,我已经执行了:
SELECT *
INTO OUTFILE 'C:\Documents and Settings\Anton.Zarkov\Desktop\joomla_export\data_AZ.sql'
FROM `jos_glossary`
WHERE id>6000
NULL
-没有写入行。(我确定-最后的ID是6458)n error occurs => #1086 - File 'C:Documents and SettingsAnton.ZarkovDesktopjoomla_exportdata_AZ.sql' already exists
条件是: phpMyAdmin SQL Dump;版本3.4.5; 主机:localhost; 服务器版本:5.5.16; PHP版本:5.3.8
mysqldump -uroot -p db_name table_name --where'id<1000000' > yourdumpname.sql
=
where选项dev.mysql.com/doc/refman/8.0/en/…(与5.7 dev.mysql.com/doc/refman/5.7/en相同)/…)。替代方法是--where 'condition'
,--w'condition'
但您当前的版本--where'condition'
提供mysqldump: unkown option '--wherecondition'
。如果特定版本存在差异,请指定条件。
这个问题一如既往地是当前的,大多数人会发现这类问题,因为它们受到mysql和mysqldump的单线程设计的困扰。
如果您有数百万或数十亿的行,则导出可能需要几天(甚至几周)的时间,因此最终只能导出部分数据。
解决此问题的快速方法是导出部分数据,如果您拥有数字键(例如自动增量ID),这将是最好的选择。
下面是一个关于如何以比正常情况下快20到100倍的速度导出表的linux / unix示例。
Assumed column "id" is from 1 to 10000000
Assumed cpu has 16 threads
Assumed disk is an ssd or nvme
seq 0 1000 | xargs -n1 -P16 -I{} | mysqldump -h localhost --password=PASSWORD --single-transaction DATABASE TABLE --where "id > {}*10000 AND id < {}*10000+10000" -r output.{}
上面的代码将运行16个线程,大约可以减少导出到正常线程的1/10的时间。它创建16个文件,这些文件也可以并行加载,最多可以加载10次。
在强大的服务器上,我最多使用150个并行线程,这取决于您正在运行的磁盘和cpu的类型。
这种方法经过一些改进,可以将1周出口的负载或出口减少到几个小时。
通过网络执行--compress可以有很大帮助,忽略插入语句也将有助于处理错误的mysql索引,这对于大数据是无法避免的。使用“ mysql -f”加载数据进一步有助于避免在这种情况下停止。
PS绝不使用mysql选项在大型表的末尾添加索引和键。
--skip-create-options
并且可能--skip-add-drop-table
只是为了安全起见。否则,您将从所有现有表中删除所有行。