金点分享 | 数据库系列之GoldenDB数据迁移
1、数据导入导出工具LoadServer介绍
1.1 LoadServer使用场景
1.2 LoadServer特性
dbtool --loadserver -load-retry–clusterid=1 –tablename= db01.tb01
dbtool –loadserver -load-retry –clusterid=1 -importdate=‘2017-07-07’ –tablename= db01.tb01
dbtool -loadserver -type="in" [-loadin-support-null=1] -clusterid=1
dbtool -loadserver -convert-to-insert -tablename | -importdir
dbtool -loadserver -type="out" -clusterid=1 … -user="xxxx" -password="xxxx"
dbtool -loadserver -type="in" -clusterid=1 -skip-ok-check -set-unique-column=unique_c
#time interval for report statistic to metadataserver;unit:s;: means timing report been closed; recommended value range:~172800
statistic_report_interval=300
dbtool -loadserver -q[uery] -w[ork]l[oad]
1.3 LoadServer架构原理
LoadServer:数据导入导出工具,负责处理dbtool客户端命令,执行数据导入导出任务; ClusterManager:数据库集群管理中心,负责转发LoadServer命令到DBAgent模块,接收汇总DBAgent命令响应并回复LoadServer模块; MetaDataServer:数据库元数据服务器,负责向LoadServer服务器提供数据库表的元数据信息,负责提供鉴权服务; DBAgent:数据库监控代理程序,负责连接数据库节点,执行LoadServer服务器下发的导入导出命令。
1.4 LoadServer导入和导出流程
1.4.1 数据导入流程
用户使用dbtool客户端,向LoadServer服务器发送数据导入请求,LoadServer解析命令正确后,向MetadataServer模块发送获取元数据请求,然后校验元数据信息 校验通过后,LoadServer服务器在本地将导入数据文件split为小文件,当split文件达到配置的下发数目时,向ClusterManager模块发送导入命令,ClusterManager根据请求信息将导入命令下发到各DBAgent模块,DBAgent下载数据文件到临时目录并连接数据节点执行数据文件导入(并发执行) DBAgent执行结束后,向ClusterManager回复数据导入响应,ClusterManager转发响应到LoadServer服务器 LoadServer汇总分裂文件导入结果,待收到所有文件结果后,向dbtool客户端打印本次导入详细结果信息
1.4.2 数据导出流程
用户使用dbtool客户端发起数据导出请求,LoadServer校验命令通过后,向MetadataServer请求元数据信息,根据元数据信息获取数据分发节点。 LoadServer发送导出数据请求到ClusterManager模块,ClusterManager根据导出请求转发到指定数据节点的DBAgent,此时DBAgent模块连接数据节点执行数据导出命令。 各DBAgent执行数据导出后,将结果发送给ClusterManager模块汇总,然后转发汇总结果到LoadServer模块。 LoadServer发送文件上传请求,将各DBAgent导出的数据文件上传到LoadServer服务器。LoadServer收到ClusterManager汇总发送的上传文件响应后,在本地将各DBAgent节点上传的数据文件合并为一个完整的数据文件。 同时继续发送各DBAgent上子数据文件删除命令,然后等待ClusterManager汇总删除文件响应。 等以上流程结束以后,向dbtool客户端发送导出命令结果信息。
2、LoadServer工具使用
2.1 环境准备
2.1.1 系统环境
service vsftpd status
vsftpd (pid 3308) is running...
rpm -qa |grep ftp
rpm -qa |grep expect
2.1.2 运行环境
通过dbstate命令检查模块进程运行正常
dbstate
[metadataserver]The metadataserver process is running
[clustermanager]The clustermanager process is running
[loadserver]The loadserver process is running
检测Loadserver和Metadataserver的通信状态
dbtool -mds -linkstate
Send message to other module successfully!
The response message: RSP Code[].{:success; 1:provisional response; other: fail.}
检测loadserver与ClusterManager的通信状态
dbtool -cm -linkstate
Send message to other module successfully!
The response message: RSP Code[].{:success; 1:provisional response; other: fail.}
2.1.3 数据目录
backup目录:导入任务结束,导入数据文件保存目录,由配置参数backup_path指定,是否保存文件依赖配置文件选项loadin_backup_required,默认为保存。 in目录:导入数据文件存放目录,由配置参数loadin_path指定,该目录中子目录名称为集群号,次使用需创建,并且需要将数据文件移到至该目录中。 out目录:导出数据文件存放目录,由配置参数loadout_path指定。 errordata目录:导入失败中间数据文件存放目录,由配置参数fail_file_save_path指定。 split/merge目录:导入/导出临时数据文件存放目录,由配置参数split_path和merge_path指定。
2.2 LoadServer使用
2.2.1 LoadServer语法
dbtool -loadserver [OPTION]
---------------------------------------------------------------------------------------------------
#-l[ink]s[tate]:查看模块链路信息
#-l[oad-]c[onfig]:动态生效配置参数
#-type:命令类型:in-导入;out-导出
#-load-retry:导入重试
#-convert-to-insert:导入失败文件转sql文件
#-skip-ok-check:不起实际作用,仅保持业务接口兼容
#-clusterid:导入导出功能所在集群号
#-errorignore:导入过程容忍大错误数据条数,超过该值,导入任务失败
#-backup:备份导入文件到备份目录
#-errordata:导入过程中失败数据、错误数据存放文件
#-endstate:结束阶段标志:导出:0-导出文件在out目录,并合并为一个文件;1-导出文件在out目录,不合并;2-导出文件存放在DBAgent端。导入:不填时默认导入全流程;split-导入在拆分阶段后停止
#-splitpath:导入在拆分阶段停止时指定拆分文件路径
#-sql:SQL命令
#-host:LoadServer服务器所在IP(域名)及端口
#-loadin-support-null:是否支持0长度字符串为NULL,0为不支持,1为支持
#-set-unique-column=:导入时指定文件内列,注意:当使用该option时,需要列出除指定文件内列之外的所有导入列
#-user=:集群鉴权用户名
#-password=:集群鉴权密码
#-q[uery] -w[ork]l[oad]:查询导入导出工作负载情况
#-tablename:重试命令中指定的表名或者导入失败文件转sql文件命令中指定的表名
#-importdate=:重试命令指定重试数据日期或者导入失败文件转sql文件命令中指定的数据日期
#-importdir=:导入失败文件转sql文件命令中指定的失败文件目录
#-exportdir=:导入失败文件转sql文件命令中指定的sql文件目录
#-batchcommit=:导入失败文件转sql文件时一次提交行数,0表示一次提交所有行,默认5000行
#-linkoffrebuild:Loadserver与Comtool断链重连参数
#-filenum=:Endstate=3时,指定导出文件数目
#-fileline=:Endstate=3时,指定导出文件大行数
LOAD DATA [LOW_PRIORITY | CONCURRENT] INFILE 'file_name' #CONCURRENT:LOAD data语句可与INSERT语句并行执行
[REPLACE | IGNORE] #当存在主键冲突或索引冲突,REPLACE表示替换表中冲突数据、INGONE表示忽略该行导入数据
INTO TABLE tbl_name
[PARTITION (partition_name,...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string'] #列值以’string’进行分割
[[OPTIONALLY] ENCLOSED BY 'char'|ENCLOSED BY''] #指定OPTIONALLY,非数据列值使用 'char' 字符引用,不指定则列数据值全部被 'char' 引用
[ESCAPED BY 'char'] #指定数据转义字符
]
[LINES
[STARTING BY 'string'] #指定行数据以’string’开始
[TERMINATED BY 'string'] #指定行数据以’string’结束
]
[IGNORE number {LINES | ROWS}] #忽略数据文件开始行数或列数
[(col_name_or_user_var,...)] #指定列导入,不指定则全部导入
[SET col_name = expr,...] #SET语句,对数据列值进行需要的转换
[WHEN when_clause]
[TRAILING NULLCOLS] #数据文件缺少的后面的列,导入时用NULL补充
[gdb_format 'JCSV'] #对导入数据不做转义处理,‘/’不作为转义符,作为普通字符导入
SELECT (col_name[,...]) FROM tbl_name INTO OUTFILE 'file_name' #指出导出的列,不支持*表示全部
[WHERE where_clause]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string'] #列值以’string’进行分割
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char'] #指定数据转义字符
]
[LINES
[STARTING BY 'string'] #指定行数据以’string’开始
[TERMINATED BY 'string'] #指定行数据以’string’结束
]
[gdb_format {'JCSV'|'nospace_filling'}] # nospace_filling表示导出数据格式没有分隔符;JCSV表示特殊字符导出时不做转义处理
2.2.2 LoadServer导出
dbtool -loadserver -type="out" -clusterid=1 -sql="select id,name,rent from db01.tb01 into outfile 'tb01.data' fields terminated by ',' lines terminated by '\n';" -user="xxxx" -password="xxx"
dbtool -loadserver -type="out" -clusterid=1 -sql="select id,name from db01.tb01 into outfile 'tb01.data' fields terminated by ',' lines terminated by '\n';" -user="xxxx" -password="xxx"
dbtool -loadserver -type="out" -clusterid=1 -sql="select id,name from db01.tb01 where id>10 into outfile 'tb01.data' fields terminated by ',' lines terminated by '\n';" -user="xxxx" -password="xxx"
2.2.3 LoadServer导入
dbtool -loadserver -type="in" -clusterid=1 -sql="load data infile 'input.data' into table db01.tb01 fields terminated by ',' optionally enclosed by '\"' lines terminated by '\n' ;" -user="xxxx" -password="xxxx"
dbtool -loadserver -type="in" -clusterid=1 -sql="load data infile 'input.data' into table db01.tb01 fields terminated by ',' optionally enclosed by '\"' lines terminated by '\n' ( id,name) ;" -user="xxxx" -password="xxxx"
dbtool -loadserver -type="in" -clusterid=1 -sql="load data infile 'input.data' into table db01.tb01 fields terminated by ',' optionally enclosed by '\"' lines terminated by '\n' ( id,name) when id>=10;" -user="xxxx" -password="xxxx"
dbtool -loadserver -type="in" -clusterid=1 -sql="load data infile 'input.data' into table db01.tb01 fields terminated by ',' optionally enclosed by '\"' lines terminated by '\n' ( id,@name) set vname=concat(@name,’+’);" -user="xxxx" -password="xxxx"
2.2.4 导数过程中自增列的处理
dbtool -p -x -set-autoinc db01.tb01=1000000,c=1
2.3 LoadServer调优
3、LoadServer应用场景
3.1 异构数据库迁移
3.2 卸数场景
来源 https://mp.weixin.qq.com/s/CyWJQMgZaiQaRwfgMM2IIw
相关文章