【MySQL】MySQL 5.7 新特性整理

news/2024/12/23 0:06:21/

MySQL 5.7 新特性有很多,有以下这些

一、InnoDB变更

  1. 默认存储引擎改为InnoDB:MySQL 5.7将默认存储引擎改为InnoDB,以推动其成为事实标准。这意味着任何未指定存储引擎的表都将使用InnoDB。

CREATE TABLE t1 (id INT); -- 使用InnoDB
  1. 多页表空间:新引入多页表空间,用于代替原来的系统表空间和页文件。每个表空间可容纳多个表,并支持多达128TB的数据。

CREATE TABLESPACE ts_1 ADD DATAFILE 'ts_1.ibd' SIZE 1G;
CREATE TABLE t1 (id INT) TABLESPACE ts_1; 
  1. 临时表空间:新增临时表空间的概念,临时表不指定表空间时会使用临时表空间。临时表空间的大小可配置,默认自适应。

SET GLOBAL tmp_table_size = 100*1024*1024;  -- 配置临时表最大空间为100M
CREATE TEMPORARY TABLE t1 (id INT); -- 不指定表空间,使用临时表空间
  1. 自适应哈希索引:新引入自适应哈希索引,可自动调整索引的大小来控制存储空间,并且保持查询性能。

CREATE TABLE t1 (id INT, KEY idx1 (id)) ENGINE=INNODB;

二、安全性提升

  1. 更安全的密码策略:新增更严格的密码策略,包括密码长度限制、大小写混合、特殊字符及历史密码检查等。

SET GLOBAL validate_password_policy=MEDIUM;    -- 设置中等密码强度策略
CREATE USER 'user1' IDENTIFIED BY 'Pass@123';  -- 密码需符合策略
  1. 安全的初始密码:新增初始密码选项,可通过–initialize或–initialize-insecure选项设置root用户初始密码。

mysqld --initialize-insecure --user=mysql   --设置root初始密码,不安全 
mysqld --initialize  --设置root复杂初始密码,安全
  1. 自定义test数据库

    MySQL 5.7 默认安装完成后没有 test 数据库。用户可以自行创建 test 数据库并对其进行权限控制。

  2. 默认SSL加密

    MySQL 5.7 采用了更加简单的 SSL 安全访问机制,默认连接使用 SSL 的加密方式。

  3. 密码过期策略

    MySQL 5.7 支持用户设置密码过期策略,要求用户在一定时间过后必须修改密码。

  4. 审计日志:新增审计日志(Audit Log)功能,可记录数据库访问和操作的审计跟踪信息。


SET GLOBAL audit_log_enabled=ON;   -- 启用审计日志   
SET GLOBAL audit_log_exclude_users='MYSQL.EVENT';  -- 排除事件用户

三、性能优化

  1. SQL临时表现在存储在内存中:SQL临时表现在默认存储在内存临时表空间中, 之前使用磁盘空间,新特性可提升查询性能。

CREATE TEMPORARY TABLE t1 (id INT); -- 临时表存储在内存中
  1. Descending Indexes:新增降序索引,可加速降序查询。
 
CREATE TABLE t1 (id INT, KEY (id DESC));  -- 降序索引
SELECT * FROM t1 ORDER BY id DESC; -- 使用降序索引,性能提升   
  1. JSON支持:新增JSON数据类型,可有效存储和查询JSON文档。JSON类型数据可直接索引,查询性能较高。

CREATE TABLE t1 (jdoc JSON);  
INSERT INTO t1 VALUES('{"name": "zhou", "age": 30}');  
SELECT * FROM t1 WHERE jdoc->"$.name" = "zhou";   -- JSON查询使用->
  1. 子查询优化:优化器现在可以将IN子查询转换为JOIN查询,提高查询效率。

SELECT * FROM t1 WHERE id IN (SELECT id FROM t2);  
-- 上述查询可能被优化为JOIN查询

