楼主: yahle

mysql 如何快速的导入导出7G的数据库?

[复制链接]
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
11#
发表于 2013-1-15 20:53 | 只看该作者
zj511025 发表于 2013-1-15 13:18
使用下面的命令
select  .. into outfile
load data infile

兄弟,你是2005年注册的啊,老前辈了啊!

使用道具 举报

回复
论坛徽章:
5
咸鸭蛋
日期:2013-05-29 20:03:22奥迪
日期:2013-08-11 14:11:02Jeep
日期:2013-11-25 20:55:342014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
12#
发表于 2013-1-16 08:24 | 只看该作者
mchdba 发表于 2013-1-15 20:53
兄弟,你是2005年注册的啊,老前辈了啊!

呵呵,过奖,只是在数据库方面有点积累罢了!也喜欢数据库。之前用oracle,现在用mysql

使用道具 举报

回复
论坛徽章:
5
咸鸭蛋
日期:2013-05-29 20:03:22奥迪
日期:2013-08-11 14:11:02Jeep
日期:2013-11-25 20:55:342014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
13#
发表于 2013-1-16 15:40 | 只看该作者
使用下面的命令
select  .. into outfile
load data infile
关闭binlog
再调整
max_allowed_packet=64M
innodb_autoinc_lock_mode=2,如果有自增字段,速度快很多
bulk_insert_buffer_size=8M
innodb_log_buffer_size=8M
innodb_buffer_pool_size根据物理内存,尽可能的大
innodb_log_file_size
这些参数,会很快的,我曾经导过2000W的表(2.5g的文本数据文件),普通服务器,3-5分钟搞定
另外,记得在select into outfile的时候按照主键排序导出(因为innodb的存储特性需要),否则,如果数据无序,会很慢,慢得可能不止一个数据量级

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2013-1-19 12:38 | 只看该作者
本帖最后由 shicarl 于 2013-5-25 13:44 编辑

如果是汇总到一个数据库的不同表的话,如果源和目标表都是单独表空间存储的话,可以:
1.直接从原表中拷贝出独立表空间.ibd文件。如果需要多表同时操作,关注数据的一致性(加只读锁,或者干脆关闭服务)!
2.目标表如果不存在,则创建。目标表与原表应同名。
3.删除目标表表空间文件
alter table <table_name> discard tablespace;
可以看到其对应的.ibd文件被删除,此时查询该表会报如下错误:
ERROR 1030 (HY000): Got error -1 from storage engine
4.拷贝原表的.ibd到目标表存储目录,即.frm文件所在目录。
5.拷贝完毕后,添加目标表表空间文件
alter table <table_name> import tablespace;
6.完成,该表已经可用。

这样的话,基本消耗的时间仅仅是文件拷贝的时间了。

注意:以上方法存在问题,在MySQL中暂时还不支持独立表空间在不同实例间import,只能import回原来的表,而且要求原来的表没有重建或者truncate过。Percona Server支持上述操作。特此说明,敬请注意!!

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
15#
发表于 2013-1-20 22:02 | 只看该作者
shicarl 发表于 2013-1-19 12:38
如果是汇总到一个数据库的不同表的话,如果源和目标表都是单独表空间存储的话,可以:
1.直接从原表中拷贝 ...

这个可以去尝试一下,很好的功能啊!

使用道具 举报

回复
论坛徽章:
5
授权会员
日期:2006-09-01 20:36:36会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
16#
发表于 2013-1-21 09:47 | 只看该作者
可以使用kettle工具。

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2013-4-24 12:22 | 只看该作者
shicarl 发表于 2013-1-19 12:38
如果是汇总到一个数据库的不同表的话,如果源和目标表都是单独表空间存储的话,可以:
1.直接从原表中拷贝 ...

赞!     

使用道具 举报

回复
论坛徽章:
4
2012新春纪念徽章
日期:2012-01-04 11:54:462013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
18#
发表于 2013-4-24 16:50 | 只看该作者
mchdba 发表于 2013-1-20 22:02
这个可以去尝试一下,很好的功能啊!

   怎么好意思让人家做无用功哦

使用道具 举报

回复
论坛徽章:
0
19#
发表于 2016-10-22 19:00 | 只看该作者
zj511025 发表于 2013-1-15 13:18
使用下面的命令
select  .. into outfile
load data infile

使用load data infile 是不是必须特定格式的文本文件?
已有的sql能使用那种方式吗?
目前有一个测试sql,大概4.75GB.实际导入后看data文件夹大概有1.89GB.
有MyISAM和InnoDB, MySQL 5.6的.
能否多分享些经验?谢谢.

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2016-10-23 12:35 | 只看该作者
zj511025 发表于 2013-1-15 13:18
使用下面的命令
select  .. into outfile
load data infile

bulk_insert_buffer_size是针对MyISAM表的。目前开源的mydumper和myloader应该是最合适的,因为可以多线程去做。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表