示例-从 MySQL 同步到 ProtonBase

准备工作

网络部分参考 数据同步网络配置

权限

只包含全量作业,授予如下权限,user 为同步作业的用户,password 为用户密码

mysql> GRANT SELECT, SHOW DATABASES ON *.* TO '${user}' IDENTIFIED BY '${password}';
       FLUSH PRIVILEGES;

包含增量作业,授予如下权限

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '${user}' IDENTIFIED BY '${password}';
       FLUSH PRIVILEGES;

增量作业开启 binlog

  1. 检查是否开启 binlog
mysql> select @@log_bin; -- 检查是否开启了 binlog,0 表示 disable,1 表示enable
mysql> show variables like 'server_id';
mysql> show variables like 'binlog%';

确认下述参数是否正确

  • server_id 非空
  • log_bin: 1
  • binlog_format:ROW
  • binlog_row_image: FULL
  1. 如果和上述参数不一致,则
  • 自建 MySQL 服务,请修改 mysqld.cnf 后重启 MySQL 服务
  • 云厂商提供的 RDS 服务,一般在控制台设置参数后重启即可(阿里云请参考 这里 (opens in a new tab)

数据源配置

MySQL 数据源需要配置如下连接属性:

  • Host:MySQL 服务地址
  • Port:MySQL 服务端口,一般为 3306
  • Username:上述权限的用户
  • Password:上述权限用户对应的密码

默认节点映射

节点的默认映射规则如下

concat(SOURCE_DATABASE, '.', 'public', '.', SOURCE_OBJECT)

含义为:MySQL 的表比如 d.t (其中 d 为 database 名,t 为表名)映射到 ProtonBase 下的 d.public.t(其中 public 为 schema)

默认字段映射

MySQLProtonBase
TINYINTINT2
SMALLINTINT2
MEDIUMINTINT4
INTINT4
BIGINTINT8
TINYINT UNSIGNEDINT2
SMALLINT UNSIGNEDINT4
MEDIUMINT UNSIGNEDINT4
INT UNSIGNEDINT8
BIGINT UNSIGNEDNUMERIC
NUMERICNUMERIC
DECIMAL UNSIGNEDNUMERIC
FLOATFLOAT4
FLOAT UNSIGNEDFLOAT4
DOUBLEFLOAT8
DOUBLE UNSIGNEDFLOAT8
CHARCHAR
VARCHARVARCHAR
TINYTEXTTEXT
TEXTTEXT
MEDIUMTEXTTEXT
LONGTEXTTEXT
BINARYBYTEA
VARBINARYBYTEA
TINYBLOBBYTEA
BLOBBYTEA
MEDIUMBLOBBYTEA
LONGBLOBBYTEA
ENUMTEXT
SETTEXT
DATEDATE
DATETIMETIMESTAMP
TIMESTAMPTIMESTAMPTZ
TIMETIME
YEARINT2
JSONJSONB