MySQL · 社区新闻 · MariaDB 10.2 GA

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

简介

2017-5-23,MariaDB终于GA了,我们贡献的Flashback也作为正式功能发布了。当然还存在几个Bug,不过截止本文发稿之前已经提交了Fix,目前Flashback没有发现新的Bug。阿里云上我们也即将公开我们的Flashback用户接口。 MariaDB 10.2 将成为目前主要的稳定版本,然后官方承诺支持到2022年5月。

我们就来看下10.2发布了哪些新的特性和功能:

  • InnoDB 成为了默认引擎 直到10.1版本,MariaDB还是以XtraDB作为默认引擎。考虑到截止10.2发布之前,MariaDB认为XtraDB还不足够稳定,因此不再作为默认引擎(当然开源社区也是有江湖的。。。。)。官方还写了一篇文章专门阐述为啥要用InnoDB而不用XtraDB了:https://mariadb.com/kb/en/mariadb/why-does-mariadb-102-use-innodb-instead-of-xtradb/
  • 语法和通用功能 
    • MyRocks成为了可用引擎,然而还是Alpha版,只能尝尝鲜 (MDEV-9658)。
    • Window functions(窗口函数)已经可以使用了。
    • 增加了 SHOW CREATE USER 语法可以看创建用户的语句
    • 新的 CREATE USER 选项,支持资源限制(例如每小时的最大语句执行量,每小时最大更新量之类的)和TLS/SSL
    • 新的 ALTER USER 语法支持修改资源限制。
    • Recursive Common Table Expressions (MDEV-9864),可以利用CTE写复杂的分析语句了。
    • 支持 WITH 语句。 WITH 是CTE的一个语法,允许用户在一个查询中多次引用一个子查询表达式(MDEV-8308 & MDEV-9864) — 来自于 Galina Shalygina 的贡献
    • 支持 CHECK CONSTRAINT 语法 (MDEV-7563)
    • 支持表达式的默认值,之前MySQL字段默认值只能是常量或者时间戳,现在可以写各种表达式来计算默认值了 (MDEV-10134)
    • BLOB 和TEXT 字段支持默认值了。
    • 为虚拟计算列加了很多约束过滤条件,细节可以参照 https://mariadb.com/kb/en/mariadb/virtual-computed-columns/
    • DECIMAL 字段支持的精度从30位增加到了38位,兼容Oracle (MDEV-10138)。
    • List分区方式增加了一个DEFAULT选项,可以把没有匹配到的值全部塞到DEFAULT分区 (MDEV-8348)
    • Oracle风格的 EXECUTE IMMEDIATE 语句 (MDEV-10585)
    • PREPARE 目前能解析大部分表达式了,比如 PREPARE stmt FROM CONCAT(‘SELECT * FROM ‘, table_name); (MDEV-10866)
    • InnoDB 也能支持空间索引了!
    • 增加 ed25519 验证插件 (MDEV-12160)
    • 更友好的InnoDB崩溃恢复过程报告,之前信息实在是太多,做了简化 (MDEV-11027)
    • 优化了InnoDB启动和关闭过程代码流程。
    • 为 Windows, CentOS, RHEL, Fedora 发行版的包增加了AWS Key Management插件。
    • 原子写除了能支持FusionIO,也能自动识别宝存的SSD卡了。
  • 不向下兼容的改动 
    • TokuDB从默认编译中剔除了,现在作为一个独立的引擎包 mariadb-plugin-tokudb,需要自行安装,默认是没有的
    • SQL_MODE 变化了;特别是,没有默认值的 NOT NULL 字段在插入时如果没有带一个值,不会再提供一个伪造的值进去了,直接报错。
    • 从老版本的MySQL服务器复制到MariaDB需要设置binlog_checksum为NONE,因为不兼容。
    • 新的保留字: RECURSIVE 和 ROWS。
  • 触发器
    •  同一个时间可以创建多个触发器了,这点跟Oracle一样了,之前每张表每种触发事件只能创建一个触发器 (MDEV-6112)。
    • CREATE TRIGGER 语句增加了 FOLLOWS/PRECEDES 子句,用以表示当前的触发器跟同类型的触发器执行顺序谁先谁后。
    • 触发器的执行都被计入了 Executed_triggers 状态变量 (MDEV-10915)
    • SHOW TRIGGERS and SHOW CREATE TRIGGER now include the date and time the trigger was created
  • 复制和Binlog 
    • 支持DML闪回的Flashback工具已经可以用了(MDEV-10570) – 这就是我贡献的代码了。
    • 新变量 read_binlog_speed_limit 可以用以限制Slave从出库读取Binlog的速度 (MDEV-11064) — 这是腾讯互娱DBA团队的贡献。
    • 支持延迟复制,备库可以强制比主库延迟一段时间 (MDEV-7145)。
    • 提供Binlog中的Event压缩功能 (MDEV-11065) – 也是腾讯互娱DBA团队的贡献。
    • 默认Binlog格式修改为MIXED (MDEV-7635)。
    • replicate_annotate_row_events 默认值改为 ON (MDEV-7635)。
    • slave_net_timeout 默认值减小到 60 秒 (MDEV-7635)。
    • 默认 server_id 从0 修改为 1。
  • GeoJSON / JSON 
    • JSON 函数支持(MDEV-9143)
    • 实现了ST_AsGeoJSON 和 ST_GeomFromGeoJSON 函数,因此空间特性可以用GeoJSON 格式导入导出(MDEV-11042)
  • Information Schema
    • 增加了一个插件可以报告所有用户的变量值,在 USER_VARIABLES 表中 (MDEV-7331)。之前经常会遇到问题就是客户说他的变量值不对,我们却无法验证,这个功能很好的解决了这个问题。
  • EXPLAIN
    •  EXPLAIN FORMAT=JSON 现在会在 outer_ref_condition 列显示每次循环匹配时SELECT检查的条件 (MDEV-9652)。
    • EXPLAN FORMAT=JSON 现在会在 sort_key 列回显示filesort操作使用的排序规则 (commit 2078392)。
    • EXPLAIN 曾经错误的展示了优化器如何决定ORDER BY子句和DISTINCT操作。这是个长期存在的问题了,包括MySQL本身。在 MDEV-8646 这个Issue中解决了这个问题(MDEV-7982, MDEV-8857, MDEV-7885, MDEV-326中有Test Case)。
  • 优化点 
    • 设置连接更快了,因为把THD创建的工作挪到了新创建的线程中,之前是管理所有连接的那个线程来统一创建THD (MDEV-6150)。
    • 条件下推到non-mergeable的视图和子表中 (MDEV-9197) — 还是 Galina Shalygina 贡献的代码
    • ANALYZE TABLE 的代码重构了,在收集引擎无关的统计信息时并不需要锁住整个表 (MDEV-7901)。
    • 内部 CRC32 函数在Power8下使用了优化过的实现 — MDEV-9872。
    • Table cache 可以自动分区来减少冲突 (MDEV-10296)。
  • 兼容性 
    • NO PAD的校对字符集,就是说,在比较字符串时,不会再启动处理掉末尾的空格 (MDEV-9711) — 这是 Daniil Medvedev 贡献的代码。
    • MariaDB 目前可以用于启动高于 MySQL 5.7.6 版本的数据文件目录 (MDEV-11170)。
  • CONNECT引擎 
    • CONNECT引擎支持ZIP压缩文件的表 (MDEV-11295)。
    • CONNECT引擎目前支持JDBC表类型 (MDEV-9765)。
  • 系统变量 变量的改动如下: 可以关闭死锁检测新变量 innodb_deadlock_detect,这个也是阿里提供的思路,淘宝很早就在使用这个功能。
    • aria_recover 重命名为 aria_recover_options (MDEV-8542)。
    • aria_recover 和 myisam_recover_options 的默认值修改为 BACKUP,QUICK。
    • 服务器版本可以随便伪造一个字串,因为有的应用会检查版本号 (MDEV-7780),我们也遇到过这种问题,一样的思路。
    • slave_parallel_workers 目前作为 slave_parallel_threads 的同义变量。
    • 新状态变量 com_alter_user, com_multi and com_show_create_user。
    • 新变量 innodb_tmpdir 可以设置一个目录来存储InnoDB临时表文件。
    • 新变量 read_binlog_speed_limit permits 可以限制Slave读取Binlog的速度 (MDEV-11064)。
    • innodb_log_files_in_group 目前可以设置为1 (MDEV-12061).
    • 线程池现在可以给有活跃事务的连接更高的优先级。这可以通过新的 thread_pool_prio_kickup_timer 和 thread_pool_priority 变量来控制 (MDEV-10297)。
    • group_concat_max_len 的默认值改为 1M (MDEV-7635)。
    • sql_mode 默认值改为STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION (MDEV-7635) (MariaDB 10.2.4 开始)。
    • innodb_compression_algorithm 默认值改为 zlib - 但是这并不意味着页面默认就会压缩 (MDEV-11838)。
    • innodb_log_compressed_pages 默认值改为ON (MDEV-7635)。
    • innodb_use_atomic_writes 和innodb_use_trim changed 默认值改为ON。
    • 没用的 innodb_api_* 变量被删除了 (MDEV-12050)。
  • 新的状态变量
    • innodb_have_punch_hole
    • innodb_pages0read
    • innodb_scrub_log
    • innodb_encryption_num_key_requests
  • 脚本 
    • mysqlbinlog 增加了连续Binlog备份支持,利用–stop-never变量,可以一直等待新的日志 (MDEV-8713)。
    • mysql_zap 和 mysqlbug 被移除了 (MDEV-7376, MDEV-8654)。
  • 其他改动 
    • 添加 OpenSSL 1.1 和 LibreSSL 的支持 (MDEV-10332)。
    • 在InnoDB持久化 AUTO_INCREMENT (MDEV-6076),这是从我们AliSQL中Port的功能。
    • 支持 COM_RESET_CONNECTION (MDEV-10340)。
    • “fast mutexes” 被移除了。因为这玩意并不比普通的mutex快,已经被默认关闭很多年了 (MDEV-8111)。
    • 旧的GPL客户端库已经去掉了,现在MariaDB Server使用了新的LGPL的Connector/C客户端链接库。
    • MariaDB 不再使用 jemalloc 编译。
    • TokuDB 现在是一个独立的引擎包,不再是MariaDb打包的默认组件 (因为TokuDb还需要Jemalloc)。

