How to use mysqldump for a portion of a table?

所以我只能导出这样的表:

mysqldump -u root -p db_name table_name > table_name.sql

有没有办法只导出一个包含 mysqldump 的表的一部分?例如,0-1,000,000行,1,000,000-2,000,000行,等等。

我应该用 Mysqldump还是查询来做这件事?

68269 次浏览
mysqldump -uroot -p db_name table_name --where='id<1000000'

或者你可以用

SELECT * INTO OUTFILE 'data_path.sql' from table where id<100000

在我的例子中,我执行以下命令:

SELECT *
INTO OUTFILE 'C:\Documents and Settings\Anton.Zarkov\Desktop\joomla_export\data_AZ.sql'
FROM `jos_glossary`
WHERE id>6000
  • 没有语法错误-查询通过。
    1. 结果是 NULL-没有写入任何行(我确定-最后一个 ID 是6458)
    2. 如果我重复查询 an error occurs => #1086 - File 'C:Documents and SettingsAnton.ZarkovDesktopjoomla_exportdata_AZ.sql' already exists
    3. 不幸的是,我找不到“现有的”文件在磁盘 C 的任何地方在哪里?

条件如下: PhpMyAdmin SQL Dump; 版本3.4.5; 主机: 本地主机; 服务器版本: 5.5.16; PHP 版本: 5.3.8

mysqldump --skip-triggers --compact --no-create-info --user=USER --password=PASSWORD -B DATABASE --tables MY_TABLE --where='SOME_COLUMN>=xxxx' > out.sql

转储的文件与使用 SQL select 的文件不同。 对于第2种方法,不能简单地使用: mysql database < table 将表转储到数据库中。

mysqldump -uroot -p db_name table_name --where'id<1000000' > yourdumpname.sql

Below query is to select from id range you can use Date _ create or any instead of 身份证

mysqldump --opt --host=dns --user=user_name --password=your_passwd db_name --tables table_name  --where "id > 1 and id < 100 " > /file_name.sql

代替 身份证

这个问题一如既往的流行,大多数人会发现这类问题,因为他们受制于 mysql 和 mysqldump 的单线程设计。
如果要导出数百万或数十亿行,可能需要几天(甚至几周)的时间,因此最终只能导出部分数据。

解决这个问题的一个快速方法是导出部分数据,如果您有一个数字键(比如自动增量 id) ,这种方法效果最好。
下面是一个 linux/unix 示例,说明如何以比正常快20-100倍的速度导出表。

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 的类型。
这种方法,有点精细,可以减少装载或出口一周出口到几个小时。

当通过网络执行此操作时——压缩会有很大帮助,同时忽略插入语句将有助于处理大数据上不可避免的错误 mysql 索引。使用“ mysql-f”加载数据可以进一步帮助避免在这种情况下停止。

P.S. never use the mysql options to add indexes and keys at the end on large tables.