Oracle-Mysql数据迁移测试(收藏)

最近接到了大量的需求,需要每天定时的从oracle导到Mysql生产服务器上,数据量还比较大,大概在5亿,90G左右,数据量太大了,需要进行分表,小表跑的快,失败的几率也小一些。
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 引擎。
转于: http://xujt82.spaces.live.com/blog/cns!1EB2C64171792704!611.entry

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年11月    »
123
45678910
11121314151617
18192021222324
252627282930
搜索
标签列表
网站分类
最新留言
    文章归档
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.闽ICP备11018667号-2