Oracle-Mysql数据迁移测试
浏览:1519次 出处信息
1.分表,单个表数据量控制在5G(个人随意指定)
2.找一台中转服务器,需要安装oracle和mysql的客户端,这台服务器需要从源oracle数据库上导出数据,然后导到目标mysql服务器中
3.通过sqluldr从源oracle把数据导出来,导成txt文件
mytest:/bak1/tmp_dy>$sqluldr2 user='test/test@oradb' query='select * from dm_mining_wm_0002' text=mysql file=/test/tmp_dy/dm_mining_wm_0002.txt
0 rows exported at 2010-06-03 14:03:17, size 0 MB.
1000000 rows exported at 2010-06-03 14:03:28, size 108 MB.
2000000 rows exported at 2010-06-03 14:03:39, size 216 MB.
3000000 rows exported at 2010-06-03 14:03:51, size 328 MB.
4000000 rows exported at 2010-06-03 14:04:05, size 436 MB.
。。。。。
24000000 rows exported at 2010-06-03 14:08:23, size 2632 MB.
25000000 rows exported at 2010-06-03 14:08:39, size 2740 MB.
26000000 rows exported at 2010-06-03 14:08:50, size 2852 MB.
27000000 rows exported at 2010-06-03 14:09:00, size 2960 MB.
28000000 rows exported at 2010-06-03 14:09:16, size 3068 MB.
28152179 rows exported at 2010-06-03 14:09:17, size 3088 MB.
output file /test/tmp_dy/dm_mining_wm_0002.txt closed at 28152179 rows, size 3088 MB.
test86:/bak1/tmp_dy>$
4.检查参数目标mysql服务器上的max_binlog_cache_size,需要设置的比生成文件要大,这边设置5G。
$mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1542050
Server version: 5.1.45-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@(none) 02:13:30>show variables like '%binlog%';
+-----------------------------------------+------------+
| Variable_name | Value |
+-----------------------------------------+------------+
| binlog_cache_size | 32768 |
| binlog_direct_non_transactional_updates | OFF |
| binlog_format | STATEMENT |
| innodb_locks_unsafe_for_binlog | OFF |
| max_binlog_cache_size | 5368709120 |
| max_binlog_size | 524288000 |
| sync_binlog | 0 |
+-----------------------------------------+------------+
7 rows in set (0.00 sec)
--相关参数说明
Binlog_cache_use状态变量显示了使用该缓冲区(也可能是临时文件)保存语句的事务的数量。
Binlog_cache_disk_use状态变量显示了这些事务中实际上有多少必须使用临时文件。这两个变量可以用于将binlog_cache_size调节到足够大的值,以避免使用临时文件。
max_binlog_cache_size(默认4GB)可以用来限制用来缓存多语句事务的缓冲区总大小。如果某个事务大于该值,将会失败并 回滚。
5.通过load data远程导到目标mysql服务器上。
/bak1/tmp_dy>$mysql -h 192.168.0.1 -P 3306 -u mytest -pmytest --local-infile=1 --远程导入需要加上的参数
01:41:48>LOAD DATA LOCAL INFILE '/test/tmp_dy/dm_mining_wm_0002.txt'
-> ignore INTO TABLE mytest.user_bought_shops_0002
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Query OK, 28173117 rows affected, 749 warnings (8 min 17.01 sec)
Records: 28173117 Deleted: 0 Skipped: 0 Warnings: 748
6.查看目标mysql服务器文件大小
$ls -lht user_bought_shops_0002.ibd
-rw-rw---- 1 mysql dba 4.5G Jun 3 14:21 user_bought_shops_0002.ibd --数据和索引,4.5G左右
约3000万记录数,约3000M的文件,单个进程远程导到mysql服务器需要8分钟,还算凑合。
简单测试过,直接远程客户端导到mysql服务器上,和先把文件copy到mysql服务器上,本地做导入的效率相差不大,看来瓶颈不在于网络上,注:仅仅记录测试结果,效率和mysql硬件环境,特别是IO效率有很大关系,不存在太多的数据参考价值。
mysql环境:5.1.45版本,innodb 引擎。
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Mysql 5 数据库 中文乱码问题的解决
后一篇:Mysql where vs having >>
文章信息
- 作者:Incessant 来源: Incessant
- 标签: 数据迁移
- 发布时间:2010-06-03 22:22:12
近3天十大热文
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] android 开发入门
- [59] 【社会化设计】自我(self)部分――欢迎区
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成