百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

MySQL 8.0 18个管理相关的新特性

bigegpt 2024-08-18 14:00 8 浏览

最近在梳理 MySQL 8.0 的新特性,以下是从中选取的 18 个管理相关的新特性。

这 18 个新特性涉及的范围比较广,包括安装、备份、升级、DDL、慢日志、迁移、日常维护等。

掌握这些新特性有助于我们更好地使用 MySQL 8.0。

1. 可持久化全局变量

持久化后的变量会存储在数据目录下的 mysqld-auto.cnf 文件中。

以下是持久化变量相关的命令。

持久化后的变量即可在 mysqld-auto.cnf 中查看,也可通过 performance_schema.persisted_variables 查看。

2. 可设置管理 IP 和端口

管理 IP 通过 admin_address 参数设置,管理端口通过 admin_port 参数设置。

管理连接的数量没有限制,但仅允许具有 SERVICE_CONNECTION_ADMIN 权限的用户连接。

默认情况下,管理接口没有自己的独立线程,可将 create_admin_listener_thread 设置为 ON 开启。

建议设置管理 IP 和端口,这样即使连接数满了,也不用担心登陆不上实例去调整 max_connections 的大小。

3. 安装包

从 MySQL 8.0.16 开始,MySQL 针对通用二进制包(Linux - Generic)提供了一个最小化版本。

最小化版本移除了 debug 相关的二进制文件。

从 MySQL 8.0.31 开始,通用二进制包还提供了 Linux - Generic (glibc 2.17) (ARM, 64-bit) 版本的下载。

4. 资源组(Resource Groups)

资源组,可用来控制组内线程的优先级及其能使用的资源,目前,能被管理的资源只有 CPU。

以下是资源组的几种常用方式。

5. ALTER DATABASE 支持 READ ONLY 选项

设置为只读模式的库将禁止任何更新操作。适用于数据库迁移场景。

6. 设置 SHOW PROCESSLIST 的实现方式

SHOW PROCESSLIST 默认是从线程管理器中获取线程信息。这种实现方式会持有全局互斥锁,对数据库的性能会有一定的影响。

所以一般都推荐使用 performance_schema.processlist,这种方式不会持有全局锁。

在 MySQL 8.0.22 中,引入了 performance_schema_show_processlist 参数,用来设置 SHOW PROCESSLIST 的实现方式。设置为 ON,则会使用 performance_schema.processlist 这种实现方式,默认为 OFF。

7. DDL

在 MySQL 8.0.27 中,引入了 innodb_ddl_threads 和 innodb_ddl_buffer_size 提升索引的创建速度。

8. 秒级加列

从 MySQL 8.0.12 开始,Online DDL 开始支持 INSTANT 算法。

使用这个算法进行加列操作,只需修改表的元数据信息,操作瞬间就能完成。不过在 MySQL 8.0.29 之前,列只能添加到表的最后位置。

从 MySQL 8.0.29 开始,则移除了这一限制,新增列可以添加到表的任何位置。

不仅如此,从 MySQL 8.0.29 开始,删列操作也可以使用 INSTANT 算法。

9. 提升了 DROP TABLE,TRUNCATE TABLE,DROP TABLESPACE 操作的性能

这个优化是 MySQL 8.0.23 引入的。在之前的版本中,这些操作会遍历整个 Buffer Pool,删除对应表(或表空间)的数据页。在遍历的过程中,会加锁(latch)。加锁期间,会阻塞所有的 DML 操作。

注意,阻塞时间与 Buffer Pool 的大小有关,与表的大小无关。Buffer Pool 越大,遍历时间会越长,相应的,阻塞时间也会越久。

优化后,待删除的数据页会做异步处理。

10. 操作系统查看 MySQL 的线程名

从 MySQL 8.0.27 开始,通过 ps 命令可以直接查看 MySQL 的线程名。

11. 控制连接的内存使用量

从 MySQL 8.0.28 开始,引入了 connection_memory_limit 参数限制单个用户连接可以使用的最大内存量,global_connection_memory_limit 参数限制所有用户连接可以使用的内存总量。

注意,这里说的内存不包括 InnoDB Buffer Pool。

12. 慢日志

在 MySQL 8.0.14 中,引入了 log_slow_extra 参数,可以将更详细的信息记录到慢日志中。

看下面这个示例,对比下参数开启前后的输出。

除此之外,SET timestamp 现在记录的是语句的开始时间,不再是语句的结束时间。

13. 备份

在 MySQL 8.0.30 中,mysqldump 新增了 --mysqld-long-query-time 选项,允许自定义 long_query_time 的会话值。

这样可避免将备份相关的查询语句记录在慢日志中。

14. 克隆插件

克隆插件(Clone Plugin)是 MySQL 8.0.17 引入的一个重大特性。

有了克隆插件,只需一条命令就能很方便地添加一个新的节点,无论是在组复制还是普通的主从环境中。

15. 备份锁

注意,引入备份锁是为了阻塞备份过程中的 DDL,不是为了替代全局读锁。

之所以 XtraBackup 8.0 及 MySQL Enterprise Backup 在备份的过程中不再加全局读锁,主要是因为 performance_schema.log_status 的引入。

16. 数据库升级

数据库升级无需再执行 mysql_upgrade 脚本。升级逻辑已内置到 mysqld 的启动流程中。

升级之前,可通过 MySQL Shell 中的 util.checkForServerUpgrade() 检查实例是否满足升级条件。

17. MySQL 客户端

mysql 客户端默认会开启 --binary-as-hex。

开启后,mysql 客户端会使用十六进制表示法显示二进制数据。例如,

如果要禁用十六进制表示法,需设置 --skip-binary-as-hex。

18. 可通过 RESTART 命令重启 MySQL 实例

能使用 RESTART 命令的前提是 mysqld 是通过 mysqld_safe 或 systemctl 等守护进程启动的。

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...