您的位置:首页 > 数据库 > MySQL

Mysql5.7版本新特征

2016-06-15 19:27 513 查看

Mysql5.7版本新特征

初始化方式变更

5.7版本之前

scripts/mysql_install_db \
--datadir=/data/sql_data \
--user=mysql --basedir=/home/mysql


5.7版本之后

bin/mysqld --initialize --user=mysql \
--basedir=/home/mysql \
--datadir=/home/mysql/data


支持为表增加计算列

mysql5.7之前需要使用触发器实现相关功能

触发器

--要实现的功能:c3=c1+c2

mysql> CREATE TABLE `test` (id int auto_increment not null, c1 int, c2 int, c3 int, primary key(id));

--创建插入触发器

mysql> create trigger inst_t before insert on test for each row set new.c3=new.c1+new.c2;

mysql> insert into test(c1,c2) values(12,13);

mysql> select * from test;

--当使用sql更新c1或者c2,c3的数值不能更新,有缺陷
--创建update触发器

mysql> create trigger upd_t before update on test for each row set new.c3=new.c1+new.c2;

mysql> update test set c1=4 where id=1;


视图解决

create view vm_t as select id,c1,c2,c1+c2 as c3 from test;

select * from vm_t;


使用视图和触发器对查询效率有一定的影响,生产环境下尽量少的使用视图和触发器

5.7版本

mysql> drop table test;

mysql> create table test(
id int auto_increment not null,
c1 int,
c2 int,
c3 int as(c1+c2),
primary key(id)
);

mysql> show create table test;


有虚拟列,不存储在磁盘中

引入JSON列类型及相关函数

5.7版本之前

只能在varchar或是text等字符类型的列中存储json类型的字符串,并通过程序解析使用json字符串

5.7版本之后

增加了json列类型及以json_开头的相关处理函数,如json_type(),json_object(),json_merge()等

--json数组
select json_array('a','b',now());

["a", "b", "2016-06-15 18:05:43.000000"]

--[]括起的数组

--json对象

select json_object('key1',1,'key2',2);

{"key1": 1, "key2": 2}

--{}括起的对象

--创建列名col_name,数据类型为json的表
create table test(col_name,json);


Replication相关增强

多源复制

channel的解决方案

基于表的多线程复制

5.7版本之前

在mysql5.6开始支持多线程复制,只不过是对于每一个库一个复制线程

5.7版本之后

增加了slave_parallel_type参数可以控制并发同步是基于database还是logic_clock

在线变更复制方式

5.7版本之前

要把基于日志点的复制方式变为基于gtid的复制方式或者是把基于gtid的复制方式变为基于日志点的复制方式必须要重启master服务器

简单来说,必须要有一个维护时间

5.7版本之后

允许在线变更,不用重启

SET @@GLOBAL.ENFORGE_GTID_CONSISTENCY=WARN;
--执行完这一步后要保证在所有服务器都没有警告发生;

SET @@GLOBAL.ENFORGE_GTID_CONSISTENCY=ON;
SET @@GLOBAL.GTID_MODE=OFF_PERMISSIVE;
SET @@GLOBAL.GTID_MODE=ON_PERMISSIVE;
SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
SET @@GLOBAL.GTID_MODE=ON;

--my.cnf
gtid-mode=ON

STOP SLACE[FOR CHANNEL 'channel'];
CHANNEL MASTER TO MASTER_AUTO_POSITION=1
[FOR CHANNEL 'channel'];
START SLAVE[FOR CHANNEL 'channel'];


InnoDB引擎增强

支持缓冲池大小在线变更

5.7版本之前

修改my.cnf文件,重启数据库服务器

5.7版本之后

innodb_buffer_pool_size参数变为动态参数,可以在线调整缓冲池大小

缓冲池的大小128M*的n倍

show variables like 'innodb_buffer%';


缓冲池的导入导出功能

参数控制

innodb_buffer_pool_dump_pct
innodb_buffer_pool_dump_now
innodb_buffer_pool_dump_at_shutdown
innodb_buffer_pool_load_at_startup
innodb_buffer_pool_load_now


避免数据库温机造成的影响

支持为innodb建立表空间

5.7版本之前

具有系统表空间及可以为每个表建立一个独立的表空间

5.7版本之后

支持CREATE TABLESPACE语法为一个表或多个表建立共用的表空间

安全和管理方面的加强

不再支持old_password认证

增加帐号默认过期时间及加强了对帐号的管理功能

对帐号的管理功能

help create user;


增加sys管理数据库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: