Mycat实战之数据迁移(oracle -- mysql)
1、案例场景:
Mycat 后面接一个 Oracle 实例与一个 MySQL 实例,假设用户表,订单表,转账记录表,
Oracle 字符集为 GBK 的,MySQL 字符集则要求 UTF8的
完成用户表与订单表到 MySQL 的迁移过程,要求导数据是通过命令行连接 Mycat来完成的
同时操作如下过程:
1. 在Mycat 里查询转账记录表,查询 OK
2. 在Mycat 里查询用户表,查询 OK
2、环境准备
oracle 11gr2 10.10.0.23 1521
mysql 5.6 192.168.2.130 3306
--oracle 与 mysql 具体搭建,之前都有
现有环境,直接测试功能,mysql 环境都是 ok.配置 oracle相关环境
2.1 oracle环境配置
#创建 tablespace
SQL> create tablespace mycat DATAFILE '/home/oracle/app/oradata/orcl/mycat.dbf'
SIZE 200m autoextend off;
Tablespace created.
#创建用户以及授权
SQL> create user mycat identified by mycat default tablespace mycat;
User created.
SQL> grant resource,connect to mycat;
Grant succeeded.
#验证数据库字符集
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
2.2 mysql 环境配置
mysql> show variables like '%character%';
+--------------------------+-----------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /u01/my3306/share/charsets/ |
+--------------------------+-----------------------------+
8 rows in set (0.02 sec)
3 mycat 逻辑库配置,增加 oracle 以及 mysql 相关信息
3.1 schema.xml 增加 oracle 信息
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="O_USER" primaryKey="ID" dataNode="ora_dn1" needAddLimit="false"/>
<table name="O_ORDER" primaryKey="ID" dataNode="ora_dn1" needAddLimit="false"/>
<table name="O_TRADERS" primaryKey="ID" dataNode="ora_dn1" needAddLimit="false"/>
<table name="M_USER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<table name="M_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<table name="M_TRADERS" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>
<!--######### oracle 单节点 ########-->
<dataNode name="ora_dn1" dataHost="10.10.0.23" database="orcl" />
<!--######### mysql 三个分片 ########-->
<dataNode name="dn1" dataHost="mysqlserver" database="db1" />
<dataNode name="dn2" dataHost="mysqlserver" database="db2" />
<dataNode name="dn3" dataHost="mysqlserver" database="db3" />
<!--######### TESTDB ########-->
<dataHost name="oracleDB" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="oracle" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select 1 from dual</heartbeat>
<connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
<writeHost host="hostO1" url="jdbc:oracle:thin:@10.10.0.23:1521:orcl" user="mycat" password="mycat >
</writeHost>
</dataHost>
<dataHost name="mysqlserver" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.2.130:3306" user="root" password="root123">
</writeHost>
</dataHost>
</mycat:schema>
3.2 启动 mycat
#加载oracle的lib包
#下载 ojdbc14.jar
#拷贝到/usr/local/mycat/lib
#schema.xml 中 oralce 的 dbDriver 改成 jdbc
#启动 mycat 以及查看日志
/usr/local/mycat/bin/mycat start
cd /usr/local/mycat/logs
3.3 验证mycat逻辑库中是否存在oracle和mysql的表信息
[mysql@mycat ~]$ mysql -utest -ptest -h192.168.2.136 -P8066
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.8-mycat-1.5.1-RELEASE-20161130213509 MyCat Server (OpenCloundDB)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql>
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1 row in set (0.00 sec)
mysql> use TESTDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables like 'o_%';
+------------------+
| Tables in TESTDB |
+------------------+
| o_order |
| o_traders |
| o_user |
+------------------+
3 rows in set (0.00 sec)
mysql> show tables like 'm_%';
+------------------+
| Tables in TESTDB |
+------------------+
| m_order |
| m_traders |
| m_user |
+------------------+
3 rows in set (0.00 sec)
4.mycat端创建oracle以及 mysql表并插入数据
4.1 mycat 端创建 oracle 表
mysql> CREATE TABLE O_USER(ID number, UC_NAME VARCHAR(64),CREATE_TIME DATE);
Query OK, 0 rows affected (0.98 sec)
OK!
mysql> CREATE TABLE O_ORDER(ID number,UC_ID number,SHOP_NAME VARCHAR(64),CREATE_TIME DATE);
Query OK, 0 rows affected (0.06 sec)
OK!
mysql> CREATE TABLE O_TRADERS(ID number,UC_ID number,ORDER_ID number, FEE number,TRADE_STATUS char(1),CREATE_TIME DATE);
Query OK, 0 rows affected (0.05 sec)
OK!
#oracle 实例端验证表创建
[oracle@localhost lib]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 19 18:25:37 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> conn mycat/mycat
Connected.
SQL>
SQL>
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
O_USER
O_ORDER
O_TRADERS
4.2 mycat端插入数据到 oracle 表
#O_USER
INSERT INTO O_USER(ID,UC_NAME,CREATE_TIME)VALUES(1,'fish',SYSDATE);
INSERT INTO O_USER(ID,UC_NAME,CREATE_TIME)VALUES(2,'chinesern',SYSDATE);
INSERT INTO O_USER(ID,UC_NAME,CREATE_TIME)VALUES(3,'hao',SYSDATE);
#O_ORDER
INSERT INTO O_ORDER(ID,UC_ID,SHOP_NAME,CREATE_TIME)VALUES(1,1,'mycat 技术权威指南书籍',SYSDATE);
INSERT INTO O_ORDER(ID,UC_ID,SHOP_NAME,CREATE_TIME)VALUES(2,2,'mysql 高性能第三版',SYSDATE);
INSERT INTO O_ORDER(ID,UC_ID,SHOP_NAME,CREATE_TIME)VALUES(3,3,'MySQL 排错指南',SYSDATE);
#O_TRADERS
INSERT INTO O_TRADERS(ID,UC_ID,ORDER_ID,FEE,TRADE_STATUS,CREATE_TIME)VALUES(1,1,1,59,1,SYSDATE);
INSERT INTO O_TRADERS(ID,UC_ID,ORDER_ID,FEE,TRADE_STATUS,CREATE_TIME)VALUES( 2,2,2,119,1,SYSDATE);
INSERT INTO O_TRADERS(ID,UC_ID,ORDER_ID,FEE,TRADE_STATUS,CREATE_TIME)VALUES(3,3,3,120,1,SYSDATE);
4.2 mycat端验证
4.3 ORACLE端验证
可以看到, 出现了乱码的情况
解决方案:
#设置客户端字符集
export NLS_LANG=AMERICAN_AMERICA.UTF8
#设置secureCRT字符集为 UTF-8
乱码情况已经解决
5、 mycat端导出oracle数据
#导出数据
mysql -h192.168.2.136 -P8066 -u test -ptest TESTDB -e "select * from o_user" >/tmp/o_user.txt
mysql -h192.168.2.136 -P8066 -u test -ptest TESTDB -e "select * from o_traders" >/tmp/o_traders.txt
mysql -h192.168.2.136 -P8066 -u test -ptest TESTDB -e "select * from o_order" >/tmp/o_order.txt
#验证数据
cat /tmp/o_user.txt && cat /tmp/o_traders.txt && cat /tmp/o_order.txt
6 数据导入到mysql
6.1 mycat端创建 mysql表
CREATE TABLE M_USER(ID int, UC_NAME VARCHAR(64),CREATE_TIME DATETIME);
CREATE TABLE M_ORDER(ID int,UC_ID int,SHOP_NAME VARCHAR(64),CREATE_TIME DATETIME);
CREATE TABLE M_TRADERS(ID int,UC_ID int,ORDER_ID int, FEE int,TRADE_STATUS char(1),CREATE_TIME DATETIME);
6.2 mycat端导入数据到 mysql
load data infile '/tmp/o_user.txt' into table M_USER;
load data infile '/tmp/o_order.txt' into table M_ORDER;
load data infile '/tmp/o_traders.txt' into table M_TRADERS;
这里遇到一个问题:分库策略需要带上字段属性,需要根据分库
mysql> load data infile '/tmp/o_user.txt' into table M_USER;
ERROR 1064 (HY000): partition table, insert must provide ColumnList
解决方案:重新导出数据, 去掉列名
#重新导出
mysql -h192.168.2.136 -P8066 -u test -ptest TESTDB -N -e "select * from o_user" >/tmp/o_user.txt
mysql -h192.168.2.136 -P8066 -u test -ptest TESTDB -N -e "select * from o_traders" >/tmp/o_traders.txt
mysql -h192.168.2.136 -P8066 -u test -ptest TESTDB -N -e "select * from o_order" >/tmp/o_order.txt
#导入
load data infile '/tmp/o_user.txt' into table M_USER(ID,UC_NAME,CREATE_TIME);
load data infile '/tmp/o_order.txt' into table M_ORDER(ID,UC_ID,SHOP_NAME,CREATE_TIME);
load data infile '/tmp/o_traders.txt' into table M_TRADERS(ID,UC_ID,ORDER_ID,FEE,TRADE_STATUS,CREATE_TIME);
6.3 mycat端验证数据
Mycat实战之数据迁移(oracle -- mysql)的更多相关文章
- Oracle数据迁移至MySQL
ORACLE DB: 11.2.0.3.0 MYSQL DB: 5.5.14 因项目需求,需要将ORACLE生产中数据迁移至MYSQL数据库中作为初始数据,方法有如下几种: 1.ORACLE OGG ...
- 如何将MongoDB数据库的数据迁移到MySQL数据库中
FAQ v2.0终于上线了,断断续续忙了有2个多月.这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见).构建(前端.后台.数据库.服务器部署),也是 ...
- Mysql ---Sqlserver数据迁移到Mysql(Mysql建表迁移数据)
1 试用了MysqlWorkBench的数据迁移功能 以为能实现:建立跟Sqlserver一样的表结构和视图的功能,sqlserver的数据迁移到mysql 实际上发现:即使勾选了表和视图,实际上却只 ...
- oracle数据迁移到mysql
今天遇到需求要把oracle的部分数据搬到mysql,用java代码抓数据,然后拼接成sql语句,然后用navicat执行sql脚本的方法,导入数据库. import oracle.jdbc.driv ...
- MYCAT实战之分片迁移
实践扩容 1.要求: travelrecord 表定义为10个分片,尝试将10个分片中的 2 个分片转移到第二台MySQL上, 并完成记录要求,最快的数据迁移做法,中断业务时间最短 2.针对分片以及迁 ...
- Oracle中的数据迁移到Mysql数据库中的方式Navicat premium工具
1.安装 Navicat premium工具 2.破解 Navicat premium工具 3.连接需要相互迁移的两个库Mysql和Oracle(可以是远程的或者本机的数据库都是可以的) 4.连接上之 ...
- 【sqlserver】【mysql】用NavicatPremium12把sqlserver的数据迁移到mysql上
1.在NavicatPremium的mysql,选择到迁移到的表,然后右键[导入向导]
- MySQL------如何将SQLServer文件数据迁移到MySQL
转载: http://blog.csdn.net/zhangdaiscott/article/details/46412453
- mssql与mysql 数据迁移
概要: mssql向mysql迁移的实例,所要用到的工具bcp和load data local infile. 由于订单记录的数据是存放在mssql服务器上的,而项目需求把数据迁移到mysql ser ...
随机推荐
- js获取一周的日期范围
function getWeek() { this.nowTime = new Date(); this.init = function() { this.dayInWeek = this.nowTi ...
- Huffman编码实现文件的压缩与解压缩。
以前没事的时候写的,c++写的,原理很简单,代码如下: #include <cstdio> #include <cstdlib> #include <iostream&g ...
- react-hooks: CSSProperties
1.定义变量 const divStyle: React.CSSProperties = { width: "11rem", height: "7rem", b ...
- Chrome字体变粗
如图.解决方案,看看CSS中用了什么字体,卸载某个字体. 因为我装了一个新的字体,CSS中有这个字体的网页都会变粗.删掉这个字体就恢复正常了
- [置顶]
【机器学习PAI实践六】金融贷款发放预测
一.背景 很多农民因为缺乏资金,在每年耕种前会向相关机构申请贷款来购买种地需要的物资,等丰收之后偿还.农业贷款发放问题是一个典型的数据挖掘问题.贷款发放人通过往年的数据,包括贷款人的年收入.种植的作物 ...
- OpenCV中阈值(threshold)函数: threshold 。
OpenCV中提供了阈值(threshold)函数: threshold . 这个函数有5种阈值化类型,在接下来的章节中将会具体介绍. 为了解释阈值分割的过程,我们来看一个简单有关像素灰度的图片,该图 ...
- java如何填写简历?(干货篇)
化身孤岛的鲸不才 - 十三夜之月 一份优秀的简历不一定能帮你找到一份满意的工作,但能大大提升你的面试机会. 不容否认,简历是对你的能力.教育和经历的一份简要信息概述. 简历中应该突出你最核心的 ...
- linux操作系统安全防护
Linux系统攻防对抗实践 一.实践内容 在Metasploit渗透攻击框架软件中寻找一个针对Linux系统服务的渗透攻击模块,在网络安全攻防实验环境中部署有漏洞的环境(如渗透利用第三方网络服务,需要 ...
- 非常好用的css代码格式化工具
http://tool.lanrentuku.com/cssformat/ 可以横向排列和竖向排列,感谢互联网,让我找到你了.
- PHP 页面编码声明方法详解(header或meta)(转)
编码格式有两种,一种是php文件本身的编码格式,如 editplus之类的编辑器在保存文件的时候允许你指定文件编码格式:另一种是php输出的文本的编码格式,这个信息只对浏览器生效,方法为<?ph ...