Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL8.0几个有用的新特性

MySQL8.0几个有用的新特性

作者头像
AsiaYe
发布于 2020-05-18 15:38:29
发布于 2020-05-18 15:38:29
2.7K00
代码可运行
举报
文章被收录于专栏:DBA随笔DBA随笔
运行总次数:0
代码可运行

今晚有点事情耽搁了,昨天下午测试了几个MySQL8.0的新特性,写在这里,希望对大家有所帮助。

1、使用 set persist语法实现持久化my.cnf

该语法会先在data目录下创建一个json格式的mysqld-auto.cnf文件

数据库启动时,会首先读取其它配置文件(手工指定的),最后才读取mysqld-auto.cnf文件

这样就避免了我们改了数据库的参数,但是没有修改my.cnf文件,造成参数没有正确加载。

2、 自增id持久化,重启之后,不会缩减为max(PK)+1

在8.0之前的版本,自增值是保存在内存中,自增主键AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重启后,会重置AUTO_INCREMENT=max(primary key)+1。这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。

自增主键重启重置的问题很早就被发现(https://bugs.mysql.com/bug.php?id=199),一直到8.0才被解决。8.0版本将会对AUTO_INCREMENT值进行持久化,MySQL重启后,该值将不会改变。

MySQL server重启后不再取消AUTO_INCREMENT = N表选项的效果。如果将自增计数器初始化为特定值,或者将自动递增计数器值更改为更大的值,新的值被持久化,即使服务器重启。

3、 强制每个表都要有主键

sql_require_primary_key参数控制

mysql--dba_admin@127.0.0.1:(none) 15:34:12>>show variables like '%requi%';

+--------------------------+-------+

| Variable_name | Value |

+--------------------------+-------+

| password_require_current | OFF |

| require_row_format | OFF |

| require_secure_transport | OFF |

| sql_require_primary_key | ON |

+--------------------------+-------+

4 rows in set (0.00 sec)

如果该参数设为on,创建表的时候没有主键,MySQL会直接报错,并给出提示。如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql--dba_admin@127.0.0.1:test 15:44:44>>create table testc (id int);

ERROR 3750 (HY000): Unable to create 
or change a table without a primary key,
 when the system variable 'sql_require_primary_key' is set.
 Add a primary key to the table 
or unset this variable to avoid this message.
 Note that tables without a primary key 
can cause performance problems in row-based
 replication, so please consult your DBA
 before changing this setting.

4 生成随机密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql--dba_admin@127.0.0.1:test 15:59:27>>create user dba_yeyz@'%' identified by random password;
+----------+------+----------------------+
| user     | host | generated password   |
+----------+------+----------------------+
| dba_yeyz | %    | C.S}DfhQw:X+*DHYZ;7! |
+----------+------+----------------------+
1 row in set (0.00 sec)

mysql--dba_admin@127.0.0.1:test 16:01:42>>create user dba_yeyz2@'%' identified with 'mysql_native_password' by random password; 
+-----------+------+----------------------+
| user      | host | generated password   |
+-----------+------+----------------------+
| dba_yeyz2 | %    | pmdnVsK.SU]p]irSdPDz |
+-----------+------+----------------------+
1 row in set (0.00 sec)

5 mysqldump和mysqlpump备份

5.1、之前版本中,使用-all-databases参数导出数据的时候,不加--routines、--triggers和--events参数,也可以导出触发器和存储过程等信息,因为这些信息都在proc和event表中,现在不行了,需要加上--event和--routines选项才能导出存储过程和触发器

5.2、之前版本中--routines选项导出时候,备份账户需要有proc表的select权限,现在8.0需要有所有表的select权限

5.3、之前版本中导出触发器、处处过程可以同时导出其创建和修改的时间戳,8.0版本以后不可以了

6、DDL操作会耗时加长

旧版本中是直接对.frm文件进行更改操作,只写一个文件,新版本中需要更新数据字典表,需要将数据写到存储引擎、redo log 、undo log中

