暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 几个新特性

MySQL数据库学习笔记 2021-04-26
310

也用了一段时间MySQL8.0,对几个有用的新特性来说一说

1.变量持久化

8.0以前MySQL需要修改变量,临时的办法:

set global max_connections = 1000;系统重启后失效,需要放在my.cnf里面才能永久生效。

我们来看下新语法:

添加变量:

SET PERSIST max_connections = 1000;

SET @@PERSIST.max_connections = 1000;


删除变量:

要从中删除特定的持久变量 mysqld-auto.cnf,但如果文件中不存在该变量,则发出警告而不是错误IF EXISTS ,请在前面的语法中添加一个子句:


RESET PERSIST IF EXISTS system_var_name;


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



2.sql_require_primary_key参数

show variables like '%sql_require_primary_key%'

用于控制创建表必须包含主键,如果没有主键,则直接报错。

MGR环境也是要求每个表都需要主键,建议是表都开启此参数


3.innodb_dedicated_server参数

当innodb_dedicated_server启用时,InnoDB会自动配置以下变量:


innodb_buffer_pool_size


innodb_log_file_size


innodb_log_files_in_group (自MySQL 8.0.14起)


innodb_flush_method


仅innodb_dedicated_server当MySQL实例在数据库专用服务器上时,才考虑启用 。单节点是比较推荐的。

innodb_dedicated_server如果MySQL实例与其他应用程序共享系统资源,则不建议启用 。


官方解释

innodb_buffer_pool_size

Detected Server Memory

Buffer Pool Size

Less than 1GB

128MiB (the default value)

1GB to 4GB

detected server memory * 0.5

Greater than 4GB

detected server memory * 0.75


innodb_log_file_size

Buffer Pool Size

Log File Size

Less than 8GB

512MiB

8GB to 128GB

1024MiB

Greater than 128GB

2048MiB


innodb_log_file_size

Buffer Pool Size

Log File Size

Less than 8GB

512MiB

8GB to 128GB

1024MiB

Greater than 128GB

2048MiB


innodb_log_files_in_group

Buffer Pool Size

Number of Log Files

Less than 8GB

ROUND(buffer pool size)

8GB to 128GB

ROUND(buffer pool size * 0.75)

Greater than 128GB

64


innodb_flush_method

flush method设置为 O_DIRECT_NO_FSYNC当 innodb_dedicated_server被启用。如果该O_DIRECT_NO_FSYNC设置不可用,innodb_flush_method则使用默认设置。


InnoDB O_DIRECT 在刷新I O期间使用,但fsync() 在每次写操作后跳过系统调用。


3.加密方式及密码策略

1.默认的加密方式发生变化

在MySQL 8.0中,caching_sha2_password是默认的身份验证插件而不是之前版本的mysql_native_password,默认的密码加密方式是sha2。

如果需要保持之前的验证方式,

并保持之前版本的密码加密方式需要在配置文件中修改,暂不支持动态修改,需要重启生效:default_authentication_plugin = mysql_native_password。


2.default_password_lifetime默认0

此变量定义全局自动密码过期策略

。默认 default_password_lifetime 值为0,这将禁用自动密码过期。

如果的值为 default_password_lifetime正整数N(最大值65535),密码必须每N天更改一次。

参数可以动态设置:

SET PERSIST default_password_lifetime = 180;

SET PERSIST default_password_lifetime = 0;


 #修改加密规则为永不过期

ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'passowrd' PASSWORD EXPIRE NEVER;

#更新一下用户的密码加密方式为之前版本的方式

ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'password';


 #刷新权限

FLUSH PRIVILEGES;


MySQL8.0的用户授权和之前有所区别,老版本的常用授权语句在8.0中会报错:


MySQL8.0之前版本:

GRANT ALL ON *.* TO `wangwei`@`127.0.0.1` IDENTIFIED BY

 'passowrd' WITH GRANT OPTION;

MySQL8.0版本:

CREATE USER `wangwei`@`127.0.0.1` IDENTIFIED BY 'passowrd';

GRANT ALL ON *.* TO `wangwei`@`127.0.0.1` WITH GRANT OPTION;


MySQL8.0中带过期时间用户的创建:

CREATE USER `wangwei`@`127.0.0.1` IDENTIFIED BY 'wangwei' PASSWORD EXPIRE INTERVAL 90 DAY;

GRANT ALL ON *.* TO `wangwei`@`127.0.0.1` WITH GRANT OPTION;


4.角色管理

MySQL角色是指定的权限集合。

像ORACLE一样,角色可以拥有授予和撤消的权限。

CREATE ROLE并 DROP ROLE角色创建和删除;

GRANT并 REVOKE为用户和角色分配和撤销权限;

SHOW GRANTS 显示用户和角色的权限和角色分配;

SET DEFAULT ROLE 指定哪些帐户角色默认处于活动状态;

SET ROLE 更改当前会话中的活动角色。

CURRENT_ROLE()功能显示当前会话中的活动角色。


使用场景:


应用程序使用名为demo的数据库 。

与应用程序相关联,可以为创建和维护应用程序的开发人员以及管理员账户。

开发人员需要完全访问数据库。

(有的用户只需要读取权限,有的用户需要读取/写入权限。)

-- 创建角色

CREATE ROLE 'app_developer', 'app_read', 'app_write';


-- 角色授权

GRANT ALL ON demo.* TO 'app_developer';

GRANT SELECT ON demo.* TO 'app_read';

GRANT INSERT, UPDATE, DELETE ON demo.* TO 'app_write';


-- 创建用户

CREATE USER 'dev1'@'%' IDENTIFIED BY 'Dr@.1214';

CREATE USER 'read_user'@'%' IDENTIFIED BY 'Dr@.1214';

CREATE USER 'write_user'@'%' IDENTIFIED BY 'Dr@.1214';


-- 授权

GRANT 'app_developer' TO 'dev1'@'%';

GRANT 'app_read' TO 'read_user'@'%';

GRANT 'app_write', 'app_read' TO 'write_user'@'%';


撤销权限

REVOKE role FROM user;


剩余的一些8.0增强或者新增的功能,可以查看官方,包括表空间加密、redo加密,

InnoDB增强功能等可以参考官方网站


https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html



文章转载自MySQL数据库学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论