vitess与mysql的兼容性

支持的mysql 版本

  • 5.6-8.0,但是5.6 从2021年2月不更新了,所以建议5.7之后版本

事务隔离级别

  • vitess: read committed
  • mysql default: pepeatable read

SQL语法

https://github.com/vitessio/vitess/blob/main/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt

DDL

  • vtctlclient: vitess有封装,使用vtctlclient ApplySchema -sql 可以执行DDL,会自动应用到各个shard上,还会做一些检查,比如表比较大会决绝此DDL,保护用户访问
  • VGate: 直接通过SQL语句也可以操作,不建议这样修改大表
  • 直连mysql做DDL:VTablet 最终会注意到变化并自行更新。这由默认为 1800 秒的 -queryserver-config-schema-reload-time 参数控制。还可以明确发出 vtctlclient ReloadSchema 命令以使其立即重新加载
  • online DDL: vitess集成了onlineDDL工具,直接封装到命令里了,有两种途径做online DDL
    • https://vitess.io/docs/user-guides/schema-changes/managed-online-schema-changes/
    • VGate:连接到VGate后就像连接掉mysql一样,通过执行SQL,set @@ddl_strategy=‘direct/online/gh-ost/pt-osc’ 通过不同的工具执行表结构变更
    • 通过vtctl: vtctlclient ApplySchema -ddl_strategy “direct/online/gh-ost/pt-osc” -sql ‘ALTER TABLE demo MODIFY id bigint UNSIGNED’ xxx
    • 几种策略
      • https://vitess.io/docs/user-guides/schema-changes/ddl-strategies/
      • online: utilizes Vitess’s built in VReplication mechanism.
      • gh-ost: uses 3rd party GitHub’s gh-ost tool.
      • pt-osc: uses 3rd party Percona’s pt-online-schema-change as part of Percona Toolkit

join

  • Vitess 支持 INNER JOIN 包括跨分片join
  • 只要不存在将外部表上的列与分片键空间中的内部表进行比较的表达式,就支持 LEFT JOIN

order

  • Vitess 支持对所有列进行排序,而不管数据类型如何

group by

  • Vitess 支持 GROUP BY 操作的子集,包括跨分片操作
  • VTGate 服务器能够进行分散-聚集操作,但只能流式传输结果。 因此,如果中间结果集大于 VTGate 的内存限制,则执行 GROUP BY colx ORDER BY coly 的查询可能会被拒绝。

子查询

  • Vitess 支持子查询的子集。例如,不支持结合 GROUP BY 操作的子查询

存储过程

  • 仅支持使用 CALL 调用存储过程
    • 未分片的keyspace
    • 直接针对特定shard
  • 使用call调用存储过程还有相关限制
    • 如果使用事务,则存储过程不能更改事务状态。
    • 不能返回结果
    • 只支持in参数
    • 不支持创建存储过程

不支持kill

跨分片事务

  • 默认情况下,Vitess 不支持跨分片的事务。
  • 虽然 Vitess 可以通过使用两阶段提交来支持这一点,但通常建议以不需要跨分片修改的方式设计 VSchema

不支持窗口函数和CTEs

OLAP workload

默认情况下,Vitess 对查询可以返回的执行时间和行数设置了一些有意的限制。 这种默认工作负载模式称为 OLTP。 这可以通过将工作负载设置为 OLAP 来禁用

SELECT … INTO

  • 只支持SELECT … INTO DUMFILE and SELECT … INTO OUTFILE
  • 只能用于未shard的表
  • shard的表必须使用use xxx来指定分片后使用

LOAD DATA

  • 只能用于未shard的表
  • shard的表必须使用use xxx来指定分片后使用

临时表

  • Vitess 对临时表的支持有限。它仅适用于未分片的键空间。
  • 如果用户创建了一个临时表,那么会话将开始使用保留连接来处理在该会话上发送的任何查询。
  • 此会话生成的查询计划将不会被缓存。它仍然会继续使用从其他非临时表会话缓存的查询计划

字符集

  • 只支持 utf8和utf8mb4

SQL mode

Vitess 的行为类似于 STRICT_TRANS_TABLES sql 模式,不建议更改 SQL 模式设置

数据类型

Vitess 支持 MySQL 中所有可用的数据类型。强烈建议不要使用 FLOAT 数据类型作为 PRIMARY KEY 的一部分,因为过滤复制和 VReplication 等功能将无法正确检测哪些行应作为修改的一部分包含在内

自增主键

  • 分片键空间中的表不支持 auto_increment 列属性,因为生成的值仅对每个分片是本地的。
  • Vitess Sequences 与 auto_increment功能相近
  • vitess sequences类似个未分片的表,创建后可以与用户表中的某列关联,这样每次新增都会自增,详见以上链接中

use语句

  • Vitess 允许您使用 MySQL USE 语句和客户端库使用的相应二进制 API 来选择键空间。
  • SQL 语句可以使用标准点表示法引用另一个键空间中的表 select * from a.table
  • Vitess 还可以在USE 语句中选择特定的分片和tablet-type USE mykeyspace:-80@rdonly

CREATE/DROP DATABASE

  • Vitess 不支持开箱即用的 CREATE 和 DROP DATABASE 查询, 但是,为了能够提供数据库,存在插件机制。该插件必须负责创建和删除数据库,并更新拓扑。
  • 该插件应实现DBDDLPlugin接口,并保存到go/vt/vtgate/engine/目录下的新文件中
  • 然后它必须调用 DBDDLRegister 注册自己。 您可以查看引擎包中的 dbddl_plugin.go 以了解它是如何完成的。 最后,您需要向 vtgate 添加一个命令行标志以使其使用新插件:-dbddl_plugin=myPluginName

翻译自:https://vitess.io/docs/reference/compatibility/mysql-compatibility/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL分布式数据库搭建需要考虑以下几个方面: 1. 数据分片:将数据按照一定的规则进行分割,以便于分布式系统中的各个节点处理。 2. 数据同步:分布式系统中需要保证数据的一致性,因此需要对分片后的数据进行同步。 3. 负载均衡:分布式系统中需要考虑负载均衡,以便于避免某些节点过度负载。 下面介绍一种常见的MySQL分布式数据库搭建方案: 1. 数据分片 将数据按照一定的规则进行分割,例如按照用户ID进行哈希分片,或者按照时间进行范围分片等。可以选择使用MyCat、Vitess等第三方中间件实现数据分片,也可以手动实现分片算法。 2. 数据同步 在分片后,需要确保各个分片的数据一致性,可以采用以下两种同步方式: - 主从同步:将一个分片设为主分片,其他分片设为从分片,主分片负责写入数据,从分片负责读取数据,主分片的数据变化会同步到从分片上。可以使用MySQL自带的复制功能来实现主从同步。 - 全局同步:所有分片都可以写入数据,但是需要确保数据的一致性。可以使用类似于Paxos协议的分布式一致性算法来实现全局同步。 3. 负载均衡 在分布式系统中,需要考虑负载均衡,避免某些节点过度负载。可以采用以下两种负载均衡方式: - 客户端负载均衡:客户端通过负载均衡器选择一个可用的分片节点进行访问。 - 服务端负载均衡:在分布式系统中,可以选取一些节点作为代理节点,客户端请求先发送到代理节点,代理节点再将请求路由到相应的分片节点上。 总的来说,MySQL分布式数据库搭建需要考虑数据分片、数据同步和负载均衡三方面的问题,可以选择使用第三方中间件或手动实现。同时,也需要注意分布式系统的复杂性和一致性问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值