What is new? 阿里云 RDS for MySQL 8.0 上线 独家技术解读

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 原作者: 阿里云高级技术专家 冷香MySQL 8.0 简介 MySQL 5.7 到 8.0,Oracle 官方跳跃了 Major Version 版本号,随之而来的就是在 MySQL 8.0 上做了许多重大更新,在往企业级数据库的路上大步前行,全新 Data Dictionary 设计,支持 Atomic DDL,全新的版本升级策略,安全和账号管理加强,InnoDB 功能增强等,目前小版本已经 release 到 8.0.16,新的功能仍然在持续推出。

原作者: 阿里云高级技术专家 冷香

MySQL 8.0 简介

  MySQL 5.7 到 8.0,Oracle 官方跳跃了 Major Version 版本号,随之而来的就是在 MySQL 8.0 上做了许多重大更新,在往企业级数据库的路上大步前行,全新 Data Dictionary 设计,支持 Atomic DDL,全新的版本升级策略,安全和账号管理加强,InnoDB 功能增强等,目前小版本已经 release 到 8.0.16,新的功能仍然在持续推出。

RDS MySQL 8.0 产品是阿里云推出的 MySQL 系列云产品之一,使用完全兼容 MySQL 8.0 的阿里云 AliSQL 8.0 分支,除了官方在 MySQL 8.0 推出的全新功能外,AliSQL 沉淀了许多在 Alibaba 集团电商业务和云上几十万客户在使用 MySQL 过程中遇到的问题和需求,以此来加固AliSQL, 提升 AliSQL 的性能和稳定性。

下面分别对 MySQL 8.0 和 AliSQL 8.0 相关的版本和功能做简短的介绍:

MySQL 8.0 版本更新

  1. 数据字典
    MySQL 8.0 摒弃了 Server Layer 定义的 FRM 文件和其它非事务表,使用了一组 InnoDB 表来保存数据字典,支持事务特性。
  2. Atomic DDL
    在 Data Dictionary 支持事务特性的基础上,8.0 增加了一个 DDL log 字典表,用来协调在 DDL 过程中,对数据字典,文件系统 和 事务系统的修改,做到原子性。
  1. 升级
    从 8.0.16 开始,对于系统表的修改,抛弃了 mysql_upgrade工具,使用在系统重启的时候,进行升级。
  2. 安全和账号管理
    账号方面,从 8.0 开始,支持 role 对权限进行便捷管理,以及新增多个系统权限,分别对应新增了 ROLE_EDGES,GLOBAL_GRANTS 两个系统表;mysql schema 下的涉及权限和用户相关的表更改成 InnoDB 引擎,支持事务特性,保证了账号管理语句的原子性。

认证方面,caching_sha2_password 作为默认的认证 plugin,以提升安全,但要注意并不能和 8.0 之前的client进行兼容。

链路加密,如果编译了OpenSSL 1.1.1 及以上,MySQL 8.0 SSL 将支持到 TLSv1.3 版本。

系统账号,在 8.0.16 新增 SYSTEM_USER 权限,用于区分 系统账号还是普通账户,可以对用户进行分类管理。

  1. Auto increment 持久化
    在 InnoDB 引擎中,新增了一个引擎私有的系统表 innodb_dynamic_metadata,自增值就保存在这个表里,在对每张表进行修改 auto increment 值的时候,都使用 redo log 进行保护,在做 checkpoint 的时候,持久化到这个系统表中,保证下次重启后,auto increment 能够从持久化中恢复出来,并且不受事务上下文回滚而影响。
  1. 死锁检测
    在高并发的情况下,InnoDB 引擎中对于事务锁的死锁检测,将是影响性能 scale 的重要因素,8.0 后提供了一个参数 innodb_deadlock_detect,用来打开或者关闭引擎的死锁检测,在业务能够明确相关风险的情况下,关闭死锁检测,能大幅提升并发能力。
  2. 临时表
    在 InnoDB 引擎中,用户创建的临时表将统一到 ibtmp 文件的临时表空间中; 对于系统运行过程中产生内存临时表,8.0后启用了新的 TempTable 引擎,支持 blob 字段,功能上优于 memory engine。
  3. Lock
    SELECT ... FOR SHARE 和 SELECT ... FOR UPDATE 新增了 NOWAIT 和 SKIP LOCKED 语法,减少长时间和非必要的阻塞。
  4. Instant add column
    InnoDB 解决了长期困扰 DBA 的加字段要 copy 整张表数据的问题。现在可以快速的增加字段,只修改数据字典,而不用修改表中的记录本身。
  5. 并行查询
    InnoDB 目前支持在 clustered index 上进行并行查询,提供 innodb_parallel_read_threads 参数控制session内的并行度。
  6. Redo优化
    Redo的写入一直是 InnoDB 高并发情况下的瓶颈,8.0 开始:

