华为云用户手册

  • “代码编写、代码合并、版本发布”三层缺陷防护,兼顾效率与质量 优秀的代码质量保障实践,往往将代码检查融入到开发作业流中,在用户代码编写、代码提交时进行自动化的审计检查,并对团队每日产出的代码进行持续编程规范和质量检查。 这一活动实践要求已是安全开发过程SDL、DevSecOps等众多优秀开发模式推荐进行的实践要求。 代码检查服务提供丰富的API接口、涵括任务新建、任务设置、任务扫描、任务报告解析等检查业务全流程,支持用户使用接口方式无缝集成到自建CI/CD或者CodeArts,作业数据灵活对接到客户看板,代码质量可视、可管理。 同时通过灵活的任务管理,支持排除目录设置避免无效扫描,并支持混合语言检查、简化部署、一次获取整个版本代码质量。
  • 兼容接口和版本 介绍GeminiDB Redis目前支持的兼容接口和版本。 表1 兼容接口和版本 兼容接口 实例类型 版本 Redis 集群版 采用分片集群架构,提供Proxy代理连接,同时兼容Cluster接入方式。性能水平扩展能力强,可支撑百万QPS、数十TB级业务量。 主备版 标准的master-replica架构,兼容单机、哨兵接入方式。适用于无法使用hashtag的业务场景。 6.2(包含6.2.x)、5.0及以下版本。 父主题: 产品介绍
  • GeminiDB基础命令 针对社区Redis提供的全部命令类型,GeminiDB 5.0和6.2(包含6.2.x)兼容情况如下: 表1 GeminiDB Redis接口命令兼容度 Redis命令分类 命令详情 GeminiDB Redis 5.0兼容情况 GeminiDB Redis 6.2(包含6.2.x)兼容情况 String String命令列表 100%兼容 100%兼容 Hash Hash命令列表 100%兼容 100%兼容 List List命令列表 100%兼容 100%兼容 Sorted set Sorted set命令列表 100%兼容 100%兼容 Set Set命令列表 100%兼容 100%兼容 Bitmap Bitmap命令列表 100%兼容 100%兼容 Stream Stream命令列表 100%兼容 暂不支持xgroup子命令createconsumer Geo Geo命令列表 100%兼容 100%兼容 Hyperloglog Hyperloglog命令列表 100%兼容 100%兼容 发布订阅(Pub/Sub) 发布订阅命令列表 100%兼容 100%兼容 Lua脚本(Scripting) Lua脚本命令列表 100%兼容 100%兼容 事务(Transactions) 事务命令列表 100%兼容 100%兼容 其他通用Key操作 其他通用Key操作 暂不支持2个命令: SWAPDB、MOVE 暂不支持2个命令: SWAPDB、MOVE
  • GeminiDB运维管理命令 GeminiDB在社区Redis的INFO/CLIENT/SLOWLOG/MONITOR/CONFIG等运维管理命令能力基础上,提供全面服务化且高度易用的DBA运维能力。 表2 GeminiDB Redis接口运维功能介绍 GeminiDB运维功能 GeminiDB运维功能简介 社区Redis同类命令/能力 监控指标 提供命令级别QPS/平均时延/P99时延指标。提供丰富节点级指标以及实例级汇聚指标。 INFO 实例会话 展示客户端IP信息以及Top会话统计,支持一键批量Kill会话。 CLIENT 参数配置 展示慢日志及诊断信息。 CONFIG 慢日志 审计高危命令操作。 SLOWLOG 用户权限管理 支持账号管理功能 ACL (Access Control List) 审计日志 支持一键查询与修改内核参数。是社区Redis CONFIG命令的能力加强版。 MONITOR 实时大Key诊断 实时观测大Key信息,不影响业务。 不支持 实时热Key诊断 实时观测热Key情况,不影响业务。 不支持 实时前缀Key分析 实时观测前缀Key分布,不影响业务。 不支持 高危命令重命名 支持修改命令别名以及查看重命名记录。 通过手动修改配置文件实现 异常Key熔断 一键屏蔽指定Key,拒绝被业务访问。用于快速恢复。 不支持
  • GeminiDB高级命令 exHASH类型 使用场景:GeminiDB支持为Hash Key的每个Field设置过期时间,适用于构建频控、购物车等业务。 命令列表:请参考exHash命令列表。 使用方式:请参考广告频控业务exHash方案。 布隆过滤器(BloomFilter)类型 功能介绍:布隆过滤器(BloomFilter)可用于检索某个元素是否存在于某个海量集合中,适用于Web拦截器、防缓存穿透等场景。 命令列表:请参考布隆过滤器(Bloom Filter)介绍。 使用方式:请参考布隆过滤器(Bloom Filter)命令说明。
  • 约束条件 仅“专业版”支持VPC边界防火墙。 依赖企业路由器(Enterprise Router, ER)服务引流。 仅支持防护当前账号所属企业项目下的VPC。 如果您存在私用公网(即使用10.0.0.0/8、 172.16.0.0/12、192.168.0.0/16 以及运营商级NAT保留网段100.64.0.0/10 以外的公网网段作为私网地址段)的情况,请您提交工单进行私网网段扩容,否则云防火墙可能无法正常转发您VPC间的流量。
  • 配置原理 您需要按以下步骤操作: 创建防火墙(以命名vpc-cfw-er为例)并关联子网,请参见创建防火墙。 如您新创建了企业路由器,请参见配置企业路由器(新创建企业路由器),分解操作如下: 配置所有VPC(包括防火墙VPC和需要互联的VPC)的路由转向企业路由器,请参见3 将路由转向企业路由器。 创建所有VPC(包括防火墙VPC和需要互联的VPC)的连接,请参见5 添加连接。 创建两个路由表(以er-RT1和er-RT2为例),请参见6 创建两个路由表。 配置关联路由表er-RT1将流量从VPC传输到云防火墙,请参见7 配置路由表er-RT1。 配置传播路由表er-RT2将流量从云防火墙传输到VPC,请参见8 配置路由表er-RT2。 开启防护前,需验证流量只通过企业路由器时正常通信,请参见配置验证方法。 如您企业路由器已产生流量,请参见配置企业路由器(已有企业路由器),分解操作如下: 创建防火墙VPC(vpc-cfw-er)的连接,请参见4. 添加防火墙连接。 从默认路由表(er-RT1)中删除自动生成的防火墙VPC(vpc-cfw-er)的关联和传播功能,请参见删除关联和传播。 创建一个新的路由表(er-RT2),并配置关联和传播功能,请参见6. 创建路由表er-RT2和7 配置路由表er-RT2。 配置默认路由表(er-RT1)的静态路由及删除表中所有的传播,请参见8. 配置默认路由表er-RT1。 (可选)设置传播路由表为er-RT2后,添加新VPC只需添加连接,无需其他配置,设置传播路由表请参见9 更改传播路由表。 图3 流量走势图
  • 字符串函数 表1 字符串函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 BIN() 支持 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 2 CONCAT() 支持 无论参数的数据类型如何,concat返回值的数据类型始终为text;MySQL的concat在含有二进制类型参数时,返回值为二进制类型。 3 CONCAT_WS() 支持 无论参数的数据类型如何,concat_ws返回值的数据类型始终为text;MySQL的concat_ws在含有二进制类型参数时,返回值为二进制类型,其他情况返回值为字符串类型。 4 ELT() 支持 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 函数入参2支持类型存在差异,GaussDB入参2支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 大对象类型:tinyblob,blob,mediumblob,longblob 日期类型:datetime,timestamp,date,time 5 FIELD 支持 函数入参在bigint最大值 ~ bigint unsigned最大值范围内的数字,存在不兼容。 函数入参为浮点型float(m, d)、double(m, d)、real(m, d)时精度更高,存在不兼容。 6 FIND_IN_SET() 支持 当数据库encoding = 'SQL_ASCII'时,不支持默认的大小写判断规则,即在用户不指定字符集规则的情况下,大写与小写区分判断。 7 INSERT() 支持 Int64类型传参有范围限制,一旦超出-9223372036854775808~9223372036854775807范围会直接报错,MySQL对数值类型传参范围无限制,异常会告警按照上限或下限数值处理。 字符串传参有限制,入参text类型字符串长度最大为2^30-5字节,入参bytea类型字符串长度最大为2^30-512字节。 s1和s2任意参数为bytea类型时,涉及到结果出现非法字符的情况可能展示结果与MySQL有差异但是字符编码与MySQL是一致的。 8 LOCATE() 支持 入参1为bytea类型,入参2为text类型时,GaussDB与MySQL行为存在差异。 9 MAKE_SET() 支持 bits参数为整型时,最大范围支持到int128,低于MySQL范围。 bits参数为日期类型datetime、timestamp、date、time,由于时间类型转整型与MySQL存在差异,目前均未做支持。 bit类型或bool类型由于此类数据类型Gauss与MySQL存在差异,返回结果导致的差异为Gauss与MySQL固有差异。bits入参为bool类型,str入参为bit类型与bool类型均不做支持。 bits入参为字符串或文本类型时,仅支持纯整型数字形式,其他形式存在差异。且纯整型数字范围限制在bigint范围。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 10 QUOTE() 支持 已知str字符串中含有“\Z”,“\r”,“\%”,“\_”,GaussDB未进行转义,与MySQL存在差异。斜线后跟部分数字也会引起差异,如“\563”。由转义字符引起的本函数与MySQL的差异,此为Gauss与MySQL的转义字符差异。 str字符串中的“\b”,输出结果表现形式与MySQL有差异。此为Gauss与MySQL的固有差异 str字符串中含有“\0”时,GaussDB由于UTF-8字符集不识别该字符,输入不成功。此为GaussDB与MySQL的固有差异 str为bit或bool类型时,由于Gauss与MySQL此类型目前有差异,暂不支持此类类型。 Gauss最大支持1GB数据传输,str入参长度最大支持536870908,函数返回结果字符串最大支持1GB。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 11 SPACE() 支持 GaussDB入参1最大支持1073741818,超出返回空字符串。MySQL的入参1默认最大支持4194304,超出告警。 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 12 SUBSTR() 支持 - 13 SUBSTRING() 支持 - 14 SUBSTRING_INDEX() 支持 - 15 STRCMP() 支持 支持入参类型与M存在差异,GaussDB支持类型如下: 字符类型:CHAR、VARCHAR、NVARCHAR2、TEXT 二进制类型:BYTEA 数值类型:TINYING [UNSIGNED]、SMALLINT [UNSIGNED]、INTEGER [UNSIGNED]、BIGINT [UNSIGNED]、FLOAT4、FLOAT8、NUMERIC 日期时间类型:DATE、TIME WITHOUT TIME ZONE、DATETIME、TIMESTAMPTZ 对于数值类型中的浮点类型,由于连接参数设置不同,精度可能与M有差异,不建议使用该场景,或使用NUMERIC类型代替。 16 SHA()/SHA1() 支持 - 17 SHA2() 支持 - 父主题: 系统函数
  • 强制转换函数 表1 强制转换函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 CAST() 支持 GaussDB不支持使用CAST(expr AS CHAR[(N)] charset_info或者CAST(expr AS NCHAR[(N)])转换字符集。 GaussDB不支持使用CAST(expr AS JSON)将表达式转换为JSON。 GaussDB支持使用CAST(expr AS FLOAT[(p)])或CAST(expr AS DOUBLE)将表达式转换为浮点类型,MySQL 5.7版本不支持此转换。 2 CONVERT() 支持 GaussDB不支持使用CONVERT(expr, CHAR[(N)] charset_info或者CAST(expr, NCHAR[(N)])转换字符集。 GaussDB不支持使用CAST(expr, JSON)将表达式转换为JSON。 GaussDB支持使用CONVERET(expr, FLOAT[(p)])或CONVERT(expr, DOUBLE)将表达式转换为浮点类型,MySQL 5.7版本不支持此转换。 父主题: 系统函数
  • DDL 序号 MySQL数据库功能概述 详细语法说明 GaussDB数据库实现差异 1 建表和修改表时支持创建主键、UNIQUE索引、外键约束 ALTER TABLE、CREATE TABLE GaussDB当前不支持UNIQUE INDEX|KEY index_name语法,使用UNIQUE INDEX|KEY index_name语法时会报错。 当约束被建立为全局二级索引,SQL语句中指定using btree时,底层会建立为ubtree。 当约束关联的表为ustore,且SQL语句中指定为using btree时,底层会建立为ubtree。 2 支持自增列 ALTER TABLE、CREATE TABLE 自动增长列建议为索引(非全局二级索引)的第一个字段,否则建表时产生警告,含有自动增长列的表进行某些操作时会产生错误,例如:ALTERT TABLE EXCHANGE PARTITION。MySQL自动增长列必须为索引第一个字段。 AUTO_INCREMENT = value语法,value必须为小于2^127的正数。MySQL不校验value。 当自增值已经达到字段数据类型的最大值时,继续自增将产生错误。MySQL有些场景产生错误或警告,有些场景仍自增为最大值。 不支持innodb_autoinc_lock_mode系统变量,GaussDB的GUC参数auto_increment_cache=0时,批量插入自动增长列的行为与MySQL系统变量innodb_autoinc_lock_mode=1相似。 自动增长列在导入数据或者进行Batch Insert执行计划的插入操作时,对于混合0、NULL和确定值的场景,如果产生错误,后续插入自增值不一定与MySQL完全一致。 提供auto_increment_cache参数,可以控制预留自增值的数量。 并行导入或插入自动增长列触发自增时,每个并行线程预留的缓存值也只在其线程中使用,未完全使用完毕的话,也会出现表中自动增长列的值不连续的情况。并行插入产生的自增值结果无法保证与MySQL完全一致。 本地临时表中的自动增长列批量插入时不会预留自增值,正常场景不会产生不连续的自增值。MySQL临时表与普通表中的自动增长列自增结果一致。 SERIAL数据类型为原有的自增列,与AUTO_INCREMENT自增列有差异。MySQL的SERIAL数据类型就是AUTO_INCREMENT自增列。 不允许auto_increment_offset的值大于auto_increment_increment的值,会产生错误。MySQL允许,并说明auto_increment_offset会被忽略。 在表有主键或索引的情况下,ALTER TABLE命令重写表数据的顺序与MySQL不一定相同,GaussDB按照表数据存储顺序重写,MySQL会按主键或索引顺序重写,导致自增值的顺序可能不同。 ALTER TABLE命令添加或修改自增列时,第一次预留自增值的数量是表统计信息中的行数,统计信息的行数不一定与MySQL一致。 last_insert_id函数返回值为128位的整型。 在触发器或用户自定义函数中自增时,刷新last_insert_id返回值。MySQL不刷新。 对GUC参数auto_increment_offset和auto_increment_increment设置超出范围的值会产生错误。MySQL会自动改为边界值。 3 支持前缀索引 CREATE INDEX、ALTER TABLE、CREATE TABLE 前缀长度不得超过2676,键值的实际长度受内部页面限制,若字段中含有多字节字符或者一个索引上有多个键,索引行长度可能会超限报错。 CREATE INDEX语法中,不支持以下关键字作为前缀键的字段名称:COALESCE、EXTRACT、GREATEST、LEAST、LNNVL、NULLIF、NVL、NVL2、OVERLAY、POSITION、REGEXP_LIKE、SUBSTRING、TIMESTAMPDIFF、TREAT、TRIM、XMLCONCAT、XMLELEMENT、XMLEXISTS、XMLFOREST、XMLPARSE、XMLPI、XMLROOT、XMLSERIALIZE。 主键索引中不支持前缀键。 4 支持指定字符集与排序规则 ALTER SCHEMA、ALTER TABLE、 CREATE SCHEMA、CREATE TABLE - 5 修改表时支持在表第一列前面或者在指定列后面添加列 ALTER TABLE - 6 修改列名称/定义语法兼容 ALTER TABLE - 7 定时任务EVENT语法兼容 ALTER EVENT、CREATE EVENT、DROP EVENT、 SHOW EVENTS - 8 创建分区表语法兼容 CREATE TABLE PARTITION、CREATE TABLE SUBPARTITION - 9 建表和修改表时支持指定表级和列级comment CREATE TABLE、ALTER TABLE - 10 创建索引时支持指定索引级comment CREATE INDEX - 11 交换普通表和分区表分区的数据 ALTER TABLE PARTITION ALTER TABLE EXCHANGE PARTITION的差异点: 对于自增列,MySQL执行alter exchange partition后,自增列会被重置;GaussDB 则不会被重置,自增列则按照旧的自增值递增。 MySQL表或分区使用tablespace时,则无法进行分区和普通表数据的交换;GaussDB表或分区使用不同的tablespace时,仍可进行分区和普通表数据的交换。 对于列默认值,MySQL不会校验默认值,因此默认值不同时也可进行分区和普通表数据的交换;GaussDB会校验默认值,如果默认值不同,则无法进行分区和普通表数据的交换。 MySQL在分区表或普通表上进行DROP列操作后,表结构仍然一致,则可进行分区和普通表数据的交换;GaussDB需要保证普通表和分区表的被删除列严格对齐才能进行分区和普通表数据的交换。 MySQL和GaussDB的哈希算法不同,所以两者在相同的hash分区存储的数据可能不一致,导致最后交换的数据也可能不一致。 MySQL的分区表不支持外键,普通表包含外键或其他表引用普通表的外键,则无法进行分区和普通表数据的交换;GaussDB的分区表支持外键,在两个表的外键约束一致时,则可进行分区和普通表数据的交换,GaussDB的分区表不带外键,普通表有其他表引用,如果分区表和普通表表一致,则可进行分区和普通表数据的交换。 12 支持删除表的主键外键约束 ALTER TABLE DROP [PRIMARY | FOREIGN]KEY - 13 支持CREATE TABLE ... LIKE语法兼容 CREATE TABLE ... LIKE 在MySQL 8.0.16 之前的版本中,CHECK约束会被语法解析但功能会被忽略,表现为不复制CHECK约束,GaussDB支持复制CHECK约束。 对于主键约束名称,在建表时,MySQL所有主键约束名称固定为PRIMARY KEY,GaussDB不支持复制。 对于唯一键约束名称,在建表时,MySQL支持复制,GaussDB不支持复制。 对于CHECK约束名称,在建表时,MySQL 8.0.16 之前的版本无CHECK约束信息,GaussDB支持复制。 对于索引名称,在建表时,MySQL支持复制,GaussDB不支持复制。 在跨sql_mode模式建表时,MySQL受宽松模式和严格模式控制,GaussDB可能存在严格模式失效的情况。 例如:源表存在默认值“0000-00-00”,在“no_zero_date”严格模式下,GaussDB建表成功,且包含默认值“0000-00-00”,严格模式失效;而MySQL建表失败,受严格模式控制。 针对跨数据库创建表,MySQL支持,GaussDB不支持。 14 支持更改表名兼容语法 ALTER TABLE tbl_name RENAME [TO | AS | =] new_tbl_name; RENAME {TABLE | TABLES} tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2, ...]; GaussDB的alter rename语法仅支持修改表名称功能操作,不能耦合其它功能操作。 GaussDB仅旧表名字段支持如schema.table_name用法;且新表名与旧表名将属于同一schema下。 GaussDB不支持新旧表跨shema重命名操作;但如有权限,则可在当前schema下修改其它schema下表名称。 GaussDB的rename多组表的语法支持全为本地临时表的重命名,不支持本地临时表和非本地临时表组合的场景。 15 支持增加子分区语法兼容 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; action: move_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause | ilm_clause add_clause: ADD {{partition_less_than_item | partition_start_end_item | partition_list_item} | PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})} 不支持如下语法添加多分区: ALTER TABLE table_name ADD PARTITION (partition_definition1, partition_definition1,…); 仅支持原有添加多分区语法: ALTER TABLE table_name ADD PARTITION (partition_definition1), ADD PARTITION (partition_definition2[y1] ), …; 父主题: SQL
  • 日期和时间函数 以下为GaussDB M-Compatibility兼容性日期时间函数公共说明。 《M-Compatibility开发指南》中“函数和操作符”章节函数入参为时间类型表达式的情况: 时间类型表达式主要包括TEXT、DATETIME、DATE或TIME,但所有可以隐式转换为时间表达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表达式生效。 生效的情况根据函数有所不同,比如:DATEDIFF函数由于只计算日期的差值,所以时间表达式会当做日期来解析。TIMESTAMPDIFF函数由于计算时间差值时是根据UNIT来决定的,所以会根据UNIT选择将时间表达式当做DATE或者TIME或者DATETIME来解析。 函数入参为无效日期的情况: 一般而言,日期时间函数支持DATE、DATETIME的范围和MySQL保持一致。DATE支持的范围为'0000-01-01'到'9999-12-31',DATETIME支持的范围为'0000-01-01 00:00:00'到'9999-12-31 23:59:59'。虽然GaussDB支持的DATE、DATETIME范围大于MySQL,但是越界仍然算无效日期。 大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。 新框架下GaussDB的大部分日期时间函数与MySQL一致,一些函数的差异如下表所示: 表1 日期与和时间函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 ADDDATE() 支持 - 2 ADDTIME() 支持 - 3 CONVERT_TZ() 支持 - 4 CURDATE() 支持 - 5 CURRENT_DATE()/CURRENT_DATE 支持 - 6 CURRENT_TIME()/CURRENT_TIME 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIME(257) == SELECT CURRENT_TIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 7 CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIMESTAMP(257) == SELECT CURRENT_TIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 8 CURTIME() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURTIME(257) == SELECT CURTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 9 DATE() 支持 - 10 DATE_ADD() 支持 - 11 DATE_FORMAT() 支持 - 12 DATE_SUB() 支持 - 13 DATEDIFF() 支持 - 14 DAY() 支持 - 15 DAYNAME() 支持 - 16 DAYOFMONTH() 支持 - 17 DAYOFWEEK() 支持 - 18 DAYOFYEAR() 支持 - 19 EXTRACT() 支持 - 20 FROM_DAYS() 支持 - 21 FROM_UNIXTIME() 支持 - 22 GET_FORMAT() 支持 - 23 HOUR() 支持 - 24 LAST_DAY() 支持 - 25 LOCALTIME()/LOCALTIME 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIME(257) == SELECT LOCALTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 26 LOCALTIMESTAMP/LOCALTIMESTAMP() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIMESTAMP(257) == SELECT LOCALTIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 27 MAKEDATE() 支持 - 28 MAKETIME() 支持 - 29 MICROSECOND() 支持 - 30 MINUTE() 支持 - 31 MONTH() 支持 - 32 MONTHNAME() 支持 - 33 NOW() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT NOW(257)==SELECT NOW(1))。 GaussDB只支持[0,6]合法值,其他值报错。 34 PERIOD_ADD() 支持,有差异 整数溢出处理的行为。 MySQL在5.7版本,此函数入参结果最大值为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 负数period的表现。 MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 period月份越界的表现。 MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 35 PERIOD_DIFF() 支持,有差异 整数溢出处理的行为。 MySQL在5.7版本,此函数入参结果最大值为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 负数period的表现。 MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 period月份越界的表现。 MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 36 QUARTER() 支持 - 37 SEC_TO_TIME() 支持 - 38 SECOND() 支持 - 39 STR_TO_DATE() 支持 返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是datetime、date。 40 SUBDATE() 支持 - 41 SUBTIME() 支持 - 42 SYSDATE() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕。 GaussDB不回绕。 43 TIME() 支持 - 44 TIME_FORMAT() 支持 - 45 TIME_TO_SEC() 支持 - 46 TIMEDIFF() 支持 - 47 TIMESTAMP() 支持 - 48 TIMESTAMPADD() 支持 - 49 TIMESTAMPDIFF() 支持 - 50 TO_DAYS() 支持 - 51 TO_SECONDS() 支持 - 52 UNIX_TIMESTAMP() 支持 MySQL会根据入参是否存在小数位,决定返回定点型还是整型。当前GaussDB在内层嵌套操作符或函数时,返回的类型与MySQL可能存在不同。当内层节点返回定点、浮点、字符型、时间类型(不包括DATE类型)时,MySQL可能返回整型,GaussDB会返回定点型。 53 UTC_DATE() 支持 - 54 UTC_TIME() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 55 UTC_TIMESTAMP() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 56 WEEK() 支持 - 57 WEEKDAY() 支持 - 58 WEEKOFYEAR() 支持 - 59 YEAR() 支持 - 60 YEARWEEK() 支持 - 父主题: 系统函数
  • 系统表和系统视图 序号 系统表或系统视图 差异列 M-Compatibility与MySQL的差异 1 information_schema.columns generation_expression 该字段输出结果因涉及M-Compatibility与MySQL的表达式的字符串拼接逻辑的不同而存在差异。 2 information_schema.columns data_type 该字段输出结果因涉及M-Compatibility的数据类型format_type输出,目前未修改,与MySQL存在差异。 3 information_schema.columns column_type 该字段输出结果因涉及M-Compatibility的数据类型format_type输出,目前未修改,与MySQL存在差异。 4 information_schema.tables engine M-Compatibility中不支持该字段。 5 information_schema.tables version M-Compatibility中不支持该字段。 6 information_schema.tables row_format M-Compatibility中不支持该字段。 7 information_schema.tables avg_row_length M-Compatibility下表示使用数据文件除以所有元组数(包括活元组和死元组)的结果。表中没有元组,值为null。 8 information_schema.tables max_data_length M-Compatibility中不支持该字段。 9 information_schema.tables data_free M-Compatibility中表示死元组在总元组中的比例乘以数据文件大小。如果表中没有元组,则为null。 10 information_schema.tables check_time M-Compatibility中不支持该字段。 11 information_schema.tables create_time 在M-Compatibility下,此字段与MySQL行为表现有差异,对于创建视图的情形MySQL中该字段置null,M-Compatibility则显示实际的创建表时间。数据库自带的表,视图设置null。 12 information_schema.tables update_time M-Compatibility数据库自带的表,视图设置null。 13 information_schema.statistics collation M-Compatibility只有值A、D,不会是NULL。 14 information_schema.statistics packed M-Compatibility中不支持该字段。 15 information_schema.statistics sub_part M-Compatibility中不支持该字段。 16 information_schema.statistics comment M-Compatibility中不支持该字段。 17 information_schema.partitions subpartition_name M-Compatibility中,如果分区不是子分区,则为null。 18 information_schema.partitions subpartition_ordinal_position M-Compatibility中,如果分区不是子分区,则为null。 19 information_schema.partitions partition_method M-Compatibility中, 分区策略。如果分区不是一级分区,则为null。 'r':范围分区。 'l':list分区。 'h':hash分区。 'i':间隔分区。 20 information_schema.partitions subpartition_method M-Compatibility中, 子分区策略。如果分区不是二级分区,则为null。 'r':范围分区。 'l':list分区。 'h':hash分区。 'i':间隔分区。 21 information_schema.partitions partition_description M-Compatibility中,是区分一级分区和二级分区的。 22 information_schema.partitions partition_expression M-Compatibility中不支持该字段。 23 information_schema.partitions subpartition_expression M-Compatibility中不支持该字段。 24 information_schema.partitions data_length M-Compatibility中不支持该字段。 25 information_schema.partitions max_data_length M-Compatibility中不支持该字段。 26 information_schema.partitions index_length M-Compatibility中不支持该字段。 27 information_schema.partitions data_free M-Compatibility中不支持该字段。 28 information_schema.partitions create_time M-Compatibility中不支持该字段。 29 information_schema.partitions update_time M-Compatibility中不支持该字段。 30 information_schema.partitions check_time M-Compatibility中不支持该字段。 31 information_schema.partitions checksum M-Compatibility中不支持该字段。 32 information_schema.partitions partition_comment M-Compatibility中不支持该字段。 33 information_schema.partitions nodegroup M-Compatibility中不支持该字段。 视图中对于整型的类型回显,不支持指定精度范围。如MySQL的bigint(1),M-Compatibility下对应的是bigint类型,MySQL中bigint(21) unsigned,在M-Compatibility下对应的是bigint unsigned类型。 MySQL中int类型,在M-Compatibility中是integer类型。 MySQL中的set、enum类型的字段,M-Compatibility中都不支持。m_schema.columns_priv视图的Column_priv字段、m_schema.tables_priv视图的Table_priv,Column_priv字段、m_schema.procs_priv视图的Routine_type,Proc_priv字段、m_schema.proc视图的type,language,sql_data_access,is_deterministic,security_type,sql_mode字段、m_schema.func视图的type字段均不支持,在此版本中不予显示。 由于information_schema.tables、information_schema.statistics中table_rows、avg_row_length、data_length、data_free、index_length、cardinality基于统计信息获取,查看前请先执行ANALYZE,更新统计信息后再查看(如果数据库中更新数据,建议延迟执行ANALYZE)。 information_schema.statistics包含的索引列需要是创建索引中索引列是完整的表列,如果索引列是表达式,不在这个视图中。 information_schema.partitions 中table_row, avg_row_length基于统计信息获取,查看前请先执行ANALYZE,更新统计信息后再查看(如果数据库中更新数据,建议延迟执行ANALYZE)。 information_schema.partitions中一级分区和二级分区是分开呈现。 对于支持的grantee字段,MySQL的格式是'user_name'@'host_name' ,在M-Compatibility数据库,是被授予权限的用户或角色的名称。 对于支持的host字段,在M-Compatibility数据库,返回当前节点的hostname。 m_schema.tables_priv、information_schema.user_privileges、information_schema.schema_privileges,information_schema.table_privileges、information_schema.column_privileges、m_schema.columns_priv、m_schema.func、m_schema.procs_priv 在MySQL下需要授权后才能查看视图内容,M-Compatibility数据库可以根据默认权限查看到对应的内容。如对于表t1,在MySQL下需要先对t1给对应的用户授权,才能在权限视图中看到对应的权限信息,M-Compatibility数据库下则可以直接在视图中看到t1表相关的权限信息。 父主题: SQL
  • 日期与时间数据类型 表1 日期与时间数据类型 序号 MySQL数据库 GaussDB数据库 差异 1 DATE 支持,存在差异。 GaussDB支持date数据类型,与MySQL相比规格上存在如下差异: 输入格式: 分隔符:反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 2 DATETIME[(fsp)] 支持,存在差异。 GaussDB支持datetime数据类型,与MySQL相比规格上存在如下差异: 输入格式: 分隔符:反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 3 TIMESTAMP[(fsp)] 支持,存在差异。 GaussDB支持timestamp数据类型,与MySQL相比规格上存在如下差异: 输入格式: 分隔符:反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 4 TIME[(fsp)] 支持,存在差异。 GaussDB支持time数据类型,与MySQL相比规格上存在如下差异: 输入格式: 分隔符:反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 当时间类型的时、分、秒、纳秒为0时,GaussDB和MySQL可能存在符号位不同的情况。 5 YEAR[(4)] 支持。 - GaussDB不支持ODBC语法的字面量: { d 'str' } { t 'str' } { ts 'str' } GaussDB支持标准SQL字面量,且类型关键字后面可选择添加精度,MySQL不支持: DATE[(n)] 'str' TIME[(n)] 'str' TIMESTAMP[(n)] 'str' 父主题: 数据类型
  • 字符集 GaussDB数据库支持指定数据库、模式、表或列的字符集,支持的范围如下。 表1 字符集列表 序号 MySQL数据库 GaussDB数据库 1 utf8mb4 支持 2 utf8 支持 3 gbk 支持 4 gb18030 支持 5 binary 支持 utf8和utf8mb4在GaussDB中为同一个字符集,编码最大长度为4字节。由此可导致如下差异:当前字符串字符集为utf8,指定其字符序为utf8mb4_bin/utf8mb4_general_ci/utf8mb4_unicode_ci/utf8mb4_0900_ai_ci时(例如select _utf8'a' collate utf8mb4_bin),MySQL报错,GaussDB不报错。当字符串字符集为utf8mb4,指定其字符序为utf8_bin/utf8_general_ci/utf8_unicode_ci时也存在同样差异。 词法语法解析按照字节流解析,当多字节字符中包含与'\', '\'', '\\'等符号一致的编码时,会导致与mysql行为不一致,建议暂时关闭转义符开关进行规避。 父主题: MySQL数据库兼容性M-Compatibility模式
  • 字符串函数 表1 字符串函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 BIN() 支持 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 2 CONCAT() 支持 无论参数的数据类型如何,concat返回值的数据类型始终为text;MySQL的concat在含有二进制类型参数时,返回值为二进制类型。 3 CONCAT_WS() 支持 无论参数的数据类型如何,concat_ws返回值的数据类型始终为text;MySQL的concat_ws在含有二进制类型参数时,返回值为二进制类型,其他情况返回值为字符串类型。 4 ELT() 支持 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 函数入参2支持类型存在差异,GaussDB入参2支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 大对象类型:tinyblob,blob,mediumblob,longblob 日期类型:datetime,timestamp,date,time 5 FIELD() 支持 函数入参为在bigint最大值~ bigint unsigned最大值范围内的数字,存在不兼容。 函数入参为浮点型float(m, d)、double(m, d)、real(m, d)时精度更高,存在不兼容。 6 FIND_IN_SET() 支持 当数据库encoding = 'SQL_ASCII'时,不支持默认的大小写判断规则,即在用户不指定字符集规则的情况下,大写与小写区分判断。 7 INSERT() 支持 Int64类型传参有范围限制,一旦超出-9223372036854775808~9223372036854775807范围会直接报错,MySQL对数值类型传参范围无限制,异常会告警按照上限或下限数值处理。 字符串传参有限制,入参text类型字符串长度最大为2^30-5字节,入参bytea类型字符串长度最大为2^30-512字节。 s1和s2任意参数为bytea类型时,涉及到结果出现非法字符的情况可能展示结果与MySQL有差异但是字符编码与MySQL是一致的。 8 LOCATE() 支持 入参1为bytea类型,入参2为text类型时,GaussDB与MySQL行为存在差异。 9 MAKE_SET() 支持 bits参数为整型时,最大范围支持到int128,低于MySQL范围。 bits参数为日期类型datetime、timestamp、date、time,由于时间类型转整型与MySQL存在差异,目前均未做支持。 bit类型或bool类型由于此类数据类型Gauss与MySQL存在差异,返回结果导致的差异为GaussDB与MySQL固有差异。bits入参为bool类型,str入参为bit类型与bool类型均不做支持。 bits入参为字符串或文本类型时,仅支持纯整型数字形式,其他形式存在差异。且纯整型数字范围限制在bigint范围。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 10 QUOTE() 支持 已知str字符串中含有“\Z”,“\r”,“\%”,“\_”,GaussDB未进行转义,与MySQL存在差异。斜线后跟部分数字也会引起差异,如“\563”。由转义字符引起的本函数与MySQL的差异,此为GaussDB与MySQL的转义字符差异。 str字符串中的“\b”,输出结果表现形式与MySQL有差异。此为GaussDB与MySQL的固有差异 str字符串中含有“\0”时,GaussDB由于UTF-8字符集不识别该字符,输入不成功。此为GaussDB与MySQL的固有差异 str为bit或bool类型时,由于GaussDB与MySQL此类型目前有差异,暂不支持此类类型。 Gauss最大支持1GB数据传输,str入参长度最大支持536870908,函数返回结果字符串最大支持1GB。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 11 SPACE() 支持 GaussDB入参1最大支持1073741818,超出返回空字符串。MySQL的入参1默认最大支持4194304,超出告警。 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 12 SUBSTR() 支持 - 13 SUBSTRING() 支持 - 14 SUBSTRING_INDEX() 支持 - 15 STRCMP() 支持 支持入参类型与M存在差异,GaussDB支持类型如下: 字符类型:CHAR、VARCHAR、NVARCHAR2、TEXT 二进制类型:BYTEA 数值类型:TINYING [UNSIGNED]、SMALLINT [UNSIGNED]、INTEGER [UNSIGNED]、BIGINT [UNSIGNED]、FLOAT4、FLOAT8、NUMERIC 日期时间类型:DATE、TIME WITHOUT TIME ZONE、DATETIME、TIMESTAMPTZ 对于数值类型中的浮点类型,由于连接参数设置不同,精度可能与M有差异,不建议使用该场景,或使用NUMERIC类型代替。 16 SHA() / SHA1() 支持 - 17 SHA2() 支持 - 父主题: 系统函数
  • DDL 序号 概述 详细语法说明 差异 1 建表和修改表时支持创建主键、UNIQUE索引 ALTER TABLE、CREATE TABLE GaussDB当前不支持UNIQUE INDEX|KEY index_name语法,使用UNIQUE INDEX|KEY index_name语法时会报错。MySQL支持。 当约束被建立为全局二级索引,SQL语句中指定using btree时,底层会建立为ubtree。 当约束关联的表为ustore,且SQL语句中指定为using btree时,底层会建立为ubtree。 2 支持前缀索引 CREATE INDEX 前缀长度不得超过2676,键值的实际长度受内部页面限制,若字段中含有多字节字符或者一个索引上有多个键,索引行长度可能会超限报错。 CREATE INDEX语法中,不支持以下关键字作为前缀键的字段名称:COALESCE、EXTRACT、GREATEST、LEAST、LNNVL、NULLIF、NVL、NVL2、OVERLAY、POSITION、REGEXP_LIKE、SUBSTRING、TIMESTAMPDIFF、TREAT、TRIM、XMLCONCAT、XMLELEMENT、XMLEXISTS、XMLFOREST、XMLPARSE、XMLPI、XMLROOT、XMLSERIALIZE。 主键和唯一键索引中不支持前缀键。 3 支持指定字符集与排序规则 ALTER SCHEMA、ALTER TABLE、 CREATE SCHEMA、CREATE TABLE - 4 创建分区表语法兼容 CREATE TABLE PARTITION、CREATE TABLE SUBPARTITION - 5 建表和修改表时支持指定表级和列级comment CREATE TABLE、ALTER TABLE - 6 创建索引时支持指定索引级comment CREATE INDEX - 7 交换普通表和分区表分区的数据 ALTER TABLE PARTITION ALTER TABLE EXCHANGE PARTITION的差异点: MySQL表或分区使用tablespace时,则无法进行分区和普通表数据的交换;GaussDB表或分区使用不同的tablespace时,仍可进行分区和普通表数据的交换。 对于列默认值,MySQL不会校验默认值,因此默认值不同时也可进行分区和普通表数据的交换;GaussDB会校验默认值,如果默认值不同,则无法进行分区和普通表数据的交换。 MySQL在分区表或普通表上进行DROP列操作后,表结构仍然一致,则可进行分区和普通表数据的交换;GaussDB需要保证普通表和分区表的被删除列严格对齐才能进行分区和普通表数据的交换。 MySQL和GaussDB的哈希算法不同,所以两者在相同的hash分区存储的数据可能不一致,导致最后交换的数据也可能不一致。 MySQL的分区表不支持外键,普通表包含外键或其他表引用普通表的外键,则无法进行分区和普通表数据的交换;GaussDB的分区表支持外键,在两个表的外键约束一致时,则可进行分区和普通表数据的交换;GaussDB的分区表不带外键,普通表有其他表引用,如果分区表和普通表表一致,则可进行分区和普通表数据的交换。 8 支持自增列 ALTER TABLE、CREATE TABLE 目前仅支持各个DN独立自增的本地自动增长列。 自动增长列建议为索引(非全局二级索引)的第一个字段,否则建表时产生警告,含有自动增长列的表进行某些操作时会产生错误,例如:ALTERT TABLE EXCHANGE PARTITION。MySQL自动增长列必须为索引第一个字段。 AUTO_INCREMENT = value语法,value必须为小于2^127的正数。MySQL不校验value。 当自增值已经达到字段数据类型的最大值时,继续自增将产生错误。MySQL有些场景产生错误或警告,有些场景仍自增为最大值。 不支持innodb_autoinc_lock_mode系统变量,GaussDB的GUC参数auto_increment_cache=0时,批量插入自动增长列的行为与MySQL系统变量innodb_autoinc_lock_mode=1相似。 自动增长列在导入数据或者进行Batch Insert执行计划的插入操作时,对于混合0、NULL和确定值的场景,如果产生错误,后续插入自增值不一定与MySQL完全一致。 提供auto_increment_cache参数,可以控制预留自增值的数量。 批量插入在不同执行计划下,自增的顺序、自增值预留数量可能与MySQL不完全相同。例如:“INSERT INTO table VALUES(...),(...),...”由于要分布到不同DN,在某些执行计划中,DN获取不到即将插入的行数。 提供auto_increment_cache参数,可以控制预留自增值的数量。 并行导入或插入自动增长列触发自增时,每个并行线程预留的缓存值也只在其线程中使用,未完全使用完毕的话,也会出现表中自动增长列的值不连续的情况。并行插入产生的自增值结果无法保证与MySQL完全一致。 SERIAL数据类型为原有的自增列,与AUTO_INCREMENT自增列有差异。MySQL的SERIAL数据类型就是AUTO_INCREMENT自增列。 不允许auto_increment_offset的值大于auto_increment_increment的值,会产生错误。MySQL允许,并说明auto_increment_offset会被忽略。 在表有主键或索引的情况下,ALTER TABLE命令重写表数据的顺序与MySQL不一定相同,GaussDB按表数据存储顺序重写,MySQL会按主键或索引顺序重写,导致自增值的顺序可能不同。 ALTER TABLE命令添加或修改自增列时,第一次预留自增值的数量是表统计信息中的行数,统计信息的行数不一定与MySQL一致。 在触发器或用户自定义函数中自增时,刷新last_insert_id返回值。MySQL不刷新。 对GUC参数auto_increment_offset和auto_increment_increment设置超出范围的值会产生错误。MySQL会自动改为边界值。 暂不支持last_insert_id函数。 本地临时表暂不支持自动增长列。 9 支持删除表的主键约束 ALTER TABLE - 10 支持CREATE TABLE ... LIKE语法兼容 CREATE TABLE ... LIKE 在MySQL 8.0.16 之前的版本中,CHECK约束会被语法解析但功能会被忽略,表现为不复制CHECK约束,GaussDB支持复制CHECK约束。 对于set数据类型,在建表时,MySQL支持复制,GaussDB不支持复制。 对于主键约束名称,在建表时,MySQL所有主键约束名称固定为PRIMARY KEY,GaussDB不支持复制。 对于唯一键约束名称,在建表时,MySQL支持复制,GaussDB不支持复制。 对于CHECK约束名称,在建表时,MySQL 8.0.16 之前的版本无CHECK约束信息,GaussDB支持复制。 对于索引名称,在建表时,MySQL支持复制,GaussDB不支持复制。 在跨sql_mode模式建表时,MySQL受宽松模式和严格模式控制,GaussDB可能存在严格模式失效的情况。 例如:源表存在默认值“0000-00-00”,在“no_zero_date”严格模式下,GaussDB建表成功,且包含默认值“0000-00-00”,严格模式失效;而MySQL建表失败,受严格模式控制。 针对跨数据库创建表,MySQL支持,GaussDB不支持。 针对源表为临时表,创建非临时表,MySQL支持,GaussDB不支持。 11 支持更改表名兼容语法 ALTER TABLE[ IF EXISTS ] tbl_name RENAME [TO | AS | =] new_tbl_name; RENAME {TABLE | TABLES} tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2, ...]; GaussDB的alter rename语法仅支持修改表名称功能操作,不能耦合其它功能操作; GaussDB的仅旧表名字段支持如schema.table_name用法;且新表名与旧表名将属于同一schema下; GaussDB的不支持新旧表跨shema重命名操作;但如有权限,则可在当前schema下修改其它schema下表名称; GaussDB的rename多组表的语法支持全为本地临时表的重命名,不支持本地临时表和非本地临时表组合的场景。 12 支持增加子分区语法兼容 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; action: move_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause | ilm_clause add_clause: ADD {{partition_less_than_item | partition_start_end_item | partition_list_item} | PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})} 不支持ALTER TABLE table_name ADD PARTITION (partition_definition1, partition_definition1,…);语法添加多分区。 仅支持原有添加多分区语法:ALTER TABLE table_name ADD PARTITION (partition_definition1), ADD PARTITION (partition_definition2[y1] ), …;。 父主题: SQL
  • GaussDB分布式形态整体架构 GaussDB分布式形态整体架构如下: 图1 GaussDB分布式形态整体架构图 Coordinator Node:协调节点CN,负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。 GTM:全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳、Sequence信息等全局唯一的信息。 Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及向CN返回执行结果。
  • GaussDB 主备版形态整体架构 GaussDB 主备版形态整体架构如下: 图2 GaussDB主备版形态整体架构图 ETCD:分布式键值存储系统(Editable Text Configuration Daemon)。用于共享配置和服务发现(服务注册和查找)。 CMS:集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。 Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及返回执行结果。
  • 在Linux下使用ODBC连接数据库 获取unixODBC源码包。 获取参考地址:https://www.unixodbc.org/unixODBC-2.3.7.tar.gz 下载后请先按照社区提供的完整性校验算法进行完整性校验。下载https://www.unixodbc.org/unixODBC-2.3.7.tar.gz.md5,查看MD5值,对比MD5值是否与源码包一致。 安装unixODBC。如果机器上已经安装了其他版本的unixODBC,可以直接覆盖安装。 以unixODBC-2.3.7版本为例,在客户端执行如下命令安装unixODBC。 tar zxvf unixODBC-2.3.7.tar.gz cd unixODBC-2.3.7 ./configure --enable-gui=no #如果要在ARM服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu make #安装可能需要root权限 make install 目前不支持unixODBC-2.2.1版本。 默认安装到“/usr/local”目录下,生成数据源文件到“/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。 通过编译带有--enable-fastvalidate=yes选项的unixODBC来获得更高性能。但此选项可能会导致向ODBC API传递无效句柄的应用程序发生故障,而不是返回SQL_INVALID_HANDLE错误。 替换客户端GaussDB驱动程序。 将GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz解压。解压后会得到两个文件夹:lib与odbc,在odbc文件夹中还会有一个lib文件夹。将解压后得到的/lib文件夹与/odbc/lib文件夹中的所有动态库都复制到“/usr/local/lib”目录下。 配置数据源。 配置ODBC驱动文件。 在“/usr/local/etc/odbcinst.ini”文件中追加以下内容。 [GaussMPP] Driver64=/usr/local/lib/gsqlodbcw.so setup=/usr/local/lib/gsqlodbcw.so odbcinst.ini文件中的配置参数说明如表3所示。 表3 odbcinst.ini文件配置参数 参数 描述 示例 [DriverName] 驱动器名称,对应数据源DSN中的驱动名。 [DRIVER_N] Driver64 驱动动态库的路径。 Driver64=/usr/local/lib/gsqlodbcw.so setup 驱动安装路径,与Driver64中动态库的路径一致。 setup=/usr/local/lib/gsqlodbcw.so 配置数据源文件。 在“/usr/local/etc/odbc.ini ”文件中追加以下内容。 [gaussdb] Driver=GaussMPP Servername=127.0.0.1 #数据库Server IP Database=db1 # 数据库名 Username=omm #数据库用户名 Password= #数据库用户密码 Port=8000 #数据库侦听端口 Sslmode=allow odbc.ini文件配置参数说明如表4 odbc.ini文件配置参数所示。 表4 odbc.ini文件配置参数 参数 描述 示例 [DSN] 数据源的名称。 [gaussdb] Driver 驱动名,对应odbcinst.ini中的DriverName。 Driver=DRIVER_N Servername 服务器的IP地址。可配置多个IP地址。支持IPv4和IPv6。 Servername=127.0.0.1 Database 要连接的数据库的名称。 Database=db1 Username 数据库用户名称。 Username=omm Password 数据库用户密码。 说明: ODBC驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。 但是如果配置了此参数,由于UnixODBC对数据源文件等进行缓存,可能导致密码长期保留在内存中。 推荐在应用程序连接时,将密码传递给相应API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。 注意: 配置文件中填写密码时,需要遵循http规则: 字符应当采用URL编码规范,如"!"应写作"%21","%"应写作"%25",因此应当特别注意字符。 "+"会被替换为空格" "。 Password=******** Port 服务器的端口号。当开启负载均衡时,可配置多个端口号,且需与配置的多IP一一对应。如果开启负载均衡配置多个IP时,仍只配置一个端口号,则默认所有IP共用同一个端口号,即为配置的端口号。 Port=8000 Sslmode 开启SSL模式 Sslmode=allow 其中关于Sslmode的选项的允许值,具体信息如表3 sslmode的可选项及其描述所示。 表5 sslmode的可选项及其描述 sslmode 是否会启用SSL加密 描述 disable 否 不使用SSL安全连接。 allow 可能 如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer 可能 如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。 require 是 必须使用SSL安全连接,但是只做了数据加密,并不验证数据库服务器的真实性。 verify-ca 是 必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。 verify-full 是 必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。如果不一致,需要使用root用户修改/etc/hosts文件,将连接数据库节点的IP地址和主机名加入。 说明: 此模式不支持产品默认证书,生成证书请联系管理员处理。 SSL模式。具体操作请联系数据库管理员。 配置数据库服务器。具体操作请联系数据库管理员。 在客户端配置环境变量。 vim ~/.bashrc 在配置文件中追加以下内容。 export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH export ODBCSYSINI=/usr/local/etc export ODBCINI=/usr/local/etc/odbc.ini 执行如下命令使设置生效。 source ~/.bashrc 执行以下命令,开始连接数据库。 isql -v GaussODBC GaussODBC为数据源名称 如果显示如下信息,表明配置正确,连接成功。 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ 若显示ERROR信息,则表明配置错误。请检查上述配置是否正确。 若是集群环境,需要在所有机器上都复制配置一份unixODBC。
  • 前提条件 已下载Linux版本的ODBC驱动包和Windows版本的ODBC驱动包。 Linux版本包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz。Linux环境下,开发应用程序要用到unixODBC提供的头文件(sql.h、sqlext.h等)和库libodbc.so。这些头文件和库可从unixODBC-2.3.7的安装包中获得。 Windows版本包名为GaussDB-Kernel_数据库版本号_Windows_Odbc_X64.tar.gz(64位)。Windows环境下,开发应用程序用到的相关头文件和库文件都由系统自带。
  • 获取驱动包 根据不同版本的实例,下载不同版本的发布包,如表2所示。 表2 驱动包下载列表 版本 下载地址 8.x 驱动包 驱动包校验包 3.x 驱动包 驱动包校验包 2.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: 上传软件包和软件包校验包到虚拟机(Linux操作系统)的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK
  • 修订记录 发布日期 修改说明 2024-01-23 第十八次正式发布,包含以下内容: “innodb_parallel_select_count”变更为规格参数,具体请参见购买按需计费实例、购买包年/包月实例、购买Serverless实例。 读写分离地址修改为代理地址。 2024-01-15 第十七次正式发布,包含以下内容: Serverless商用,修改计费内容,具体请参见购买Serverless实例。 2023-12-29 第十六次正式发布,包含以下内容: GaussDB(for MySQL)支持开启透明数据加密功能,具体请参见购买按需计费实例、购买包年/包月实例。 2023-08-30 第十五次正式发布,包含以下内容: 购买实例按照计费模式拆分。 优化连接实例。 新增通过内网连接GaussDB(for MySQL)实例(Linux方式)。 新增通过内网连接GaussDB(for MySQL)实例(Windows方式)。 新增通过公网连接GaussDB(for MySQL)实例(Linux方式)。 新增通过公网连接GaussDB(for MySQL)实例(Windows方式)。 新增通过JDBC连接GaussDB(for MySQL)实例。 2023-07-19 第十四次正式发布,包含以下内容: 购买实例支持指定内核版本,详情请参见步骤一:购买实例。 新增入门实践。 2023-06-25 第十三次正式发布,包含以下内容: 购买实例增加备份空间说明,详细内容请参考步骤一:购买实例。 2023-05-22 第十二次正式发布,包含以下内容: 购买实例的实例类型新增单机实例,详细内容请参考步骤一:购买实例。 新增Serverless模式实例,详细内容请参考步骤一:购买实例。 存储空间支持最小容量为10GB,详细内容请参考步骤一:购买实例。 2023-04-20 第十一次正式发布,包含以下内容: 购买实例新增通用版规格,详细内容请参考步骤一:购买实例。 2023-03-20 第十一次正式发布,包含以下内容: 购买实例时允许用户指定是否创建容灾实例,详细内容请参考步骤一:购买实例。 2023-02-23 第十次正式发布,包含以下内容: 优化步骤一:购买实例,允许购买开通读写分离代理。 2022-09-22 第九次正式发布,包含以下内容: 优化绑定弹性公网IP。 2022-06-30 第八次正式方式,包含以下内容: 优化通过公网连接GaussDB(for MySQL)实例章节,Linux操作系统提供SSL连接(推荐)和非SSL连接,Windows操作系统使用MySQL-Front客户端连接实例,增加连接实例操作说明。 2022-03-30 第七次正式方式,包含以下内容: 在购买实例进行设置内网安全组时,增加打开3306端口和icmp协议提示,并支持快速添加和配置规则。 2021-05-11 第六次正式发布,包含以下内容: GaussDB(for MySQL)新增批量创建实例功能。 2021-03-30 第五次正式发布,包含以下内容: 优化流程框架。 2020-04-24 第四次正式发布,包含以下内容: GaussDB(for MySQL)支持多可用区部署。 创建GaussDB(for MySQL)实例时支持搜索子网。 根据界面优化更新购买实例章节。 2020-02-24 第三次正式发布,包含以下内容: GaussDB(for MySQL)支持创建包周期实例。 支持通过数据管理服务DAS连接GaussDB(for MySQL)实例。 2020-01-20 第二次正式发布,包含以下内容: 根据实例连接场景调整大纲为:通过内网连接GaussDB(for MySQL)实例、通过公网连接GaussDB(for MySQL)实例。 2019-09-03 第一次正式发布。
  • 触发限流(流控)的原因和处理建议 Redis产生流控,说明redis在周期内的使用流量超过该实例规格的最大带宽。流控会导致连接被丢弃,从业务角度可能会造成业务的延迟增大,客户端连接异常等问题。 实例规格对应的最大带宽,可以查看实例规格中对应实例类型的“基准/最大带宽”。 带宽使用率不高时,也有可能有限流,因为带宽使用率是上报周期实时值,一个上报周期检查一次。而流控检查是秒级的,有可能存在上报周期间隔期间,流量有秒级冲高,然后回落,待上报带宽使用率指标时已恢复正常。 对于主备实例: 如果实例一直有流控但是带宽使用率不高,这说明可能存在业务微突发问题,或者大Key热Key问题,建议对实例进行自动诊断分析,优先排除大Key热Key问题。 如果带宽使用率居高不下,说明带宽可能存在超限风险,需要扩容处理。 对于集群实例: 仅有单个或少量几个分片出现流控,则多数为该分片存在大Key热Key问题。 所有或大多数分片同时出现流控或者带宽使用率高的问题,这说明实例的带宽达到了瓶颈,建议扩容实例。 DCS控制台提供了大Key和热Key的分析功能,请参考分析Redis实例大Key和热Key减少大key和热key。 如果用户执行了keys等消耗资源的命令,也可能会导致CPU和带宽使用率增加,从而出现流控。 通过控制台对Redis实例进行调整DCS实例带宽,可解决带宽超限的问题。 父主题: 监控告警
  • 接口约束 该接口仅支持MySQL、PostgreSQL引擎。 Serverless型实例不支持该接口。 RDS for PostgreSQL实例中存在异常节点,无法升级小版本。 对于RDS for PostgreSQL 11版本,如果内核小版本小于11.2,则不支持小版本升级。 只支持立即升级,不支持可维护时间段内升级小版本。 RDS for PostgreSQL升级内核小版本后,有可能导致主备节点倒换。
  • 请求消息 表2 参数说明 名称 是否必选 参数类型 说明 build_slave_dr_relation 是 Object 配置容灾实例灾备关系所需要的主实例信息。 详情请参见表3。 表3 build_slave_dr_relation字段数据结构说明 名称 是否必选 参数类型 说明 target_instance_id 是 String 主实例的实例ID。 target_project_id 是 String 主实例所在租户的项目ID。 target_region 是 String 主实例所在的区域ID。 target_ip 是 String 主实例的数据虚拟IP(数据VIP)。
  • 请求示例 配置容灾实例灾备关系,主实例所在的区域为aaa。 POST https://{endpoint}/v3/0483b6b16e954cb88930a360d2c4e663/instances/24c6678f474241fe89ee9c42f768022ein03/action { "build_slave_dr_relation": { "target_instance_id":"c39bd176fb0540929f6add80b91b212cin03", "target_project_id":"054b61972980d4552f0bc00ac8d3f5cd", "target_region":"aaa", "target_ip":"192.168.3.238" } }
  • 接口约束 主实例配置容灾能力成功后才能配置灾备实例容灾能力,否则容灾关系会建立失败。 主实例和灾备实例状态正常,主实例和灾备实例在不同云或不同Region且灾备实例为单实例。 灾备实例的规格要保持大于等于主实例。 灾备实例的底层架构和数据库大版本要与主实例一致。 调用配置灾备实例容灾接口后直至成功搭建容灾关系,不能进行规格变更、主备倒换操作。 RDS for PostgreSQL 12及以上版本支持建立跨云或跨Region容灾关系。 不支持跨大版本建立跨云或跨Region容灾关系。 灾备实例搭建成功后,不能进行小版本升级。 主实例参数被修改后,灾备实例无法同步修改该参数,需结合业务自行修改灾备实例参数。
  • 场景1:主库执行了大事务 大事务一般指一个事务中包含大量的数据更新操作,例如一个事务包含几万次DML(insert,update,delete)操作、一条SQL语句批量更新了上万行数据等,大事务往往本身的执行时间很长(分钟级)。当主实例执行了大事务后,会产生大量的Binlog日志,备机或只读节点拉取这些Binlog耗时比一般事务长,且至少需要花费与主实例相同的时间来回放这些事务的更新,从而导致备机或只读节点出现复制延迟。 排查方法: 对于包含大量DML语句的大事务,使用如下命令,找到长时间执行的事务。 select t.*,to_seconds(now())-to_seconds(t.trx_started) idle_time from INFORMATION_SCHEMA.INNODB_TRX t \G; 对于一条SQL语句执行大量数据的大事务,执行show full processlist,查找是否存在长时间执行的delete或update语句。 分析全量日志或慢日志,检查是否有大事务。 解决方法: 为了保证主从数据的一致性,需要等待大事务执行完成,主备复制延迟才能恢复。 业务侧避免此类大事务,可以将大事务拆分为小事务,分批执行。例如,通过where条件或limit语句限制每次要更新的数据量。
  • 场景2:对无主键表更新 RDS for MySQL的Binlog采用row格式,对每一行的数据更新,都会形成row格式Binlog event记录。例如:一个update语句更新100行数据,那么row格式的Binlog中会形成100行update记录,备机或只读回放时会执行100次单行update。 只读节点和备机在回放主库的Binlog event时,会根据表的主键或者唯一二级索引来检索需要更改的行。如果对应表未创建主键,则会产生大量的全表扫描,从而降低了Binlog日志的应用速度,产生复制延迟。 排查方法: 通过show create table xxx,分析执行慢的update和delete语句对应的表,分析是否有主键。 解决方法: 给无主键表增加主键,或者酌情增加唯一二级索引。
  • 场景4:只读实例等待MDL锁 只读实例上往往有业务流量,如果存在只读长事务正在执行,会阻塞主实例同步过来的相应表的DDL操作,卡在了表MDL锁获取,进而阻塞所有同表的后续Binlog回放,导致复制延迟越来越大。 排查方法: 登录只读节点,使用如下命令,观察是否有长时间执行的事务。 select t.*,to_seconds(now())-to_seconds(t.trx_started) idle_time from INFORMATION_SCHEMA.INNODB_TRX t \G; 查看只读节点的MDL锁视图,观察是否有MDL锁冲突。 select * from information_schema.metadata_lock_info; 根据MDL锁视图中的线程ID,找到阻塞的session。更多信息,请参见MDL锁视图。 解决方法: kill只读节点上阻塞DDL操作的长事务,或者在业务侧提交该长事务。
共100000条