管理映射规则
通过创建映射规则,可以实现MySQL实例到GeminiDB实例的数据自动同步。本章节主要介绍如何创建、修改和删除映射规则,以及创建映射规则后的使用示例。
注意事项
- 目前仅支持MySQL到GeminiDB Redis接口Hash类型的转换。
- 新规则的Redis键前缀+键分隔符不能是已有规则的Redis键前缀+键分隔符的子前缀,反之亦然。例如新规则的前缀为 "pre1:",键分隔符为 "," ,老规则前缀为 "pre1",分隔符为":", 这种情况不允许创建新规则。
- 如果修改映射规则中MySQL实例的表名后,则需要重新配置映射规则。
- 暂不支持ENUM、SET、JSON三种数据类型的同步。
- 如果对映射规则中键(Key)字段中的一个或多个字段执行改名、删除等操作时,会使映射规则失效。
创建映射规则
- 登录管理控制台。
- 单击管理控制台左上角的,选择区域和项目。
- 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
- 在“实例管理”页面,选择目标实例名称。
- 在左侧导航栏选择“内存加速”,在“映射规则”页面单击“创建映射规则”。
图1 映射规则
- 在“创建映射规则”页面,填写并选择相关信息。
- 配置规则名称。
- 源实例配置。
- 数据库名:选择需要加速实例的数据库。
- 表名:选择需要加速实例中的表。
图3 源实例配置
- 加速实例端配置。
- Redis键前缀:可选。默认的前缀格式为“数据库名:数据表名:字段名1:字段名2...”,长度不超过1024个字符。如果用户自定义了Redis键前缀,那么以自定义前缀为准。
- 值存储类型:缓存的数据类型,当前仅支持Hash。
- DB号(0-999):加速实例中保存缓存数据的DB号,默认为0。
- TTL(单位:秒,默认值为30天。):加速实例中缓存数据的过期时间,默认30天(2592000秒),输入-1为不过期。
- 键分隔符:Redis键前缀与键(Key)、以及键(Key)各字段之间的分隔符,长度为1个字符。
图4 加速实例端配置
- 单击“键(Key)设置”,选择加速实例的键(Key)字段,单击“确定”。
如果加速实例键(Key)由多个源实例字段组成,那么需要具备唯一性(这些字段在MySQL实例中要能成功创建出唯一索引);可以单击“上移”和“下移”调整各字段在键(Key)中的先后顺序。
图5 键(Key)设置
设置完成后,会在界面中显示键(Key)的构成方式,如下图所示:
图6 键(Key)
- 配置加速实例的域-值。
- 配置信息填写完成后,单击“提交”,完成映射规则创建。
使用示例
- 在源实例MySQL中创建一个db1数据库,并在db1中创建一个students表,具体的 SQL 如下:
mysql> CREATE DATABASE db1; Query OK, 1 row affected (0.00 sec) mysql> CREATE TABLE db1.students( sid INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL, sname VARCHAR(20), sclass INT, sgender VARCHAR(10), sbirthday DATE ); Query OK, 0 rows affected (0.00 sec) mysql> DESC db1.students; +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | sid | int unsigned | NO | PRI | NULL | auto_increment | | sname | varchar(20) | YES | | NULL | | | sclass | int | YES | | NULL | | | sgender | varchar(10) | YES | | NULL | | | sbirthday | date | YES | | NULL | | +-----------+--------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
- 建表后,在“内存加速”界面,创建一条映射规则,将students表中的每一行转换为一个Redis Hash。该Hash的键(Key)由”数据库名:数据表名:sid:<sid的值>”构成,域-值由选中的“sname,sclass,sgender,sbirthday”构成。
图8 配置映射规则
- 映射规则创建成功后,可以查看映射规则及映射信息。
图9 映射信息
- 在MySQL实例侧对students表插入一条新数据:
mysql> INSERT INTO db1.students (sname, sclass, sgender, sbirthday) VALUES ('zhangsan', 1, 'male', '2015-05-20'); Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM db1.students; +-----+----------+--------+---------+------------+ | sid | sname | sclass | sgender | sbirthday | +-----+----------+--------+---------+------------+ | 1 | zhangsan | 1 | male | 2015-05-20 | +-----+----------+--------+---------+------------+ 1 row in set (0.00 sec)
- 由于映射规则的存在,会把该数据自动同步到GeminiDB实例中。此时在GeminiDB实例中执行命令即可查询到该数据:
127.0.0.1:6379> KEYS * 1) "db1:students:sid:1" 127.0.0.1:6379> HGETALL db1:students:sid:1 1) "sbirthday" 2) "2015-05-20" 3) "sclass" 4) "1" 5) "sgender" 6) "male" 7) "sname" 8) "zhangsan"
- 在MySQL实例侧对students表再次插入一条新数据:
mysql> INSERT INTO db1.students (sname, sclass, sgender, sbirthday) VALUES ('lisi', 10, 'male', '2015-05-22'); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM db1.students; +-----+----------+--------+---------+------------+ | sid | sname | sclass | sgender | sbirthday | +-----+----------+--------+---------+------------+ | 1 | zhangsan | 1 | male | 2015-05-20 | | 2 | lisi | 10 | male | 2015-05-22 | +-----+----------+--------+---------+------------+ 2 rows in set (0.00 sec)
- 新数据会被同步到GeminiDB实例中:
127.0.0.1:6379> KEYS * 1) "db1:students:sid:1" 2) "db1:students:sid:2" 127.0.0.1:6379> HGETALL db1:students:sid:2 1) "sbirthday" 2) "2015-05-22" 3) "sclass" 4) "10" 5) "sgender" 6) "male" 7) "sname"
- 在 MySQL实例侧对students表执行更新数据操作:
mysql> UPDATE db1.students SET sclass=12, sname='wangwu' WHERE sid = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM db1.students; +-----+--------+--------+---------+------------+ | sid | sname | sclass | sgender | sbirthday | +-----+--------+--------+---------+------------+ | 1 | wangwu | 12 | male | 2015-05-20 | | 2 | lisi | 10 | male | 2015-05-22 | +-----+--------+--------+---------+------------+ 2 rows in set (0.00 sec)
- 在GeminiDB实例中查看数据被更新:
127.0.0.1:6379> KEYS * 1) "db1:students:sid:1" 2) "db1:students:sid:2" 127.0.0.1:6379> HGETALL db1:students:sid:1 1) "sbirthday" 2) "2015-05-20" 3) "sclass" 4) "12" 5) "sgender" 6) "male" 7) "sname" 8) "wangwu"
- 在MySQL实例侧对students表执行删除数据操作:
mysql> DELETE FROM db1.students WHERE sid = 1; Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM db1.students; +-----+-------+--------+---------+------------+ | sid | sname | sclass | sgender | sbirthday | +-----+-------+--------+---------+------------+ | 2 | lisi | 10 | male | 2015-05-22 | +-----+-------+--------+---------+------------+ 1 row in set (0.00 sec)
- 在 GeminiDB实例中查看数据被删除:
127.0.0.1:6379> KEYS * 1) "db1:students:sid:2"
修改映射规则
- 登录管理控制台。
- 单击管理控制台左上角的,选择区域和项目。
- 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
- 在“实例管理”页面,选择目标实例名称。
- 在左侧导航栏选择“内存加速”,在“映射规则”页面单击目标规则操作列的“编辑”。
图10 映射规则
- 编辑加速实例的域-值后,单击“提交”,完成映射规则修改。
图11 编辑映射规则
删除映射规则
- 登录管理控制台。
- 单击管理控制台左上角的,选择区域和项目。
- 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
- 在“实例管理”页面,选择目标实例名称。
- 在左侧导航栏选择“内存加速”,在“映射规则”页面单击目标规则操作列的“删除”,即可完成映射规则删除。