最新的MariaDB 10.2 GA就是这些改动了,希望对大家有帮助,也希望更多人参与MariaDb的开发,看到更多的人给MariaDB贡献代码!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
24 1
|
4月前
|
Ubuntu 关系型数据库 MySQL
百度搜索:蓝易云【ubuntu20.4服务器安装mysql社区版并开放3306端口】
现在,你已经在Ubuntu 20.04服务器上成功安装了MySQL社区版,并且已经开放了3306端口,可以通过该端口访问MySQL服务器了。请确保在生产环境中设置安全措施,例如设置强密码、限制访问等,以保护数据库的安全性。
94 2
|
3月前
|
NoSQL 关系型数据库 MySQL
基于Python和mysql开发的BBS问答社区管理系统(源码+数据库+程序配置说明书+程序使用说明书)
基于Python和mysql开发的BBS问答社区管理系统(源码+数据库+程序配置说明书+程序使用说明书)
|
6月前
|
NoSQL 关系型数据库 MySQL
阿里云RDS关系型数据库大全_MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
阿里云RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB
254 0
|
4月前
|
Ubuntu 关系型数据库 MySQL
百度搜索:蓝易云【ubuntu20.4服务器安装mysql社区版并开放3306端口】
恭喜!您已成功在Ubuntu 20.04服务器上安装MySQL社区版并开放3306端口。现在您可以开始使用MySQL数据库了。
86 0
|
4月前
|
存储 运维 关系型数据库
MySQL官方特供649页顶级笔记,凝聚社区力量深入技术内幕
但凡有职场经验的兄弟都知道,大厂的面试真是一言难尽,不光看你面试时的临场发挥能力,还要分N次考你对公司业务核心技术的熟悉度。
|
6月前
数字化社区网格管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(二)
数字化社区网格管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
|
6月前
|
JavaScript 前端开发 Java
数字化社区网格管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
数字化社区网格管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
|
6月前
社区买菜系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(二)
社区买菜系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
|
6月前
|
运维 Java 测试技术
社区买菜系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
社区买菜系统 毕业设计 JAVA+Vue+SpringBoot+MySQL