7、 撤销远程状态下的skip-grant-tables

--skip-grant-tables参数使用后,不能通过远程连接MySQL,而只能通过本地进行连接。

8、 自适应参数(实用)

innodb_dedicated_server=on

启用该参数时,innodb将自动配置以下变量:

innodb_buffer_pool_size

innodb_log_file_size

innodb_flush_method

单机多实例场景、或者MySQL和Redis等应用混布的情况下不建议使用,单机单实例场景下建议使用。

buffer pool配置规则:

当检测到的机器内存<1GB时,buffer_pool_size设置为128MB

当检测到的机器内存在1GB~4GB之间时,buffer_pool_size设置为机器内存*0.5

当检测到的机器内存大于4GB时,buffer_pool_size设置为机器内存*0.75

8.0.14之后,log file配置规则:

buffer pool小于8G,则log file配置为512MB

buffer pool在8G~128G之间,则log file配置为1024MB

buffer pool大于128G,则logfile配置为2048MB

8.0.14之前,log file配置规则

系统内存<1G,log file配置为48MB

系统内存<4G,log file配置为128MB

系统内存<8G,log file配置为512MB

系统内存<16G,log file配置为1024MB

系统内存>16G,log file配置为2048MB

redo 日志组内的日志个数 innodb_log_files_in_group

当buffer pool<8GB,log file个数为round(buffer pool size),如果结果小于2,则设置为2

当buffer pool在8G~128G,log file个数为round(0.75* buffer pool size)

当buffer pool大于128G,则log file个数为64个

9、密码及安全方面

支持密码过期策略,需要周期性修改密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql--dba_admin@127.0.0.1:test 16:17:17>>show variables like '%default_password_lifetime%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 0     |
+---------------------------+-------+
1 row in set (0.00 sec)

设置密码永不过期:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter user yeyz password expire never;

增加历史密码检测机制,防止总是几个密码反复使用,检测最近的几次密码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql--dba_admin@127.0.0.1:test 16:17:38>>show variables like '%password_history%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| password_history | 0     |
+------------------+-------+
1 row in set (0.00 sec)

需要提供旧密码才能修改新密码,防止被篡改

支持双密码机制,可以选择采用主密码还是第二密码连接,安全性更高

