Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL8.0的几个新特性

MySQL8.0的几个新特性

作者头像
AsiaYe
发布于 2020-09-09 16:17:34
发布于 2020-09-09 16:17:34
55600
代码可运行
举报
文章被收录于专栏:DBA随笔DBA随笔
运行总次数:0
代码可运行

MySQL8.0的几个新特性

今天翻看MySQL8.0的官方文档的时候,看到了MySQL8.0的几个新特性,简单测了下,跟MySQL5.7做了下对比,测试的结果如下:

1、数据字典使用事务性质的表来代替之前非事务性质的表,以MySQL8.0.19和MySQL5.7.16为例,我们可以看下这两个版本的数据字典mysql库里面的相关表的存储引擎。

MySQL5.7.16

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+--------------------+---------------------------------------+--------+
| mysql              | columns_priv                          | MyISAM |
| mysql              | db                                    | MyISAM |
| mysql              | engine_cost                           | InnoDB |
| mysql              | event                                 | MyISAM |
| mysql              | func                                  | MyISAM |
| mysql              | general_log                           | CSV    |
| mysql              | gtid_executed                         | InnoDB |
| mysql              | help_category                         | InnoDB |
| mysql              | help_keyword                          | InnoDB |
| mysql              | help_relation                         | InnoDB |
| mysql              | help_topic                            | InnoDB |
| mysql              | innodb_index_stats                    | InnoDB |
| mysql              | innodb_table_stats                    | InnoDB |
| mysql              | ndb_binlog_index                      | MyISAM |
| mysql              | plugin                                | InnoDB |
| mysql              | proc                                  | MyISAM |
| mysql              | procs_priv                            | MyISAM |
| mysql              | proxies_priv                          | MyISAM |
| mysql              | server_cost                           | InnoDB |
| mysql              | servers                               | InnoDB |
| mysql              | slave_master_info                     | InnoDB |
| mysql              | slave_relay_log_info                  | InnoDB |
| mysql              | slave_worker_info                     | InnoDB |
| mysql              | slow_log                              | CSV    |
| mysql              | tables_priv                           | MyISAM |
| mysql              | time_zone                             | InnoDB |
| mysql              | time_zone_leap_second                 | InnoDB |
| mysql              | time_zone_name                        | InnoDB |
| mysql              | time_zone_transition                  | InnoDB |
| mysql              | time_zone_transition_type             | InnoDB |
| mysql              | user                                  | MyISAM |
+--------------------+---------------------------------------+--------+

MySQL8.0.19版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
| mysql              | columns_priv                          | InnoDB |
| mysql              | component                             | InnoDB |
| mysql              | db                                    | InnoDB |
| mysql              | default_roles                         | InnoDB |
| mysql              | engine_cost                           | InnoDB |
| mysql              | func                                  | InnoDB |
| mysql              | general_log                           | CSV    |
| mysql              | global_grants                         | InnoDB |
| mysql              | gtid_executed                         | InnoDB |
| mysql              | help_category                         | InnoDB |
| mysql              | help_keyword                          | InnoDB |
| mysql              | help_relation                         | InnoDB |
| mysql              | help_topic                            | InnoDB |
| mysql              | innodb_index_stats                    | InnoDB |
| mysql              | innodb_table_stats                    | InnoDB |
| mysql              | password_history                      | InnoDB |
| mysql              | plugin                                | InnoDB |
| mysql              | procs_priv                            | InnoDB |
| mysql              | proxies_priv                          | InnoDB |
| mysql              | role_edges                            | InnoDB |
| mysql              | server_cost                           | InnoDB |
| mysql              | servers                               | InnoDB |
| mysql              | slave_master_info                     | InnoDB |
| mysql              | slave_relay_log_info                  | InnoDB |
| mysql              | slave_worker_info                     | InnoDB |
| mysql              | slow_log                              | CSV    |
| mysql              | tables_priv                           | InnoDB |
| mysql              | time_zone                             | InnoDB |
| mysql              | time_zone_leap_second                 | InnoDB |
| mysql              | time_zone_name                        | InnoDB |
| mysql              | time_zone_transition                  | InnoDB |
| mysql              | time_zone_transition_type             | InnoDB |
| mysql              | user                                  | InnoDB |
+--------------------+---------------------------------------+--------+

可以看到,MySQL8.0.19版本中,除了slow_log和general_log表使用了CVS的存储引擎,其他表都采用Innodb的存储引擎,而MySQL5.7.16版本中的字典表还有很多都采用了MyISAM存储引擎,因为innodb表是事务安全的,支持crash_safe故障自愈,而MyISAM表不支持事务,所以从元数据的安全性来讲,MySQL8.0.19版本的元数据安全性要更好。

2、MySQL8.0.19支持DDL语句的原子性操作,要么所有的语句都成功,要么都失败,继而回滚,而MySQL5.7.16版本可能出现DDL部分成功,部分失败的现象,这句话看着比较不容易理解,举例来说明,首先来看MySQL5.7.16版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> use test;
Database changed
mysql> create table t1 (id int);
Query OK, 0 rows affected (0.07 sec)