1)用户线程可以并发的copy redo 日志到 log buffer中

2)用户线程可以以更松散的方式把 dirty block 加入到脏块链表中

3)独立的写线程完成 redo 的持久化

  1. Json加强
    在Json上,8.0 增加了更多的功能性,详见 MySQL 8.0 的 document。
  2. Partial update on lob
    InnoDB 继续优化 partial update on lob data,对于仅仅修改很少字节的 lob 字段,能够大幅减少 undo data,并提升效率。
  3. 优化器和对象相关
    1)支持 invisible index,方便用户和 DBA 调试 statement。

2)descending indexes,提升降序扫描的效率。

3)Common table expressions,支持 with 语法完成。

4)Window functions,增加大量窗口函数

5)Regular expression,重新设计了正则表达式的支持。

AliSQL 8.0 功能介绍
除了 MySQL 8.0 官方的特性以外,AliSQL 8.0 在新功能,性能提升,稳定性保证,可诊断性上做了大量的改进:

  1. 诊断
    Top SQL:

AliSQL 在 statement 级别上,增加了新的性能诊断指标,方便更快更准确的量化 SQL 的开销:

Include three categories:
      1) CPU:   Elapsed time, CPU time
      2) LOCK:  Server MDL lock time, Storage transaction lock time.
                Mutex conflict(only for debug mode)
                RWLOCK conflict(demonstrate the block/index->lock conflict)
      3) IO:    DATA File read and time
                DATA File write and time
                Log File write and time
                Logical read, Physical read, Physical async read.

效果如下所示:

image

表和索引统计
新增表和索引级别的统计:

image

image

InnoDB IO 统计
image

  1. Sequence
    AliSQL 8.0 增加对 Sequence 对象的支持,方便和高效的获取单调唯一值:
SYNTAX:

      CREATE SEQUENCE SYNTAX:

      CREATE SEQUENCE [IF NOT EXISTS] schema.seq
         [START WITH <constant>]
         [MINVALUE <constant>]
         [MAXVALUE <constant>]
         [INCREMENT BY <constant>]
         [CACHE <constant> | NOCACHE]
         [CYCLE | NOCYCLE]
        ;

      SHOW SYNTAX:
        SHOW CREATE SEQUENCE schema.seq;

      QUERY SYNTAX:
        SELECT [nextval | currval | *] FROM seq;
        SELECT nextval(seq),currval(seq);
        SELECT seq.currval, seq.nextval from dual;
  1. 大文件异步删除
    InnoDB 大文件删除带来稳定性开销,所以 AliSQL 8.0 提供了异步删数据文件的机制:

参数设置:

INNODB_DATA_FILE_PURGE: Whether enable the async purge strategy
   INNODB_DATA_FILE_PURGE_IMMEDIATE: Unlink data file rather than truncate
   INNODB_DATA_FILE_PURGE_ALL_AT_SHUTDOWN: Cleanup all when normal shutdown
   INNODB_DATA_FILE_PURGE_DIR: Temporary file directory
   INNODB_DATA_FILE_PURGE_INTERVAL: Purge time interval (by milliseconds)
   INNODB_DATA_FILE_PURGE_MAX_SIZE: Purge max size every time (by MB)
   INNODB_PRINT_DATA_FILE_PURGE_PROCESS: Print the process of file purge worker

展示临时文件列表:

