关于数据库:MYSQL离线迁移至分布式TDSQL

5次阅读

共计 2474 个字符,预计需要花费 7 分钟才能阅读完成。

当应用 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

命令的参数阐明

导入命令:./load_data mode1 $proxy_host $proxy_port $proxy_username $proxy_passwd $proxy_dbname.$proxy_tablename auto ‘$file_name’ ‘,’ ‘”‘

参数阐明:

mode0:load_data 的原理是宰割数据,而后导入数据,mode0 是先宰割数据不进行导入。

mode1:宰割数据,而后导入数据。

proxy_host:网关的 host

proxy_port:网关的端口

user:用户名

password:明码

db_talbe:库表,格局为 db.table

shardkey_index:shardkey 字段在导入文件的索引(地位,从 0 开始)

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

field_terminated:与导出时应用的 field terminated 统一,行的宰割

field_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 mode0 172.21.16.11 15002 ju2 ju2 test.t1 auto ‘/tmp/t1.csv’ ‘,’ ‘”‘

执行后宰割为:t1.csv_set_1605000504_1 和 t1.csv_set_1605000688_3 两个文件

(3)mode1 模式, 间接宰割并导入

./load_data mode1 172.21.16.11 15002 ju2 ju2 test.t1 auto ‘/tmp/t1.csv’ ‘,’ ‘”‘

(4)最初验证:

MYSQL-uju2 -pju2 -h172.21.16.11 -P15002 -c

查看各个分片上的数据

至此,迁徙实现。

原创申明,本文系作者受权云 + 社区发表,未经许可,不得转载。
如有侵权,请分割 yunjia_community@tencent.com 删除。

正文完
 0