从 MySQL 同步到 ProtonBase
为什么需要从 MySQL 同步到 ProtonBase?
MySQL 是世界上最流行的开源关系型数据库之一,广泛应用于各种Web应用和业务系统中。然而,当面对大规模数据分析和复杂查询时,MySQL 的性能可能无法满足需求。ProtonBase 作为一款专为实时分析设计的数据库,具备强大的分析能力,能够提供更快的查询响应速度和更好的扩展性。通过将 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
- 检查是否开启 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
- 如果和上述参数不一致,则
- 自建 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)
默认字段映射
| MySQL | ProtonBase | 
|---|---|
| TINYINT | INT2 | 
| SMALLINT | INT2 | 
| MEDIUMINT | INT4 | 
| INT | INT4 | 
| BIGINT | INT8 | 
| TINYINT UNSIGNED | INT2 | 
| SMALLINT UNSIGNED | INT4 | 
| MEDIUMINT UNSIGNED | INT4 | 
| INT UNSIGNED | INT8 | 
| BIGINT UNSIGNED | NUMERIC | 
| NUMERIC | NUMERIC | 
| DECIMAL UNSIGNED | NUMERIC | 
| FLOAT | FLOAT4 | 
| FLOAT UNSIGNED | FLOAT4 | 
| DOUBLE | FLOAT8 | 
| DOUBLE UNSIGNED | FLOAT8 | 
| CHAR | CHAR | 
| VARCHAR | VARCHAR | 
| TINYTEXT | TEXT | 
| TEXT | TEXT | 
| MEDIUMTEXT | TEXT | 
| LONGTEXT | TEXT | 
| BINARY | BYTEA | 
| VARBINARY | BYTEA | 
| TINYBLOB | BYTEA | 
| BLOB | BYTEA | 
| MEDIUMBLOB | BYTEA | 
| LONGBLOB | BYTEA | 
| ENUM | TEXT | 
| SET | TEXT | 
| DATE | DATE | 
| DATETIME | TIMESTAMP | 
| TIMESTAMP | TIMESTAMPTZ | 
| TIME | TIME | 
| YEAR | INT2 | 
| JSON | JSONB |