绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
MySQL5.7与MySQL8.0部分新特性简介
2019-05-02 19:44:06


一、介绍MySQL8.0版本的30个新特性


2018 年 4 月 19 日,Oracle 发布了 MySQL 8.0 GA 版本,性能比 MySQL 5.7 快 2 倍。


1、增强了对 NoSQL 的支持。


2、MyISAM系统表全部换成InnoDB表


3、事务型数据字典,统一集中存储字典数据;移除了基于文件的元数据存储


4、在多线程(multi-threads replication)复制中使用了writeset


5、支持RESTART命令


6、group by 不再隐式排序


7、支持直方图:优化器利用column_statistics数据判断值的分布,得到更准确的执行计划。


8、窗口函数(Oracle中叫分析函数)减少代码复杂性和帮助开发人员更有效率。


9、slave 节点上log_slave_updates 默认值改为 ON(方便将该 slave 作为中继节点)


10、高可用性 InnoDB 集群提供了一个集成的原生数据库HA解决方案mgr组复制。


11、支持 ALTER TABLESPACE ... RENAME TO 表空间改名。


12、降序索引:在这种索引中的值也会按降序的方式进行排序。


13、支持WITH  AS(公用表表达式,Common Table Expression)


14、默认字符集由latin1变为utf8mb4。


15、nnoDB 现在支持表 DDL 的原子性,比如drop table t1,t2是一个整理。


16、InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。


17、加密redo-log和undo-log


18、账号权限管理添加了对 “角色” 的支持。


19、新增了动态配置项 innodb_deadlock_detect,用来禁用死锁检查,因为在高并发系统中,当大量线程等待同一个锁时,死锁检查会大大拖慢数据库。


20、新增innodb_dedicated_server,让InnoDB根据检测到的内存量自动配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method。


21、自增计数器(auto-increment counter)初始值在服务器重启后也不会受到影响;执行 ROLLBACK 也不会导致计数器的值被重用(解决了历史bug)。


22、InnoDB 新增备份专用锁,以前 InnoDB 表在线热备时若同时进行 DML 可能导致 InnoDB 文件的快照不一致,有了这个备份锁就不用担心了。


23、优化器可以忽略隐藏索引,但隐藏索引是被正常维护的,删除某索引之前,可以先设置为隐藏索引,确定对系统没有影响后再删除,以防删掉后再次重建。


24、选项 sql_log_bin 的全局作用域被改成会话级作用域,也就是修改本选项只影响本会话,不再影响全局

比如想在主库上修改某个表的定义,但是在slave库上不做修改:

master> set sql_log_bin=0;#设为0后,在Master数据库上执行的语句都不记录binlog

master> alter table test1 drop index idx_id add index (id,username);

master> set sql_log_bin=1;

要慎用set global sql_log_bin=0,这会导致所有在Master上执行的语句都不记录binlog。


25、MySQL 8.0版本支持在线修改全局参数持久化

set PERSIST expire_logs_days=10 ; #内存和名为mysqld-auto.cnf的json文件都修改

set GLOBAL  expire_logs_days=10 ; #只修改内存,重启丢失

启动mysql时先读到my.conf再读取mysqld-auto.cnf。

相同参数出现在两个文件中,以mysqld-auto.cnf中的参数为准。


26、增加SET_VAR语法(形式与oracle很像的hint)

在sql语法中增加SET_VAR语法,动态调整部分参数,有利于提升语句性能。

select /*+ SET_VAR(sort_buffer_size = 16M) */ id  from test order id ;

insert  /*+ SET_VAR(foreign_key_checks=OFF) */ into test(name) values(1);


27、取消Query Cache

MySQL QC造成的问题比它解决问题要多的多。

如果工作负载需要Query Cache,应该改用ProxySQL替代Query Cache。


28、临时表的改进

5.7中临时表被创建在ibtmp1表空间中。临时表元数据存储在内存中而非frm文件中。

8.0中使用临时表存储引擎作为临时表的默认引擎,替换掉了原有的内存存储引擎,使得VARCHAR和VARBINARY列的存储更为高效。


29、innodb select for update跳过锁等待

5.7时select...for update如果获取不到锁,会一直等,直到innodb_lock_wait_timeout超时。

8.0时如果查询的行已经加锁,那么nowait会立即报错返回,

8.0时skip locked也会立即返回,只是返回的结果中不包含被锁定的行。


30、增加资源组

MySQL 8.0新增了一个资源组功能,用于调控线程优先级以及绑定CPU核。

MySQL用户需要有 RESOURCE_GROUP_ADMIN权限才能创建、修改、删除资源组。

在Linux环境下,MySQL进程需要有 CAP_SYS_NICE 权限才能使用资源组完整功能。



二、补充:MySQL 5.7的新特性(新功能)

1、随机 root 密码

数据库初始化完成后,会自动生成一个 root@localhost 用户,root 用户随机产生一个密码。

2、自定义 test 数据库

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

3、 默认 SSL 加密

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

4、密码过期策略

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

5、用户锁

为管理员提供了暂时禁用某个用户的功能,使被锁定的用户无法访问和使用数据库。

6、引入系统库(sys schema)

系统库中包含一系列视图、函数和存储过程。


动力小刚于2019年4月  个人邮箱:zcs0237#163.com

分享好友

分享这个小栈给你的朋友们,一起进步吧。

MySQL干货资料
创建时间:2020-05-06 14:18:32
每天都有干货输出哦
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~