如何将mysqldump用于表的一部分?

时间:2011-04-14 03:43:43

标签: mysql mysqldump

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

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

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

我应该使用 mysqldump 还是查询?

7 个答案:

答案 0 :(得分:112)

mysqldump -uroot -p db_name table_name --where='id<1000000'

或者您可以使用

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

在我的情况下,我执行了这个:

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. 如果我重复查询n error occurs => #1086 - File 'C:Documents and SettingsAnton.ZarkovDesktopjoomla_exportdata_AZ.sql' already exists
    3. 很遗憾,我无法在磁盘C上找到“现有”文件。它在哪里?

条件是: phpMyAdmin SQL转储;版本3.4.5; host:localhost;服务器版本:5.5.16; PHP版本:5.3.8

答案 4 :(得分:0)

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

答案 5 :(得分:0)

下面的查询是从ID范围中进行选择,您可以使用 date_created 或任何代替 id

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

ex:--where="date_created > '2019-01-18' "->插入了 id

答案 6 :(得分:0)

这个问题一如既往,大多数人会发现这类问题,因为它们遭受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的类型。
这种方法经过改进,可以将1周出口的负荷或出口减少到几个小时。

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

P.S。永远不要使用mysql选项在大型表的末尾添加索引和键。