所以我只能导出一个这样的表:
mysqldump -u root -p db_name table_name > table_name.sql
有没有办法只使用mysqldump导出表的一部分?例如,0 - 1,000,000行,1,000,000 - 2,000,000行等
我应该使用 mysqldump 还是查询?
答案 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
NULL
- 没有写入任何行。 (我确定 - 最后一个ID是6458)n error occurs => #1086 - File 'C:Documents and SettingsAnton.ZarkovDesktopjoomla_exportdata_AZ.sql' already exists
条件是: 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选项在大型表的末尾添加索引和键。