数据迁移:从mysql迁移到OceanBase
2021/12/28 2:15:12
本文主要是介绍数据迁移:从mysql迁移到OceanBase,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 工具准备
mysqldump可以使用mysql自带的mysqldump。datax需要下载并编译。编译datax需要maven,使用maven需要java环境,所以。。。
1.1 安装openjdk
yum install java-1.8.0-openjdk -y yum install java-1.8.0-openjdk-devel.x86_64 -y
1.2 部署maven
从Apache官网下载:https://maven.apache.org/download.cgi
wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.zip --no-check-certificate mkdir /usr/local/maven unzip apache-maven-3.8.4-bin.zip -d /usr/local/maven ll /usr/local/maven
1.3 配置环境变量
vi .bash_profile # 新增下面几行 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64 export JRE_HOME=$JAVA8_HOME/jre export MAVEN_HOME=/usr/local/maven export PATH=$PATH:$MAVEN_HOME/bin:$JAVA_HOME/bin source .bash_profile
1.4 配置maven镜像源为阿里镜像源
修改配置文件settings.xml
,文件在/usr/local/maven/conf
中。
<mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <name>aliyun-public</name> <url>https://maven.aliyun.com/repository/public/</url> </mirror> <mirror> <id>aliyun-spring</id> <mirrorOf>spring</mirrorOf> <name>aliyun-spring</name> <url>https://maven.aliyun.com/repository/spring</url> </mirror>
1.5 编译 DataX 可执行二进制文件
按以下步骤编译 DataX 可执行二进制文件:
运行以下命令,下载源代码。
git clone https://github.com/alibaba/DataX.git 速度慢的可以从gitee拉取,或者使用别人打包好的。 git clone https://gitee.com/yongfuxie/DataX.git
注释 DataX/pom.xml 文件中的以下内容,其他组件也可能遇到问题,遇到时从pom文件删除即可
<module>oscarwriter</module> <module>mongodbreader</module> <module>mongodbwriter</module>
运行以下命令,使用 Maven 将 DataX 打包。
$ cd {DataX_source_code_home} $ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
生成的文件在target目录下
tar zxvf datax.tar.gz mv datax /usr/local/ cd /usr/local/datax/
2. 使用mysqldump迁移数据
与mysql之间的迁移没什么不同,如果只迁移表结构,指定-d
参数
-d, --no-data No row information.
现在全量迁移一个库:
mysqldump -h 127.0.0.1 -uroot -proot123 -d lcxtest > lcxtest_nodata.sql mysqldump -h 127.0.0.1 -uroot -proot123 lcxtest > lcxtest.sql
把文件传到observer的机器上,或者在本地连接observer集群:
mysql --no-defaults -h192.168.32.111 -uroot@test_tenant#obcluster -P2883 -proot13 -Dlcxtest
导入时会报错,因为有表用了latin1字符集,修改掉。
sed -i 's/CHARACTER\ SET\ latin1//g' lcxtest_nodata.sql mysql --no-defaults -h192.168.32.111 -uroot@test_tenant#obcluster -P2883 -proot13 -Dlcxtest source lcxtest_nodata.sql
仍然会有报错,影响不大,建表语句是正确的
看一下表已经创建出来了。
如果是连数据一起导入,操作相同。
看下数据:
数据迁移成功。
3. 使用datax迁移数据
mysql 创建datax用户,并赋予了all,使用它来迁移数据。(mysql版本5.7)
注意修改相关的配置
{ "job": { "setting": { "speed": { "channel": 4 }, "errorLimit": { "record": 0, "percentage": 0.1 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "datax", "password": "root123", "column": [ "*" ], "connection": [ { "table": [ "lcxtest1" ], "jdbcUrl": ["jdbc:mysql://192.168.32.130:3306/lcxtest?useUnicode=true&characterEncoding=utf8&useSSL=false"] } ] } }, "writer": { "name": "oceanbasev10writer", "parameter": { "obWriteMode": "insert", "column": [ "*" ], "preSql": [ "truncate table lcxtest1" ], "connection": [ { "jdbcUrl": "||_dsc_ob10_dsc_||obcluster:test_tenant||_dsc_ob10_dsc_||jdbc:oceanbase://192.168.32.111:2883/lcxtest?useLocalSessionState=true&allowBatch=true&allowMultiQueries=true&rewriteBatchedStatements=true", "table": [ "lcxtest1" ] } ], "username": "root", "password":"root123", "writerThreadCount":10, "batchSize": 1000, "memstoreThreshold": "0.9" } } } ] } }
这里格式是 集群:租户
删除已经迁移的四张表
迁移之前需要在ob端创建相应的表结构。
source lcxtest_nodata.sql
启动datax
./datax.py ../job/mysql2ob.json
表迁移成功。
第二张表使用同样的方式,修改配置文件中的表名字即可。
第三涨使用csv格式来导入到OceanBase。
{ "job": { "setting": { "speed": { "channel": 4 }, "errorLimit": { "record": 0, "percentage": 0.1 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "datax", "password": "root123", "column": [ "*" ], "connection": [ { "table": [ "lcxtest1" ], "jdbcUrl": ["jdbc:mysql://192.168.32.130:3306/lcxtest?useUnicode=true&characterEncoding=utf8&useSSL=false"] } ] } }, "writer": { "name": "txtfilewriter", "parameter": { "path": "/tmp/lcxtest3", "fileName": "lcxtest3.csv", "encoding": "UTF-8", "writeMode": "truncate", "dateFormat": "yyyy-MM-dd hh:mm:ss" , "nullFormat": "\\N" , "fileFormat": "csv" , "fieldDelimiter": "," } } } ] } }
第三张表数据比较少,只有80条。
导入到OceanBase
{ "job": { "setting": { "speed": { "channel": 4 }, "errorLimit": { "record": 0, "percentage": 0.1 } }, "content": [ { "reader": { "name": "txtfilereader", "parameter": { "path": ["/tmp/lcxtest3"], "fileName": "lcxtest3.csv", "encoding": "UTF-8", "column": ["*"], "dateFormat": "yyyy-MM-dd hh:mm:ss" , "nullFormat": "\\N" , "fieldDelimiter": "," } }, "writer": { "name": "oceanbasev10writer", "parameter": { "obWriteMode": "insert", "column": [ "*" ], "preSql": [ "truncate table lcxtest3" ], "connection": [ { "jdbcUrl": "||_dsc_ob10_dsc_||obcluster:test_tenant||_dsc_ob10_dsc_||jdbc:oceanbase://192.168.32.111:2883/lcxtest?useLocalSessionState=true&allowBatch=true&allowMultiQueries=true&rewriteBatchedStatements=true", "table": [ "lcxtest3" ] } ], "username": "root", "password":"root123", "writerThreadCount":10, "batchSize": 1000, "memstoreThreshold": "0.9" } } } ] } }
但如前后数据查询:
这篇关于数据迁移:从mysql迁移到OceanBase的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程