MySQL · 社区新闻 · MariaDB 10.2 GA

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

简介

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贡献代码!

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
253 8
|
5月前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
653 0
|
5月前
|
SQL Ubuntu 关系型数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
68 0
|
5月前
|
关系型数据库 MySQL 数据库连接
FreeSWITCH通过mod_mariadb原生连接MySQL
FreeSWITCH通过mod_mariadb原生连接MySQL
389 0
|
7天前
|
机器学习/深度学习 算法 索引
单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
本项目使用FW烟花优化算法求解单目标问题,并在MATLAB2022A中实现仿真,对比PSO和GA的性能。核心代码展示了适应度计算、火花生成及位置约束等关键步骤。最终通过收敛曲线对比三种算法的优化效果。烟花优化算法模拟烟花爆炸过程,探索搜索空间,寻找全局最优解,适用于复杂非线性问题。PSO和GA则分别适合快速收敛和大解空间的问题。参数调整和算法特性分析显示了各自的优势与局限。
|
1月前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
144 15
|
1天前
|
传感器 算法
基于GA遗传优化的WSN网络最优节点部署算法matlab仿真
本项目基于遗传算法(GA)优化无线传感器网络(WSN)的节点部署,旨在通过最少的节点数量实现最大覆盖。使用MATLAB2022A进行仿真,展示了不同初始节点数量(15、25、40)下的优化结果。核心程序实现了最佳解获取、节点部署绘制及适应度变化曲线展示。遗传算法通过初始化、选择、交叉和变异步骤,逐步优化节点位置配置,最终达到最优覆盖率。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
4月前
|
算法
基于GA遗传优化的TSP问题最优路线规划matlab仿真
本项目使用遗传算法(GA)解决旅行商问题(TSP),目标是在访问一系列城市后返回起点的最短路径。TSP属于NP-难问题,启发式方法尤其GA在此类问题上表现出色。项目在MATLAB 2022a中实现,通过编码、初始化种群、适应度评估、选择、交叉与变异等步骤,最终展示适应度收敛曲线及最优路径。
216 29