网络访问使用限制
在使用分布式关系型数据库(简称DRDS)过程中,对于网络访问存在一些使用限制。
- 用户申请的数据节点、部署应用程序的ECS、DRDS实例必须属于同一个VPC。
- 当用户需要在自己电脑访问DRDS服务时,需要为DRDS开通EIP服务,然后通过EIP访问DRDS。
MySQL实例使用限制
在使用DRDS过程中,对于MySQL实例存在一些使用限制。
- 目前支持5.7及8.0系列版本的MySQL实例。
- DRDS暂不支持MySQL实例配置SSL连接。
- 禁止MySQL实例开启区分大小写。
- 对已经被DRDS关联的MySQL实例进行修改配置等操作时,可能导致使用异常。修改后需要在DRDS的DN管理页面,单击“同步DN信息”,将修改的配置进行同步,保证功能可用性。
不支持的特性和使用限制
不支持的特性
- 不支持存储过程;
- 不支持触发器;
- 不支持视图;
- 不支持事件;
- 不支持自定义函数;
- 不支持外键约束、外键关联;
- 不支持全文索引和空间函数;
- 不支持临时表;
- 不支持 BEGIN…END、LOOP…END LOOP、REPEAT…UNTIL…END REPEAT、WHILE…DO…END WHILE 等复合语句;
- 不支持类似 IF ,WHILE 等流程控制类语句;
- 不支持RESET、FLUSH语句;
- 不支持BINLOG语句;
- 不支持HANDLER语句;
- 不支持INSTALL/UNINSTALL PLUGIN语句;
- 不支持非 ascii/latin1/binary/utf8/utf8mb4 的字符集;
- 不支持SYS schema;
- 不支持MySQL追踪优化器;
- 不支持X-Protocol;
- 不支持CHECKSUM TABLE 语法;
- 不支持表维护语句,包括ANALYZE/CHECK/CHECKSUM/OPTIMIZE/REPAIR TABLE;
- 不支持session变量赋值与查询,如set @rowid=0;select @rowid:=@rowid+1,id from user;
- 不支持SQL语句中包含单行注释 ' --' 或者多行(块)注释 ' /.../';
- 不完整支持系统变量查询,系统变量查询语句返回值为RDS实例相关变量值,而非DRDS引擎内相关变量值。例如select @@autocommit返回的值,并不代表DRDS当前事务状态;
- 不支持SET Syntax修改全局变量;
- 不支持PARTITION 语法,建议不要使用partition表;
- 不支持LOAD XML语句;
不支持的运算符
- 不支持“:=”赋值运算符;
- 不支持“->”运算符;
- 不支持“->>”运算符;
- 暂不支持“<=>”运算符;
- 暂不支持“IS UNKNOWN”表达式;
不支持的函数
DRDS计算层暂不支持如下函数,如果无法确认函数是否能下推到RDS,请不要使用该函数。
- 不支持XML函数;
- 不支持ANY_VALUE()函数;
- 不支持ROW_COUNT()函数;
- 不支持COMPRESS()函数;
- 不支持SHA()函数;
- 不支持SHA1()函数;
- 不支持MD5()函数;
- 不支持AES_ENCRYPT()函数;
- 不支持AES_DECRYPT()函数;
- 不支持JSON_OBJECTAGG()聚合函数;
- 不支持JSON_ARRAYAGG()聚合函数;
- 不支持STD()聚合函数;
- 不支持STDDEV()聚合函数;
- 不支持STDDEV_POP()聚合函数;
- 不支持STDDEV_SAMP()聚合函数;
- 不支持VAR_POP()聚合函数;
- 不支持VAR_SAMP()聚合函数;
- 不支持VARIANCE()聚合函数;
SQL语法使用限制
SELECT
- 不支持DISTINCTROW;
- 不支持[HIGH_PRIORITY]、[STRAIGHT_JOIN]、
[SQL_SMALL_RESULT]、 [SQL_BIG_RESULT] 、[SQL_BUFFER_RESULT]
、[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]等选项放在DRDS实例下面。 - 不支持SELECT ... GROUP BY ... WITH ROLLUP语句;
- 不支持SELECT ... ORDER BY ... WITH ROLLUP语句;
- 不支持WITH语句;
- 不支持窗口函数;
- SELECT FOR UPDATE仅支持简单查询,不支持join、group by、order by、limit等语句。用于修饰FOR UPDATE的[NOWAIT | SKIP LOCKED]选项对于DRDS无效;
- 对于UNION中的每个SELECT, DRDS暂不支持使用多个同名的列。如下SQL的SELECT中存在重复的列名。
SELECT id, id, name FROM t1 UNION SELECT pk, pk, name FROM t2;
排序与Limit
- LIMIT/OFFSET参数支持范围为0-2147483647;
聚合
- 不支持group by语句后添加asc/desc函数来实现排序语义;
说明DRDS自动忽略group by后的asc/desc关键字。MySQL 8.0.13以下版本支持group by后添加asc/desc函数来实现排序语义,8.0.13及以上版本已废弃该用法,使用时会报语法错误。推荐使用order by语句来保证排序语义。
子查询
- 不支持孙子和爷爷存在关联关系的子查询;
- 不支持HAVING子句中的子查询,JOIN ON 条件中的子查询;
- Derived Tables 必须拥有一个别名;
- Derived Tables 不可以成为 Correlated Subqueries,即不能包含子查询外部表的引用;
LOAD DATA语法限制
- ESCAPED BY只支持'';
- 不支持PARTITION (partition_name [, partition_name] ...);
- 不支持LINES STARTING BY 'string';
INSERT 和 REPLACE
- 不支持INSERT DELAYED...;
- 不支持不包含拆分字段的INSERT;
- 暂不支持PARTITION语法,建议不要使用partition表;
- INSERT操作不支持“datetime”字段取值1582年及之前年份;
- INSERT不支持ON DUPLICATE KEY UPDATE 关联子查询列;
INSERT INTO t1(a, b)
SELECT * FROM(SELECT c, d FROM t2 UNION SELECT e, f FROM t3) AS dt
ON DUPLICATE KEY UPDATE b = b + c;
示例ON DUPLICATE KEY UPDATE语句中引用了子查询列c。 - INSERT和REPLACE不支持拆分键值为DEFAULT关键字;
UPDATE和DELETE
- 不支持更新拆分键值为DEFAULT的关键字;
- 不支持在一个语句中对同一字段重复更新;
- 不支持关联更新拆分键;
UPDATE tbl_1 a,tbl_2 b set a.name=b.name where a.id=b.id;
示例中“name”为tbl_1的拆分键。 - 不支持通过INSERT ON DUPLICATE KEY UPDATE更新拆分键;
- 不支持自关联更新;
UPDATE tbl_1 a,tbl_1 b set a.tinyblob_col=concat(b.tinyblob_col,'aaabbb'); - 不支持不带关联条件的关联更新;
UPDATE tbl_3,tbl_4 SET tbl_3.varchar_col='dsgfdg'; - 关联更新不支持在目标列的赋值语句或表达式中引用其它目标列;
UPDATE tbl_1 a,tbl_2 b SET a.name=concat(b.name,'aaaa'),b.name=concat(a.name,'bbbb') ON a.id=b.id; - 对拆分字段的更新,将转换成delete+insert两个阶段操作,操作中间不保证其它涉及到这张表中的拆分字段值的查询语句的一致性;
DDL
- 库名不可修改,拆分字段的名称和类型都不可以变更;
- 不支持通过SQL直接创建、删除逻辑库;
- 不支持FULL_TEXT索引;
- 不支持 CREATE TABLE tblName AS SELECT stmt 语法;
- 不支持 CREATE TABLE tblName LIKE stmt 语法;
- 不支持单条语句中DROP多张表;
- DDL语句不支持多语句;
- 广播表、拆分表不支持创建外键;
- 不支持创建以“_drds”为前缀的表;
- 不支持创建TEMPOPARY类型的拆分表、广播表;
- create table中的unique key只能保证物理表内唯一,无法保证全局唯一;
索引
- 不支持全局二级索引;
- 不支持全局唯一索引, unique key\primary key无法保证全局唯一;
表回收站
- 不支持hint;
- 不支持按逻辑库清除回收表;
- 不支持按逻辑表清除回收表;
- 表恢复后不保证全局唯一序列无缝衔接递增,只确保递增;
- 数据不支持分片变更;
- 不支持无限期保留副本;
- 不支持恢复到任意表名;
- 不支持不限量副本数;
事务
- 不Savepoints;
- 不支持XA语法(DRDS内部已经通过XA实现了分布式事务,不需要用户层再处理这个语义);
- 不支持自定义事务隔离级别,目前DRDS只支持READ
COMMITTED隔离级别。考虑到兼容性因素,对于设置数据库隔离级别的语句(如SET GLOBAL TRANSACTION ISOLATION
LEVEL REPEATABLE READ),DRDS不会报错,但会忽略对事务隔离级别的修改; - 不支持设置事务为只读(START TRANSACTION READ ONLY),考虑到兼容性因素,DRDS会将只读事务的开启自动转换为开启读写事务;
权限
- 不支持列级权限;
- 不支持子程序层级权限;
数据库管理语句
- 不支持SHOW TRIGGERS语法;
- 不支持SHOW PROFILES、SHOW ERRORS、show warnings等多数运维SHOW语句;
- 下列的SHOW指令会随机发到某个物理分片,每个物理分片如果在不同的RDS for MySQL实例上,查得的变量或者表信息可能不同:
SHOW TABLE STATUS;
SHOW VARIABLES Syntax;
SHOW WARNINGS Syntax 不支持 LIMIT/COUNT 的组合;
SHOW ERRORS Syntax 不支持 LIMIT/COUNT 的组合;
INFORMATION_SCHEMA - 仅支持SCHEMATA、TABLES、COLUMNS、STATISTICS、PARTITIONS的简单查询(没有子查询、JOIN、聚合函数、ORDER BY、 LIMIT);
高危操作提示
在您使用DRDS过程中,请不要进行以下高危操作:
- 为避免系统表、元数据等信息被误清理,用户尽量避免直连DN节点进行数据操作。
- 为避免元数据丢失,用户请不要清理DRDS系统表(如:TBL_DRDS_TABLE、MYCAT_SEQUENCE)。