四、GIS及空间函数增强

  1. 新的GIS函数:新增多个GIS函数,如ST_Distance()、ST_Intersection()、ST_IsValid()等,用于计算几何对象之间的距离、交集以及判断几何对象的有效性。

SELECT ST_Distance(pt1, pt2) AS distance 
FROM points;  -- 计算两个点之间的距离SELECT ST_Intersection(ls1, ls2) AS intersect  
FROM lines; -- 找出两条线的交点
  1. 空间参照系支持:支持使用空间参照系定义GIS数据。可定义投影坐标系及地理坐标系(WGS 84)等。

CREATE TABLE geom (g GEOMETRY(POINT, 4326));  -- 使用WGS 84坐标系
  1. R-Tree索引 improve:R-Tree索引进行改进,支持更多几何类型并优化性能。R-Tree索引可用于空间查询和邻域分析。

CREATE INDEX idx ON geom (g) USING RTREE; -- 在geom表创建R-Tree索引 

五、新增fractional seconds时钟

时钟精度提高到微秒级(6位)。可用于需要高精度的场景,如高频交易记录。


CREATE TABLE t1 (ts TIMESTAMP(6),   -- 精确到微秒dt DATETIME(6)     -- 精确到微秒
);INSERT INTO t1 VALUES(NOW(6), NOW(6));   -- NOW()也可达微秒精度

六、SQL模式及用户权限控制增强

  1. 增强的 用户权限控制:用户权限控制支持授予和回收更细致的权限,实现更高的安全性要求。

GRANT SELECT (id, name) ON db1.t1 TO 'user1'@'localhost';  
-- 仅授权用户查询t1表的id和name字段REVOKE INSERT ON db1.t1 FROM 'user1'@'localhost'; 
-- 回收user1用户对db1.t1表的插入权限  
  1. 全面支持SQL标准模式:全面支持SQL标准模式概念,提供更高级的数据库封装及权限管理。

CREATE SCHEMA scm1;                  -- 创建模式  
CREATE TABLE scm1.t1 (id INT);      -- 创建模式下的表
GRANT ALL ON scm1.t1 TO 'user1';    -- 授权用户对模式中的表操作权限

七、新增AFTER命令

新增AFTER DDL触发器(Trigger)可在DDL语句执行后触发,主要用于审计和日志记录。


CREATE TRIGGER trig1 
AFTER CREATE ON SCHEMA db1  --  在db1模式执行CREATE语句后触发
FOR EACH STATEMENT
BEGININSERT INTO logs VALUES (NOW());  -- 向logs表插入一条记录 
END;  

CREATE TABLE db1.t1; – 执行一条CREATE语句,会触发AFTER触发器插入一条日志。

八、新增许多系统变量和状态变量

用于确定和控制 MySQL 的许多方面行为。主要包括:

  1. audit_log_xxx:控制审计日志行为的相关变量。

  2. default_password_lifetime:控制密码过期时间的变量。

  3. validate_password_xxx:控制密码策略相关变量。

  4. innodb_xxx:控制InnoDB存储引擎行为的众多变量。如innodb_file_per_table控制表空间等。

  5. sql_require_primary_key:强制要求生成的表必须有主键。

  6. log_throttle_xxx:控制日志记录频率的相关变量。示例:


SET GLOBAL audit_log_enabled=ON;   -- 启用审计日志
SET GLOBAL validate_password_length=10;  -- 设置密码最小长度为10
SET GLOBAL innodb_file_per_table=ON;   -- 启用文件每个表一个表空间
SET GLOBAL sql_require_primary_key=ON;  -- 要求表必须有主键

九、MySQL 5.7提供了CONTROL插件,用于限制连接数或特定主机的最大连接数。

可用于保护MySQL免受拒绝服务攻击或限制资源的连接。安装插件:


INSTALL PLUGIN conn_control SONAME 'conn_control.so';

示例限制root用户最大10个连接及来自主机192.168.0.1的连接数至多3个:


