一、背景
为了保证tidb的稳定运行,我们在tidb的后端接入了一个mysql,但是tidb中又有一些mysql中没有的特性,那这时候cdc会怎么处理呢,下面挑了其中几个常用的特性进行实验
二、实验步骤
1.刷新二进制
# 执行位置:下游mysql
# 目的:为了更容易查看写入到二进制中的真实内容
flush logs
2.创建含SHARD_ROW_ID_BITS特性的表
create table write_hot_3 (id bigint(20) not null, z_name varchar(20), z_info varchar(30),unique key(id)) SHARD_ROW_ID_BITS = 4
PRE_SPLIT_REGIONS=3
create table write_hot_2(id bigint(20) not null auto_random primary key,z_name varchar(20),z_info varchar(30));
insert into write_hot_2(z_name,z_info) values('abc','def');
3.观测结果
3.1 下游建表情况
show create table write_hot_3;
CREATE TABLE `write_hot_3` (
`id` bigint(20) NOT NULL,
`z_name` varchar(20) DEFAULT NULL,
`z_info` varchar(30) DEFAULT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
show create table write_hot_2;
CREATE TABLE `write_hot_2` (
`id` bigint(20) NOT NULL,
`z_name` varchar(20) DEFAULT NULL,
`z_info` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb
select * from write_hot_2;
3.2 观察二进制情况
mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000003
# 可以发现二进制中记录的内容是带具体的注释的,说明如果有dm同步的时候,,下游的tidb集群也能创建出包含SHARD_ROW_ID_BITS特性的表
SET @@session.collation_database=DEFAULT/*!*/;
create table write_hot_3 (id bigint(20) not null, z_name varchar(20), z_info varchar(30),unique key(id)) /* 90000 SHARD_ROW_ID_BITS = 4
PRE_SPLIT_REGIONS=3 */
/*!*/;
# at 523
#220527 10:29:16 server id 1 end_log_pos 732 CRC32 0x0564e224 Query thread_id=43 exec_time=0 error_code=0
SET TIMESTAMP=1653618556/*!*/;
create table write_hot_2(id bigint(20) not null /*T![auto_rand] auto_random */ primary key,z_name varchar(20),z_info varchar(30))
/*!*/;
# at 928
#220527 10:34:43 server id 1 end_log_pos 980 CRC32 0x3c2cef4c Write_rows: table id 121 flags: STMT_END_F
### INSERT INTO `test_db`.`write_hot_2`
### SET
### @1=4035225266123964417 /* LONGINT meta=0 nullable=0 is_null=0 */
### @2='abc' /* VARSTRING(80) meta=80 nullable=1 is_null=0 */
### @3='def' /* VARSTRING(120) meta=120 nullable=1 is_null=0 */
三、验证的特性
可以正常同步且二进制中保留特性的功能
- SHARD_ROW_ID_BITS
- auto_random
- auto_random的隐式插入
后续实验持续更新