一、介绍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