SELECT * FROM mysql.conn_control WHERE USER='root' AND HOST='localhost';
UPDATE mysql.conn_control SET MAX_CONNECTIONS=10 WHERE USER='root' AND HOST='localhost';SELECT * FROM mysql.conn_control WHERE HOST='192.168.0.1'; 
INSERT INTO mysql.conn_control (HOST,MAX_CONNECTIONS) VALUES('192.168.0.1',3);

十、资源组新增资源组功能

可用于将MySQL资源(如CPU,内存)划分为不同组,并控制每个组可使用的资源量。可增加QoS,为不同的工作负载或用户提供不同级别的服务。创建资源组:


CREATE RESOURCE GROUP rg1 TYPE = USER  VCPU = 2     -- 最多使用2个CPU MEMORY_LIMIT = 1073741824; -- 最大内存1GB

将用户添加到资源组:


GRANT USAGE ON *.* TO 'user1'@'localhost' REQUIRE RESOURCE GROUP rg1;

user1用户连接时,会被限定在rg1资源组中,最大可使用2个CPU和1GB内存。

十一、支持两类生成列(generated column)

MySQL 5.7 支持虚拟生成列和存储生成列。虚拟生成列仅将数据保存在表的元数据中,作为缺省的生成列类型;存储生成列则是将数据永久保存在磁盘上,需要更多的磁盘空间。

综上

MySQL 5.7中新增特性涉及较广,主要在提高安全性、优化性能、增强GIS及模式控制等方面。熟练掌握这些新特性,可更高效地使用和管理MySQL 5.7数据库。


http://www.ppmy.cn/news/345432.html

相关文章

交换机上云MACC方式

步骤1、尝试ping通114.114.114.114 步骤2、尝试ping cloud.ruije.com.cn 若不通,配置dns:ip name-server 223.5.5.5 步骤3、设备开启cwmp功能 Ruijie#conf t Ruijie(config)#cwmp Ruijie(config-cwmp)#acs url http://118.190.126.198/service/tr069s…

学习Vue 之 创建一个 Vue 应用

文章目录 Vue.js概述了解 Vue创建一个 Vue 应用参考 Vue.js 概述 计划学习前端,已有一些HTML,js,CSS的基础知识,下一步学习Vue.js。 以下是一些适合新手的Vue.js教程,你可以根据自己的实际情况和需求选择适合自己的…

₣Y2XAEfuV1₳ 这缎,登陸块守,友爱

题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:育婴员(五级)考试题是安全生产模拟考试一点通总题库中生成的一套育婴员(五级)报名考试,安全生产模拟考试一点通上育婴员…

2021年建筑电工(建筑特殊工种)报名考试及建筑电工(建筑特殊工种)考试报名

题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:广西省安全员C证考试题考前必练!安全生产模拟考试一点通每个月更新广西省安全员C证考试报名题目及答案!多做几遍,其实通过广西省安全员C证作业模…

2021年机修钳工(中级)考试试卷及机修钳工(中级)试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 机修钳工(中级)考试试卷根据新机修钳工(中级)考试大纲要求,安全生产模拟考试一点通将机修钳工(中级)模拟考试试题进行汇编&#xff0…

vscode右键点击,松开后自动触发鼠标所在位置的按钮(误触发双击效果)

例如如下,右键展开菜单,松手会自动触发转到声明功能 解决方案: 1、安装easystroke sudo apt-get install easystroke 2、打开easystroke,选择preferences tab 3、点击Gesture Button,在出现的框中右键单击一次 4、点…

餐企复苏破局!高效智能营销+服务如何打造?

随着数字化时代的飞速发展,越来越多的行业对企业运营服务模式的需求已逐渐趋向于“智能化”发展。特别是“后疫情时代”及O2O模式下的餐饮变革,餐饮行业的竞争已从餐食本身,发展为流量、服务、品牌效应的竞争,很多企业为了进一步促…

企业微信开发,简单测试。

企业微信开发,参考文档: https://github.com/wechat-group/WxJava/wiki