问题:把SQLServer中的一张表复制到TiDB里面。
本地无法连接到服务器,所以只能通过堡垒机相连,所有操作都是通过命令行进行
从SQLServer中导出表
安装好SQL server客户端会在/opt/mssql-tools/bin/目录下有两个程序
root@a80:/# ls /opt/mssql-tools/bin/
bcp sqlcmd
本次就用到bcp命令
root@a80:/# /opt/mssql-tools/bin/bcp {datbase.dbo.tablename} out {文件.txt} -c -S 127.0.0.1 -U 用户 -P "密码"
root@a80:/# /opt/mssql-tools/bin/bcp {datbase.dbo.tablename} out {文件.csv} -S 127.0.0.1 -U 用户 -P "密码" -t ",", -w
root@a80:/# /opt/mssql-tools/bin/bcp "select QUOTENAME(a,'\"') from tableb" queryout {文件.csv} -c -S 127.0.0.1 -U 用户 -P "密码" -t ",", -w
txt 和csv文件都可以导出,只不过csv的话要多一个 -t ”,“参数,这个是添加分隔符。
-c 和 -w 是文件编码的,如果有中文要选 -c否则中文变成乱码
使用sql queryout 可以增加导出数据的字段格式
导入到TiDB中
堡垒机只装了mysql客户端,没装tidb,所以网上很多工具没得用
mysql> LOAD DATA LOCAL INFILE '/xxx.csv' INTO TABLE tablename FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n';
FIELDS TERMINATED BY '\t' ENCLOSED BY ''
LINES TERMINATED BY '\n'
这三个参数不写的话就是默认这样 \t分隔 空包裹 \n 换行
ENCLOSED BY ‘’ 这种情况可能会导致字符串无端的增加空格, 影响数据准确性,所以最好用“包一下