数据库、表复制速度比较

有时候我们需要把一个数据库、表复制到另外一个数据库、表。当数据量很大的时候,会消耗很多的执行时间。下面总结了一下我比较常用的几种方法。

总结:
方法一和方法二比较常用,但百万级数据要使用load data 命名快的多。方法三最快最强但掌握略有点难度

一、导出数据库文件在导入进数据库(适合不同部门或个人之间的数据传递)
导出格式可以是sql ,excel,txt等都可以,因为这些格式都支持再次导入。
导出导入的方法可以使用管理工具进行鼠标操作,或者使用导出命令语句执行导出。

当导入时数文件很大,比如200w的数据文件,则不建议使用管理工具了,因为读取写入所需时间得好几个小时去了。建议使用mysql语句导入,甚至可以1分钟全部导入成功。比如 LOAD DATA INFILE “/home/mydata.txt” INTO TABLE t_user CHARACTER SET gbk FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
Fields Terminated By ‘,’ Enclosed By ‘"’ Escaped By '"'表示每个字段用逗号分开,内容包含在双引号内,Lines Terminated By '\r\n’表示每条数据用换行符分开

二、直接通过数据库的连接工具复制整个数据库、表(适合开发人员、查询数据)
以连接工具SQLyog为例
1.选中需要复制的数据库
2.右击菜单,第一个选择 将数据库复制到不同的主机/数据库。这里支持同一台机器上的数据库复制,也支持不是同一台机器上的数据库复制如本地库复制到远程测试机数据库
数据库、表复制速度比较
3.下一步界面中, 只需要对右边第一个下拉选择目标数据库,其他默认即可。点击下一步即可开始复制。
数据库、表复制速度比较

其他说明:
1.目标数据库需提前 新建连接 下拉才能看到哟(也就是下拉出来的都是已连接历史记录), 数据库/ 表 名称如果目标库里面已存在则覆盖没有则会被新建。
2.左边默认勾选了整个数据库的表,视图,函数等,如果第一步选择是某一张表右键则此界面也只会选中该表,下拉可以看到被单独选中的此表。
3.右边下面两个选择自行按需勾选。结构唯一 表示只复制数据库和空表无任何数据。
4.下一步复制会出现复制进度条,数据越大时间越久。如果报错则会中止,报错之前的都会被成功复制。若报错建议先只勾选左边的表,复制表完成后勾去表勾选剩下的视图存储过程等

其他连接管理工具也有类似的功能,比如navicat
数据库、表复制速度比较
后续步骤与上面SQLyog类似,不在说明了。

三、通过ETL等数据工具(适合大数据库定时跑任务)
ETL工具是用于数据处理的专业软件工具,也是支持两个不同机器的数据库之间的(可定时执行、抽取增量)复制以及数据过滤转换运算等功能。比较推荐是Kettle水壶,因为是开源免费的,其他的国外国内软件有也很多,可以网上查询有哪些。至于Kettle的使用教程网上也很多不多做说明了。