版本日期:2024.03(最新版本以腾讯云官网产品文档为准,本链接为2024年3月版)
版权声明
本文档著作权归腾讯云计算(北京)有限责任公司(以下简称“腾讯云”)单独所有,未经腾讯云事先书面许可,任何主体不得以任何方式或理由使用本文档,包括但不限于复制、修改、传播、公开、剽窃全部或部分本文档内容。
本文档及其所含内容均属腾讯云内部资料,并且仅供腾讯云指定的主体查看。如果您非经腾讯云授权而获得本文档的全部或部分内容,敬请予以删除,切勿以复制、披露、传播等任何方式使用本文档或其任何内容,亦请切勿依本文档或其任何内容而采取任何行动。
免责声明
本文档旨在向客户介绍本文档撰写时,腾讯云相关产品、服务的当时的整体概况,部分产品或服务在后续可能因技术调整或项目设计等任何原因,导致其服务内容、标准等有所调整。因此,本文档仅供参考,腾讯云不对其准确性、适用性或完整性等做任何保证。您所购买、使用的腾讯云产品、服务的种类、内容、服务标准等,应以您和腾讯云之间签署的合同约定为准,除非双方另有约定,否则,腾讯云对本文档内容不做任何明示或默示的承诺或保证。
错误码和错误信息
proxy 增加如下错误编码:
#define ER_PROXY_GRAM_ERROR_BEGIN 600
#define ER_PROXY_SANITY_ERROR 601 // "Sanity error: %s"
#define ER_PROXY_GS_NOT_SUPPORT 602 // sql 类型不支持
#define ER_PROXY_ORDERBY_INDEX_NEG 603 // order by index is negative
#define ER_PROXY_ORDERBY_INDEX_TOO_BIG 604 // order by index is too big
#define ER_PROXY_ORDERBY_TYPE_UNSUPPORT 605 // 不支持到 order by 用法
#define ER_PROXY_GROUPBY_INDEX_NEG 606 // group by index is negative
#define ER_PROXY_GROUPBY_INDEX_TOO_BIG 607 // group by index is too big
#define ER_PROXY_GROUPBY_TYPE_UNSUPPORT 608 // 不支持的 group by 用法
#define ER_PROXY_GET_AUTO_ID_FAILED 609 // 获取自增 id 失败
#define ER_PROXY_TEANS_ROLLED_BACK 610 // 事务已经被回滚
#define ER_PROXY_ONE_SET 611 // 当前 sql 应该被发往一个后端,但是不是
#define ER_PROXY_CLIENT_HS_ERROR 612 // 解析客户端握手包出错
#define ER_PROXY_ACCESS_DENIED_ERROR 613 // the length of readu_auth_switch_result is not 20,不应该出现
#define ER_PROXY_TRANS_NOT_ALLOWED 614 // 事务中不允许执行的命令
#define ER_PROXY_TRANS_READ_ONLY 615 // 只读事务中不允许执行的命令
#define ER_PROXY_TRANS_ERROR_DIFFENT_SET 616 // 非 xa 事务中,只读 sql 使用了多个后端
#define ER_PROXY_STRICT_ERROR 617 // strict 模式下,一次仅允许修改一个 set
#define ER_PROXY_SC_TOO_LONG 618 // 后端断开时间过长,链接断开
#define ER_PROXY_START_TRANS_FAILED 619 // 开启新的 xa 事务失败
#define ER_PROXY_SC_RETRY 620 // server 已经 close,请重试上一条 sql
#define ER_PROXY_SC_TRANS_IN_ROLLBACK_ONLY 621 // server 已经 close,当前事务处于 rollback
#define ER_PROXY_SC_COMMIT_LATER 622 // server 已经 close,事务会在稍后提交
#define ER_PROXY_SC_ROLLBACL_LATER 623 // server 已经 close,事务会在稍后回滚
#define ER_PROXY_SC_IN_COMMIT_OR_ROLLBACK 624 // server 在事务提交/回滚阶段 close
#define ER_PROXY_SC_NEED_ROLLBACK 625 // server 已经 close,需要回滚当前事务
#define ER_PROXY_SC_STATE_WILL_ROLLBACK 626 // server 已经 close,将会会滚
#define ER_PROXY_XA_UNSUPPORT 627 // xa 目前不支持的命令
#define ER_PROXY_XA_INVALID_COMMAND 628 // xa 命令不合法
#define ER_PROXY_XA_GTID_INIT_ERROR 629 // gtid log 初始化失败
#define ER_PROXY_XA_GET_SET_IP_PORT_FAILED 630 // 获取 set 地址失败
#define ER_PROXY_XA_UPDATE_GTID_LOG_FAILED 631 // 更新 gtid log 失败
#define ER_PROXY_MYSQL_PARSER_ERROR 632 // 嵌入式库 sql 解析失败
#define ER_PROXY_ILLEGAL_ID 633 // kill id 不合法
#define ER_PROXY_NOT_SUPPORT_CURSOR 634 // CURSOR_TYPE_READ_ONLY 暂不支持
#define ER_PROXY_UNKNOWN_PREPARE_HANDLER 635 // 执行的 prepare 不明确
#define ER_PROXY_SET_PARA_FAIL 636 // Set parameters failed
#define ER_PROXY_SUBPARTITION_DEAY 637 // 处理二级分区发生错误
#define ER_PROXY_NO_SUBPARTITION_ROUTE 638 // 没有获取到二级分区表的路由信息
#define ER_PROXY_LOCK_MORE_TABLE 639 // 一次只可以锁定一张二级分区表
#define ER_PROXY_GET_ROUTER_LOCK_FAIL 640 // 获取路由锁失败
#define ER_PROXY_PART_NAME_EMPTY 641 // 分区名称为空
#define ER_PROXY_SUB_PART_TABLE_IS_NONE 642 // 没有二级分区
#define ER_PROXY_PART_TYPE_DENY 643 // 二级分区类型不支持
#define ER_PROXY_PART_NAME_ILLEGAL 644 // 分区名不合法
#define ER_PROXY_DROP_ALL_PARTITION_FAIL 645 // 删除所有分区失败,尝试直接删除表
#define ER_PROXY_GET_OLD_PART_NUM_FAIL 646 // 获取表的分片数失败
#define ER_PROXY_EMPTY_SQL 647 // empty sql,不会返回给客户端
#define ER_PROXY_ERROR_SHARDKEY 648 // sk 必须为某一列
#define ER_PROXY_ERROR_SUB_SHARDKEY 649 // 二级分区键失败
#define ER_PROXY_SQLUSE_NOT_SUPPORT 650 // proxy 不支持这种用法
#define ER_PROXY_DBFW_WHITE_LIST_DENY 651 // 不在白名单,被防火墙拒绝
#define ER_PROXY_DBFW_DENY 652 // 防火墙拒绝
#define ER_PROXY_INCORRECT_ARGS 653 // stmt 参数不正确
#define ER_PROXY_SYSTABLE_UNSUPPORT_NON_READ_SQL 654 // 不支持非只读 sql 访问系统表
#define ER_PROXY_TABLE_NOT_EXIST 655 // 表不存在
#define ER_PROXY_SHARD_JOIN_UNSUPPORT_TYPE 656 // shard join 暂不支持的用法
#define ER_PROXY_RECURSIVE_JOIN_DENY 657 // 递归 join 不支持
#define ER_PROXY_JOIN_INTERNAL_ERROR 658 // join 异常
#define ER_PROXY_SQL_TOO_COMPLEX 659 // sql 太复杂,groupshard 暂不支持
#define ER_PROXY_INVALID_ARG_FOR_GTID_STATE 660 // gtid_state() 参数不合法
#define ER_PROXY_CANT_SET_GLOBAL_AUTOCOMMIT_GS 661 // Global autocommit cannot be set in groupshard
#define ER_PROXY_INVALID_VALUE_FOR_AUTOCOMMIT 662 // autocommit 值设置不合法
#define ER_PROXY_XID_ERROR 663 // xid 不合法
#define ER_PROXY_XID_GENERAT_FAILED 664 // xid 不能由用户指定
#define ER_PROXY_CANT_EXEC_IN_INTER_TRANS 665 // "The command cannot be executed in internal transction"
#define ER_PROXY_XID_TIME_ERROR 666 // "Unexpected time part of xid"
#define ER_PROXY_XID_TIMEDIFF_TOO_LONG 667 // "timediff > 1800s, it's not safe to execute boost"
#define ER_PROXY_SAVEPOINT_NOT_EXIST 668 // SAVEPOINT 不存在
#define ER_PROXY_SC_TRANS_IN_ROLLED 669 // 事务已经会滚,由于 serevr 已经 close
#define ER_PROXY_CANT_BOOST_IN_TRANS 670 // 事务中不允许执行 SQLCOM_BOOST
#define ER_PROXY_TRANS_EXPECTED 671 // "A transaction is expected, this maybe a bug"
#define ER_PROXY_EXTERNAL_TRANS 672 // 外部 xa 中不允许执行
#define ER_PROXY_AUTO_INC_FAIL 673 // "Deal auto inc failed"
#define ER_PROXY_CHECK_JOIN_FAIL 674 // "Check join failed"
#define ER_PROXY_TABLE_TYPE_NOT_MATCH 675 // "Do not support shard-table operations in noshard instance"
#define ER_PROXY_UNSUPPORT_NS_IN_INSERT 676 // "Do not support noshard and noshard_allset in insert sql"
#define ER_PROXY_ALTER_SEQ_ID_FAIL 677 // Alter seq id failed
#define ER_PROXY_ALTER_ID_ILLEGAL 678 // Alter seq id is illegal
#define ER_PROXY_CANT_CHANGE_STEP 679 // "Current table use zk to get auto inc, do not support to change step: \'%s\'"
#define ER_PROXY_ALTER_STEP_FAIL 680 // Alter step failed
#define ER_PROXY_TOO_MUCH_TABLES 681 // 表的数量超过限制
#define ER_PROXY_TABLE_EXISTED 682 // 表已经存在
#define ER_PROXY_CREATE_STABLE_FAILED 683 // 创建shard表失败,复杂 sql 不能用来创建 shard 表
#define ER_PROXY_DDL_DENY 684 // ddl 不允许的操作
#define ER_PROXY_SHADKEY_ERROR 685 // SQL should not relate to subpartition tables
#define ER_PROXY_NO_SK 686 // reject nosk
#define ER_PROXY_COMBINE_SQL_KEY 687 // Something went wrong
#define ER_PROXY_GET_SK_ERROR 688 // sk 获取失败
#define ER_PROXY_SHOW_FAILED 689 // proxy show 命令错误
#define ER_PROXY_SET_FAILED 690 // proxy set 命令错误
#define ER_PROXY_UNLOCK_FORMAT_ERROR 691 // sql 格式不正确
#define ER_PROXY_UNLOCK_ROUTER_FAIL 692 // 释放路由锁失败
#define ER_PROXY_LOCK_ROUTER_FAIL 693 // 加路由锁失败
#define ER_PROXY_PROXY_CMD_FAIL 694 // 不支持的/*proxy*/ 命令
#define ER_PROXY_PROCESS_RULE_FILE_FAILED 695 // dump_error
#define ER_PROXY_GET_AUTO_NUM_ERROR 696 // 获取自增值失败
#define ER_PROXY_SEQUENCE_NOT_EXIST 697 // sequence 不存在
#define ER_PROXY_SEQUENCE_ERROR 698 // sequence 不合法
#define ER_PROXY_SEQUENCE_ALREADY_EXIST 699 // sequence 已经存在
#define ER_PROXY_SQL_RETRY 700 // sql 还未提交或回滚
#define ER_PROXY_XA2PC_ABORT 701 // 2pc 失败,事务将会会滚
#define ER_PROXY_XA2PC_COMMIT 702 // 2pc 失败,后续提交
#define ER_PROXY_XA2PC_UNCERTAIN 703 // 2pc 失败,结果未知
#define ER_PROXY_KILL_ERROR 704 // kill 失败
#define ER_PROXY_TRACE_DENY 705 // trace 模式下不允许执行的sql
#define ER_PROXY_SQL_IMCOMPLETE 706 // 事务状态不完整
#define ER_PROXY_SHARDKEY_HASH_ERROR 709 // sk hash错误
#define ER_PROXY_GRAM_ERROR_END 799
// system error -----------------------------------------------------------------------
#define ER_PROXY_SYSTEM_ERROR_BEGIN 900
#define ER_PROXY_SLICING 901 // slice 被修改,可能在扩容阶段,拒掉当前 sql
#define ER_PROXY_NO_DEFAULT_SET 902 // set 为空
#define ER_PROXY_GET_ADDRESS_FAILED 903 // 还未初始化完成,获取后端地址失败,稍后重试
#define ER_PROXY_SQL_SIZE_ERROR_IN_GET_CANDIDATE_ADDRESS 904 // 获取后端地址出错(发往后端个数不正确)
#define ER_PROXY_GET_ADDRESS_ERROR 905 // 获取后端地址出错
#define ER_PROXY_CANDIDATE_ADDRESS_EMPTY 906 // 未获取到后端地址
#define ER_PROXY_CANT_GET_SOCK 907 // socket 获取失败
#define ER_PROXY_GET_SET_SOCK_FAIL 908 // socket 获取失败
#define ER_PROXY_CONNECT_ERROR 909 // 后端连接失败
#define ER_PROXY_NO_SQL_ASSIGN_TO_SET 910 // 分发 sql 异常
#define ER_PROXY_STATUS_ERROR 911 // group 状态异常,断开链接
#define ER_PROXY_CONN_BROKEN_ERROR 912 // server close,sql 状态不正常
#define ER_PROXY_UNKNOWN_ERROR 913 // proxy 未知错误
#define ER_PROXY_ALL_SLAVES_UNAVAILABLE 914 // 所有备机不可用
#define ER_PROXY_ALL_SLAVES_CHANGE 915 // 备机异常
#define ER_PROXY_ERROR_END 916
其中900以上为系统错误,会通过 腾讯云可观测平台 进行告警。
TDStore 引擎
使用说明
TDSQL MySQL 版(TDStore 引擎)在使用上与 MySQL 8.0 高度一致,用户可以将其视为一个 MySQL 8.0 实例来使用,但请注意以下几点:
TDStore 引擎暂不支持的语法特性
- 不支持下列对象的 CREATE/ALTER/DROP 语法。
- event
- resource group
- instance
- server
- tablespace
- spatial
- SET GLOBAL log_output = TABLE:不支持 general_log 和 slow_log 输出到表,只能输出到 file(即慢查询日志文件)。
- 暂不支持 LOCK TABLE 语法(默认依赖 LOCK TABLE 语法的数据导入导出工具,建议通过参数设置跳过 LOCK TABLE 的执行避免报错,例如 mysqldump --lock-tables = false)。
- 禁止对 MySQL 库下的任何系统表进行 DDL 操作。
- 暂不支持外键。
- 不允许修改表的存储引擎。
- 暂不支持虚拟列、GEOMETRY 类型、降序索引、全文索引。
- 不支持 ALTER TABLE .. EXCHANGE PARTITION
- 不支持 SAVEPOINT
- 不支持 Spatial indexes
- 不支持 Transportable tablespace
- 不支持 multi-valued indexes
- 不支持 Fulltext indexes
- 不支持 Group Replication
- 不支持 Partial Update of LOB in InnoDB
- 不支持使用 INPLACE 或者 ONLINE 的方式添加含有 DEFAULT EXPRESS 列;
例如:支持 ALTER TABLE t ADD COLUMN col INT DEFAULT 10; 但不支持 ALTER TABLE t ADD COLUMN col INT DEFAULT (10);
- 实验特性:触发器(trigger)功能在当前版本为实验特性,不建议用户在正式生产环境中使用。
每个实验特性各自拥有独立开关和默认值。用户如需开启/关闭,请在连接到 TDStore 实例后通过如下 SQL 语句开启(以 tdsql_enable_trigger 为例):SET PERSIST tdsql_enable_trigger=ON;。
特性名 | 开关 | 默认值 |
|---|---|---|
触发器 | tdsql_enable_trigger | OFF |
TDStore 引擎与 MySQL 8.0 的使用差异
- TDStore 自增字段暂时只保证全局唯一,不保证全局自增。
- add column,add/drop index 支持 online 不阻塞读写;变更 column 类型,变更字符集也支持 online 不锁表。目前会锁表的 DDL 操作主要有:
- add/drop 主键
- rename column
- add/drop/change 自增字段
- add column 的时候默认值采用了表达式的形式,例如 add column default (a+a)
- 表是无主键表
- 表上有关联的触发器
遇到上述不支持 online 的 DDL 系统会有报错提示,用户此时可以设置 set tdsql_use_online_copy_ddl = 0来通过锁表的方式执行这类 DDL。
- set global xxx 只会设置某个节点上的变量,需要用/*# broadcast */ set global xxx 广播到所有节点才能使其在全局生效。
- show variables,show global status 展示的是当前连接的计算节点中的状态信息,连到不同的计算节点展示的信息可能不同。
- show processlist 展示当前连接节点的 processlist,如果需要展示所有节点的,需要用/*# broadcast */show processlist。
TDStore实例建表数量的限制
每个 TDStore 实例能创建表的数量有如下限制,此数量限制与构成实例的节点规格及节点数相关,若超出此限制将返回对应错误码(EC_MC_DATA_OBJ_LIMIT_EXCEEDED )。
节点规格(CPU 内存) | 基础版实例最大建表数量(单节点) | 集群版实例最大建表数量(3节点为例) |
|---|---|---|
1核2GB | 160 | 480 |
2核4GB | 320 | 960 |
4核8GB | 640 | 1920 |
8核16GB | 1280 | 3840 |
16核32GB | 2560 | 7680 |
32核64GB | 5120 | 15360 |
错误码信息
TDStore 引擎错误码及说明如下:
当您遇到如下错误码需要处理时,您可以通过 在线支持 进行处理。
错误码 | 说明 |
|---|---|
50018 | 通用错误码,无具体含义 |
50019 | 存储引擎设置错误,例如 SET default_storage_engine=InnoDB 报此错误 |
50020 | 发生在 SQLEngine 进程启动的阶段,SQLEngine 向 MC 注册失败 |
50021 | 执行 DML 时,并发的 DDL 修改了表结构,DML 报此错误 |
50022 | 执行 DDL 时,DDL 被后台线程中断,DDL 报此错误 |
50023 | 执行 DML 时,并发的 DDL 修改了表结构,DML 报此错误 |
50024 | 执行 DDL 时,校验表结构失败,DDL 报此错误 |
50025 | 同一时间、同一对象上只能有一个 DDL 正在执行,并发的 DDL 报此错误,例如,sqlengine#1 执行 ALTER TABLE db1.tbl1;sqlengine#2 也执行 ALTER TABLE db1.tbl1,sqlengine#2 报错 |
50028 | 执行 DDL 时,创建表定义失败 |
50030 | 执行 DDL(带有自增值属性的 DDL)时,初始化自增值失败 |
50031 | 执行 DDL(如建表、建索引)时,分配 index id 失败 |
50032 | SQL Engine 通用错误码,无具体含义 |
50033 | 执行 DML,获取自增值 next val 失败 |
50034 | 执行 DDL 或 DML 时,TDStore 无法创建迭代器 |
50035 | 执行 DML,推进自增值 next val 失败 |
50036 | 执行 DDL 时,未定义自增列,但给出了自增值,如 CREATE TABLE t(a INT) AUTO_INCREMENT=10; |
50037 | 执行 DDL 或 DML 时,TDStore 上不存在相应事务上下文 |
50038 | 执行 DDL 或 DML 时,TDStore 上不存在相应事务上下文,更有可能发生了 "TDStore 切主" |
50039 | 发生在进程启动时,初始化路由失败 |
50040 | 用户在 SET VARIABLE 时缺少权限 |
50041 | 内置函数 STORAGE_FORMAT 只接受1个 uint32 整数作为入参,输入其他参数会报此错误。如 SELECT STORAGE_FORMAT(10001); |
50042 | 执行 DML 提交事务时,乐观事务冲突报错 |
50043 | 执行 DML 时,如果有写操作失败,为避免数据不一致,必须手工把事务回滚,然后能执行其他 SQL;在 ROLLBACK 之前执行其他 SQL,报此错误,如 INSERT INTO t - 失败、COMMIT - 报此错误、ROLLBACK - OK、其他 SQL - OK |
50044 | 发生在 SQLEngine 进程启动时,集群尚不可用 |
50045 | 发生在 SQLEngine 进程启动时,无法建立事务保活机制,会影响到正常事务的执行流程,拒绝启动 |
50046 | 发生在 DDL,ALTER TABLE t CHANGE ENGINE 在 RocksDB 和其他引擎之间切换会报此错误 |
50047 | 发生在用 DML 直接修改权限相关的表(user/global_grants 等)报错 |
50048 | 执行 DML 时,并发的 DDL 修改了表结构,DML 报此错误 |
50049/50050 | 发生在 SQLEngine 进程启动时,SQLEngine 向 MC 申请唯一的标识 ID 并持久化在 SQLEngine 的数据目录下,这期间报错误 |
50051 | 执行 DDL 时,Online Copy DDL 流程的错误码 |
50052 | 执行 DDL 时,Online DDL 流程的错误码 |
50053 | 发生在本地变量版本比 MC 维护的版本低的情况 |
50054 | 发生在对只读变量使用 SET PERSIST_ONLY 语法 |
50055 | 发生在 TDStore 进行全量备份时报错 |
50057 | DDL 会持久化一些任务信息,任务信息有长度上限,超过上限会报此错误 |




