当应用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 删除。