常见问题¶
Linux上的UTS客户端,连windows上的UTS服务端(MSSQL)如果nvarchar类型中文乱码或者没办法入库¶
答:在服务端勾选映射成UTF8编码,如下图所示:

数据传输过程中出现service stop错误¶
答:出现这种情况一般是uts的授权服务到期,需要重新续费生成新的授权代码,请联系我公司商务人员商讨续费事宜。
UTS客户端禁止修改表结构选项有什么用?¶
勾选了这个选项,如果服务端增加了字段,UTS也会在客户端增加字段
勾选与不勾选的区别:
1.勾选了该字段,如果目标表字段比源表多,UTS不会去删除多余的字段
2.勾选了该选项,UTS客户端不会在目标表执行增加索引之类的操作
3.勾选了该选项,如果指定的时间戳字段不存在,UTS不会自动在目标表创建该字段,如果不勾选,UTS会尝试先创建该字段
UTS时间戳机制同步原理¶
时间戳(timestamp)是SqlServer特有的一个字段类型,当表的行数据新增或修改后,该字段会自动更新为最新的数值。
SqlServer的timestamp存储的其实是一个int64,并不是时间或者日期类型(比如mysql的timestamp)。
凡是数据新增和修改操作能引起数值变大的字段,我们都可以用于充当时间戳字段,包括bigint、number、datetime、binary(8)等。
工作原理
我们通过比对源和目标表中,所有时间戳字段的差异,就可以判断出源头发生了何种数据操作(DML)。 从而通过UTS时间戳机制自动进行数据库同步完善工作。
例如:我们现在有一个源表:
| 主键 name(varchar(20)) | 时间戳(bigint) |
|---|---|
| Hello | 1001 |
| World | 1003 |
-
源表数据库同步之后,得到目标表一:
主键 name(varchar(20)) 时间戳(bigint) Hello 1001 对比目标表一和源表,发现缺少时间戳1003的记录,说明源表发生了insert新增操作(也有可能是目标误删除了记录);
-
源表数据库同步之后,得到目标表二:
主键 name(varchar(20)) 时间戳(bigint) Hello 1001 World 1002 对比目标表一和源表,目标表二多了一条时间戳1002的数据,但少了一条1003的数据,两者主键一致,说明源表发生了update更新操作;
-
源表数据库同步之后,得到目标表三:
主键 name(varchar(20)) 时间戳(bigint) Hello 1001 World 1003 Test 1004 对比目标表一和源表,目标表三比源表多了一条时间戳为1004的数据,说明源头发生了delete删除操作。
以上种种情形,我们通过时间戳服务,对比源表和目标表时间戳序列的差异,随时发现数据DML操作,不需要额外的日志系统辅助,自动智能解决一切传输问题,传给目标表精确的数据库。
时间戳字段应当满足如下特性
1、时间戳字段的值必须是正数,且像时间一样正向增长的,不能回退;
2、同一张表中时间戳字段的值尽可能的是唯一的;
3、数据发生插入或更新时,该条记录的时间戳字段的值尽可能成为全表最大。
MSSQL数据的timestamp类型就具有这种特性,能够很好的支持UTS的数据传输同步。而对于数据源不是MSSQL数据库的,尽可能使用某种机制确保作为时间戳字段的值满足上述特性。(如触发器的实现方式)
mysql8.0 报错:连接报错1251 client does no support authentic¶
[分析]:
因为mysql8.X系列账户的默认的认证加密方式是caching_sha2_password, 而5.7系列默认是mysql_native_password,所以在使用老版本的客户端驱动连接Mysql时会报不支持的认证协议。
[解决]
- 方案一、更改一下默认的认证方式为mysql_native_password
1、查看账户的认证加密方式:
[root@k8s-node4 ~]# mysql -uroot -p
mysql> select host,user,plugin from user;
+-----------+---------------+-----------------------+
| host | user | plugin |
+-----------+---------------+-----------------------+
| localhost | root | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| % | root | caching_sha2_password |
| % | xdba | caching_sha2_password |
+-----------+---------------+-----------------------+
2、更改默认的认证方式为mysql_native_password
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
- 方案二、升级更新客户端连接的mysql驱动