mysql> select * from innodb_purge_files;
    +--------+---------------------+---------------+---------------+------------------------+--------------+
    | log_id | start_time          | original_path | original_size | temporary_path         | current_size |
    +--------+---------------------+---------------+---------------+------------------------+--------------+
    |     36 | 2019-05-14 23:06:38 | ./test/t.ibd  |      37748736 | purge/#FP_1557846107_1 |     20971520 |
    +--------+---------------------+---------------+---------------+-----------------------+--------------+
  1. 隐含主键
    AliSQL 针对用户没有建 PK 的表,默认添加一个隐含主键,以加速 slave 端的 SQL apply。

查看方法:

mysql> set show_ipk_info=on;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table t\G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` int(11) DEFAULT NULL,
  `__#alibaba_rds_row_id#__` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Implicit Primary Key by RDS',
  KEY `__#alibaba_rds_row_id#__` (`__#alibaba_rds_row_id#__`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
  1. 事务超时
    AliSQL 新增 kill_idle_transaction_timeout 参数,以便对超时的事务连接进行 kill,防止事务长时间未提交带来的系统风险。
  2. Rotate slow log
    AliSQL 8.0 针对 slow log 收集过程中,对用户实例的影响,以及truncate带来的阻塞可能,提供了rotate slow log table的功能,影响更小,更快捷,并保证零数据丢失的收集方式。
set session rotate_log_table = on;
flush slow logs;

mysql> show variables like '%rotate_log_table%';
      +----------------------------+---------------------------------+
      | Variable_name              | Value                           |
      +----------------------------+---------------------------------+
      | rotate_log_table           | ON                              |
      | rotate_log_table_last_name | ./mysql/slow_log_1556373907.CSV |
      +----------------------------+---------------------------------+
  1. 审计日志
    AliSQL 8.0 重新设计的 audit log 模块,提供了四种刷新策略,分别是:
ASYNCHRONOUS:     Log asynchronously. Wait for space in the output buffer

      PERFORMANCE:       Log asynchronously. Drop requests for which there is

                                        insufficient space in the output buffer

      SEMISYNCHRONOUS: Log synchronously. Permit caching by the operating system

      SYNCHRONOUS:     Log synchronously. Call sync() after each request

提供适合不同业务模式的 audit log 配置供用户选择。

  1. 安全特性
    AliSQL 针对 SSL 链路,静态编译了OpenSSL 1.0 版本,目前支持到 TLSv1.2 版本。
  2. 优化
    AliSQL 针对 semi sync 和 MDL 进行了性能优化,提升了 semi sync 的性能,大幅减少了 MDL 锁阻塞的可能性。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
135 0
|
3月前
|
人工智能 关系型数据库 MySQL
基于阿里云的PolarDB MySQL版实现AI增强数据管理
本文将介绍如何利用阿里云的PolarDB MySQL版结合AI技术,实现数据管理的自动化和智能化。
246 0
|
3月前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
2月前
|
关系型数据库 MySQL 网络安全
阿里云安装Mysql
阿里云安装Mysql
162 1
|
3月前
|
关系型数据库 MySQL Serverless
函数计算产品使用问题之调用RDS MySQL的步骤是怎样的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
关系型数据库 MySQL Serverless
体验阿里云PolarDB MySQL Serverless集群
体验阿里云PolarDB MySQL Serverless集群
|
3月前
|
关系型数据库 数据库 RDS
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
141 0
|
2月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
2月前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
62 2
|
2月前
|
关系型数据库 数据库 数据安全/隐私保护
"告别繁琐!Python大神揭秘:如何一键定制阿里云RDS备份策略,让数据安全与效率并肩飞,轻松玩转云端数据库!"
【8月更文挑战第14天】在云计算时代,数据库安全至关重要。阿里云RDS提供自动备份,但标准策略难以适应所有场景。传统手动备份灵活性差、管理成本高且恢复效率低。本文对比手动备份,介绍使用Python自定义阿里云RDS备份策略的方法,实现动态调整备份频率、集中管理和智能决策,提升备份效率与数据安全性。示例代码演示如何创建自动备份任务。通过自动化与智能化备份管理,支持企业数字化转型。
66 2