增加密码强度约束,避免使用弱密码

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)
系统表全部换成事务型的innodb表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。
爱可生开源社区
2023/03/23
1.6K0
MySQL 8.0新特性:自适应参数innodb_dedicated_server
MySQL8.0推出一个号称可以自适应服务器的参数,保证在各种不同的服务器、虚拟机、容器下自动适配服务器资源,让我们一起来看看到底它能自适应到什么地步。
SEian.G
2021/04/29
1.6K0
MySQL8.0新特性集锦
在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。
MySQL技术
2019/09/08
9530
MySQL的一些小tip
我们都知道Create user和grant for都可以用来创建一个用户,那么这两个语句的处理上有什么区别呢?这里我们从MySQL 5.5和MySQL 5.7两个版本来看。
AsiaYe
2019/11/06
6640
MySQL-8.0.30 版本新特性之动态调整 REDO
一个好的软件总是让用户的使用体验越来越好,这次 MySQL-8.0.x 的升级有两点改进,都让它更加易用;其一是添加了不可见主键,其二就是 redo 日志大小可以在线调整。
初代庄主
2022/12/19
1.1K0
MySQL中binlog的三种格式
在MySQL中,我们经常需要打开binlog来观察用户对某一个数据库的操作,binlog中记载着对用户数据库所做的所有修改类操作,例如delete,update,insert等等。binlog一般情况下分为三种格式,分别是row格式、statement格式、mixed格式,下面就这三种格式给出一些解释:
AsiaYe
2019/11/06
6.4K0
关于null值的一个小问题
一个业务方给了一个SQL,要让在线上执行,具体的SQL抽象完成之后是这样的:
AsiaYe
2019/11/06
6600
MySQL 8.0 information_schema系统库的改进
在表的数量很多时,每次查询I_S会从文件系统中读取每个单独的FRM文件,使用更多的CPU周期来打开表并准备相关的内存数据结构
星哥玩云
2022/08/18
5900
MySQL 8.0 information_schema系统库的改进
利用MySQL二进制包进行版本升级
线上有个数据库主从环境的MySQL版本是5.5.19版本的,由于5.5.19环境的MySQL在运维侧的支持不太好,例如:不能动态修改buffer_pool的值,alter table增加列的操作会长时间锁表等等。所以经过商量,需要对它进行升级,这次我采用的是在线升级的办法。我总结了一下在线升级过程中的总体步骤:
AsiaYe
2019/11/06
1.8K0
Centos7安装MySQL8.0 - 操作手册
MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!
洗尽了浮华
2019/05/25
1.9K1
MySQL8.0的几个新特性
今天翻看MySQL8.0的官方文档的时候,看到了MySQL8.0的几个新特性,简单测了下,跟MySQL5.7做了下对比,测试的结果如下:
AsiaYe
2020/09/10
5740
MySQL 8.0新特性:隐藏字段
上一篇介绍了MySQL8.0新特性之隐藏索引《MySQL 8.0新特性:隐藏索引》,这篇文章主要给大家介绍了关于MySQL 8.0新特性之隐藏字段;
SEian.G
2021/04/07
1.8K0
MySQL索引的一些小细
忙活了一天,晚上抽空做了几个关于索引和主键的小测试,记录一下,希望对大家有帮助。(所有测试都是在MySQL5.7的环境下测试的)
AsiaYe
2019/11/06
5740
MySQL 5.7 新特性之四
本系列文章基于5.7.20 版本讲述MySQL的新特性。从安装,文件结构,SQL ,优化 ,运维层面 复制,GITD等几个方面展开介绍5.7 的新特性和功能。同时也建议大家跟踪官方blog和官方文档,以尽快知悉其新的变化。前面写了一篇文章介绍 innodb 的特性,囿于相关知识点比较多 ,本文继续介绍5.7版本的innodb 新特性。
用户1278550
2018/08/09
7770
新特性解读 | MySQL 8.0 字段信息统计机制
网名“北在南方”,资深 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。
爱可生开源社区
2023/08/18
6300
新特性解读 | MySQL 8.0 字段信息统计机制
MySQL8.0之内存消耗关键因素
在MySQL8.0在启动的时候,会配置各种各样的buffer和cache来提高数据库的性能。如果我们在一台服务器上配置了MySQL8.0的服务,那么这台服务器的内存会同时被操作系统、MySQL8.0服务、以及其他应用程序所共享。
AsiaYe
2021/03/13
3.4K0
新特性解读 | MySQL 8.0 GIPK 不可见主键
作为 MySQL DBA ,相信大家都经历过在复制模式下,如果没有主键,遇到 load data ,大事务,ddl 等有大量表数据行扫描的行为时,会带来严重的主从延迟,给数据库稳定性和数据一致性带来隐患。
爱可生开源社区
2022/08/02
5810
MySQL 8.0新特性全面认识
整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储
星哥玩云
2022/08/16
1.1K0
MySQL 8.0 版本功能变更介绍
作者介绍:朱强,腾讯云数据库高级工程师,主要负责腾讯云数据库MySQL的开发和运营,曾就职于华为和网宿,在存储、文件系统开发有丰富经验。
腾讯云数据库 TencentDB
2018/07/13
4.2K1
MySQL8.0密码过期策略
MySQL8.0.16开始,可以设置密码的过期策略,今天针对这个小的知识点进行展开。
AsiaYe
2020/11/02
3.5K0
相关推荐
技术分享 | 可能是目前最全的 MySQL 8.0 新特性解读(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档