mysql离线数据导入_MYSQL离线迁移至分布式TDSQL

本文介绍了如何将MYSQL单实例的离线数据高效导入到TDSQL分布式数据库,通过LOAD_DATA工具进行数据迁移,详细阐述了从导出CSV文件到导入TDSQL分布式实例的步骤,包括模式选择、库表结构创建和数据验证。
摘要由CSDN通过智能技术生成

当使用MYSQL

单实例,因数据量剧增出现性能问题的时候,普通的分库分表又难以满足其需求,一些客户会考虑迁移至分布式数据库。

TDSQL

分布式是一款面向金融领域的一款数据库,适合应用在海量数据、高性能,高并发的使用场景。那么我们从

MYSQL

迁移至

TDSQL

都有哪些途径呢 ?这里我们对

MYSQL

离线迁移至分布式

TDSQL

介绍一种方法:

使用LOAD_DATA

导入至

TDSQL

分布式实例 ,

LOAD_DATA

是在原生

MYSQL load data

基础上,针对导入分布式

TDSQL

进行优化逻辑处理后的一款导入工具

。此工具只适用于导入TDSQL

分布式 ,不适合

TDSQL

非分布式。究其原因是

TDSQL

分布式 在插入语句中有一个严格限制,插入语句必须带有

shardkey ,

没有

shardkey

的情况下会导入失败。所以

LOAD_DATA

工具会对

shardkey

这一层面有一个处理。

我们可以通过./load_data

查看帮助 具体的使用方法:

cd  /data/tdsql_run/15002/gateway/bin

6b19b6ca635d3734bb5458a80a8573ec.png

命令的参数说明

导入命令:./load_data mode1 $proxy_host $proxy_port $proxy_username $proxy_passwd $proxy_dbname.$proxy_tablename auto '$file_name' ',' '"'

参数说明:

m

ode0

:load

_data

的原理是分割数据,然后导入数据,mode0

是先分割数据不进行导入。

m

ode1

:分割数据,然后导入数据。

p

roxy

_host

:网关的host

p

roxy

_port

:网关的端口

u

ser

:用户名

p

assword

:密码

d

b_talbe

:库表,格式为

db

.table

s

hardkey_index

shardkey

字段在导入文件的索引(位置,从

0

开始)

f

ile

:绝对路径的文件所在位置

f

ield_terminated

:与导出时使用的

field terminated

一致,行的分割

f

ield

_enclosed

:与导出时使用的

field enclosed

一致,

设置字段包围字符

下面我们简单做个迁移测试,具体介绍一下迁移步骤:

第一步

从mysql

单实例中 导出数据至

csv

格式:

导出csv

格式的方法也有多种 ,这里我们就使用

into outfile

我们以test

库下

T1

表为例

T1

表结构

CREATE TABLE `game_score_log` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(10) NOT NULL,

`score` int(11) NOT NULL,

PRIMARY KEY (`id`)

)  ;

插入一些数据

insert into t1 (id,name,score) values ("10001","

王五

","100");

insert into t1 (id,name,score) values ("10002","

李四

","95" );

insert into t1 (id,name,score) values ("10003","

李四

","100");

insert into t1 (id,name,score) values ("10004","

李四

","75" );

insert into t1 (id,name,score) values ("10005","

王五

","70" );

insert into t1 (id,name,score) values ("10006","

张三

","85" );

insert into t1 (id,name,score) values ("10007","

张三

","65" );

insert into t1 (id,name,score) values ("10008","

王五

","70" );

使用select into outfile

进行导出

SELECT * FROM t1

INTO OUTFILE '/tmp/

t1

.csv'

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '\n';

FIELDS TERMINATED BY ','

字段间分割符

OPTIONALLY ENCLOSED BY '"'

将字段包围 对数值型无效

LINES TERMINATED BY '\n'

换行符

cat

/tmp/

t1

.csv

"10001","

王五

","100"

"10002","

李四

","95"

"10003","

李四

","100"

"10004","

李四

","75"

"10005","

王五

","70"

"10006","

张三

","85"

"10007","

张三

","65"

"10008","

王五

","70"

第二步:导入数据到

TDSQL

分布式实例

(1

)

首先

TDSQL

分布式实例

上准备库和表结构

这里注意shardkey

的选取(建议选择一个区分度较高的字段,以便数据均匀打散到各个分片中,这里需要业务人员的参与)

CREATE TABLE `

t1

` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(10) NOT NULL,

`score` int(11) NOT NULL,

PRIMARY KEY (`id`)

)  shardkey=id;

(2

)

mode0

模式

分割成 n

个(看实例有几个分片)文件

,

但不导入

./load_data mode

0

172.21.16.11 15002 ju2 ju2 test.t1  auto '/tmp/t1.csv' ',' '"'

执行后分割为:t1.csv_set_1605000504_1

t1.csv_set_1605000688_3

两个文件

b2b05fdadc17c81737d918107f8e33a6.png

(3

)

mode1

模式

,

直接分割并导入

./load_data mode1 172.21.16.11 15002 ju2 ju2 test.t1  auto '/tmp/t1.csv' ',' '"'

8391316649aa3146ab74e5d9a34ddd34.png

(4

)最后验证:

MYSQL

-u

ju2

-p

ju2

-h172.

21.16.11

-P15002

-c

daf81be828b114d52b950b657bb88823.png

查看各个分片上的数据

3fcc73bc1b2e8c6191f2ef6b0df16afd.png

d9788f459e1f6b07482ab293173f7434.png

至此,迁移完成。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值