mysql> create table t2 like t1;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
+----------------+
2 rows in set (0.00 sec)

mysql> drop table t1,t3;
ERROR 1051 (42S02): Unknown table 'test.t3'
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t2             |
+----------------+
1 row in set (0.00 sec)

上图中创建了两个表t1和t2,当我们使用一个语句对t1和t3进行drop的时候,在这种情况下,MySQL5.7.16会报错test.t3表不存在,但是当我们查看结果的时候,test.t1表已经被drop掉了。这种情况比较危险,一旦出现手误的场景,某些操作是不可逆的。

而对于MySQL8.0.19来讲,在同样的场景下,表现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> create table t2 like t1;
Query OK, 0 rows affected (0.12 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
+----------------+
2 rows in set (0.00 sec)

mysql> drop table t1,t3;
ERROR 1051 (42S02): Unknown table 'test.t3'
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
+----------------+
2 rows in set (0.01 sec)

可以看到,t3不存在的时候,t1并没有被drop掉,这符合我们的预期结果。

在这种情况下,MySQL8.0.19的表现好于MySQL5.7.16.

3、版本升级以前,在安装新版本的MySQL之后,MySQL服务器会在下次启动时自动升级数据字典表,此后,DBA应该手动调用mysql_upgrade来升级mysql模式中的系统表以及其中的对象。 其他架构,例如sys架构和用户架构。从MySQL 8.0.16开始,服务器执行以前由mysql_upgrade处理的任务。 在安装新的MySQL版本之后,服务器现在将在下次启动时自动执行所有必要的升级任务,而不依赖于DBA调用mysql_upgrade。

这部分内容还没有测试,后续我会补充一个在线升级MySQL8.0版本的案例,检验一下这个过程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
MySQL 8.0新特性 — 事务性数据字典与原子DDL
事务性数据字典与原子DDL,是MySQL 8.0推出的两个非常重要的新特性,之所以将这两个新特性放在一起,是因为两者密切相关,事务性数据字典是前提,原子DDL是一个重要应用场景。
brightdeng@DBA
2020/08/17
1.8K0
MySQL 8.0新特性 — 事务性数据字典与原子DDL
MySQL8.0新特性集锦
在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。
MySQL技术
2019/09/08
9250
MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项
* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、背景概述 在将数据库从MySQL 5.7迁移到GreatSQL8.0.32时,由于数据量较小且关注安全性,决定使用mysqldump执行逻辑备份,并将数据导入GreatSQL。但在备份时采用了备份全库(--all-databases)的方式,在导入GreatSQL后,修改用户密码时出现错误。这是因为mysqldump备份时包括了mysql系统库,而MySQL 5.7中的mysql系统库采用了MyISAM存储引擎,而GreatSQL的mysql系统库采用了InnoDB存储引擎。因此,在导入数据后,部分系统表被覆盖,导致了错误的出现。 二丶问题复现 1.部署2个实例 部署MySQL 5.7与GreatSQL 8.0.32,具体步骤省略 2.MySQL 创建测试数据 通过sysbench创建10张表 $ sysbench lua/oltp_read_write.lua --mysql-db=sysbench --mysql-host=192.168.1.162 --mysql-port=6003 --mysql-user=root --mysql-password=greatsql --tables=10 --table_size=5000 --report-interval=2 --threads=10 --time=600 --mysql-ignore-errors=all prepare 3.MySQL 创建测试用户 mysql> create user test1@'%' identified by 'greatsql'; Query OK, 0 rows affected (0.01 sec) mysql> grant all on *.* to test1@'%'; Query OK, 0 rows affected (0.01 sec) 4.MySQL进行全库备份 $ /mysql57/svr/mysql/bin/mysqldump -uroot -pgreatsql -h192.168.1.162 -P6003 --single-transaction --set-gtid-purged=OFF --all-databases > all.sql 5.GreatSQL导入备份数据 greatsql> source all.sql; 在导入过程中有如下报错,从这里可以看出导入时有系统表被导入,并且部分系统表不支持被修改:
GreatSQL社区
2024/06/11
1080
MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项
新特性解读 | MySQL 8.0 GIPK 不可见主键
作为 MySQL DBA ,相信大家都经历过在复制模式下,如果没有主键,遇到 load data ,大事务,ddl 等有大量表数据行扫描的行为时,会带来严重的主从延迟,给数据库稳定性和数据一致性带来隐患。
爱可生开源社区
2022/08/02
5460
卧槽,安装完MySQL竟然提示数据表不存在!!
五一假期过去一半了,不知道小伙伴们过的如何,相信很多小伙伴都出去玩了吧?我是在家研究了两天Seata源码。
冰河
2021/05/18
1.8K0
卧槽,安装完MySQL竟然提示数据表不存在!!
MySQL入门操作和常规DML、DDL、DQL使用
MySQL刷新权限,将某些权限从硬盘刷新到内存中(修改root密码自带隐式刷新权限操作)
星哥玩云
2022/08/18
4140
mysql8.0原子ddl特性
MySQL8.0支持原子DDL。原子DDL将DDL操作相关联的数据字典更新、存储引擎操作和二进制日志写入合并到单个原子事务中。
卖菜小弟
2020/03/05
1K0
学习笔记0521----mysql管理
MySQL的安装路径为:/usr/local/mysql/,可执行文件在bin目录下,此目录并未添加到系统的环境变量中,所以要使用mysql命令,需要把 /usr/local/mysql/bin/ 目录添加到系统的环境变量中。
嘻哈记
2020/11/24
1.1K0
13.3 mysql常用命令
mysql常用命令目录概要 查询库 show databases; 切换库 use mysql; 查看库里的表 show tables; 查看表里的字段 desc tb_name; 查看建表语句 show create table tb_name\G; 查看当前用户 select user(); 查看当前使用的数据库 select database(); 创建库 create database db1; 创建表 use db1; create table t1(id int(4), name char(40
运维小白
2018/02/06
5310
MySQL8.0原子DDL语法
原子DDL语句将数据字典更新、存储引擎操作和与DDL操作相关联的二进制日志写入合并到单个原子操作中。该操作要么提交,对数据字典、存储引擎和二进制日志保留适用的更改,要么回滚。
AsiaYe
2020/12/31
6440
Linux下Mysql数据库的基础操作
Mysql数据库是一种关系型数据库管理系统,具有的优点有体积小、速度快、总体成本低,开源,可移植性(跨平台,在不同系统中使用),可以和开发语结合,属于轻量级数据库。
江湖有缘
2023/11/11
3380
general_log 问题处理6
repair table [root@upgrade-slave ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 5.6.27-75.0-log Percona Server (GPL), Release 75.0, Revision 8bb53b6 Copyright
franket
2022/03/21
2390
MySQL8.0新特性之原子DDL语句
MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即使服务器在操作期间暂停,也会提交事务,并将适用的更改保留到数据字典,存储引擎和二进制日志,或者回滚事务。
星哥玩云
2022/08/16
8290
MySQL管理 – 操作和查看数据库的命令
摘要:本文主要学习了MySQL操作和查询数据库的常用命令。 查看数据库的基本信息 查询所有的数据库 语法: show databases; 示例: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------
星哥玩云
2022/08/18
2.8K0
linux下Mysql的简单操作
退出的话,直接输入quit或者exit即可。细心的读者也许会发现,在上一条命令中,使用的是绝对路径,这样不方便,但是单独只是输入一个 “mysql” 命令是不行的,因为 “/usr/local/mysql/bin” 没有在 PATH 这个环境变量里。如何把它加入环境变量PATH中?之前阿铭介绍过:
全栈程序员站长
2022/08/04
1.2K0
MySQL 8.0新特性:隐藏字段
上一篇介绍了MySQL8.0新特性之隐藏索引《MySQL 8.0新特性:隐藏索引》,这篇文章主要给大家介绍了关于MySQL 8.0新特性之隐藏字段;
SEian.G
2021/04/07
1.7K0
MySQL数据库(二):基本管理
安装环境: 操作系统版本:RHEL 6.5 安装版本:MYSQL 5.1 升级版本:MYSQL 5.6 一、默认库介绍 安装完成之后,mysql会自动创建以下三个默认的库. mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | mysql              | | performance_schema | +-
行 者
2018/03/26
2.3K0
MySQL数据库(二):基本管理
MySQL5.7升级到8.0过程详解
不知不觉,MySQL8.0已经发布好多个GA小版本了。目前互联网上也有很多关于MySQL8.0的内容了,MySQL8.0版本基本已到稳定期,相信很多小伙伴已经在接触8.0了。本篇文章主要介绍从5.7升级到8.0版本的过程及注意事项,有想做版本升级的小伙伴可以参考下。
MySQL技术
2020/05/26
6.1K0
mysql error 1227 42000_mysql导入报错
今天在学习mysql的时候,一顿蜜汁操作,再次使用mysql的时候发现,不管用啥子命令,都出现了一个报错 mysql> select user,password from mysql.user; ERROR 1142 (42000): SELECT command denied to user ‘root’@‘localhost’ for table ‘user’ 看了一下报错信息,权限不够。。。那就是没有权限了,so,给他权限就好了
全栈程序员站长
2022/11/10
8260
1-MySQL简述
常用的保存数据的容器有数组,集合,文件以及数据库。数组,集合将数据存储在内存中,但内存中的数据具有易失性,很容易丢失。文件可以实现永久存储,但文件不适用于大量文件的存储,难于检索查询。
Ywrby
2022/10/27
2550
相关推荐
MySQL 8.0新特性 — 事务性数据字典与原子DDL
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验