01 mysql 5.7 特性

MySQL 5.7新特性

服务器功能增强

       数据库初始化方式变更

       支持为表增加计算列

       引入JSON列类型及相关函数

 

数据库初始化方式变更

       5.7之前

              Scripts/mysql_install_db\

                     --datadir=/data/sql_data \

                     --user=mysql  --basedir=home

 

Bin/mysqld  --initialize --user=mysql \

                     --basedir=/home/mysql\

                     --datadir=/home/mysql/data

 

 

Docker 容器中数据库数据持久化(Ubuntu系统)

docker run -d --name wen-mysql -e MYSQL_ROOT_PASSWORD=wen mysql

docker exec -it wen-mysql /bin/bash

       mkdir -p /opt/data/mysql

       docker run -d -v /opt/data/mysql/:/var/lib/mysql -p 3306:3306 --name wen-mysql -e MYSQL_ROOT_PASSWORD=wen mysql

       注释:-p 3306:3306->把容器的mysql端口3306映射到宿主机的3306端口

                     -v /opt/data/mysql:/var/lib/mysql->把宿主机/opt/data/mysql/目录映射到容器的/var/lib/mysql目录

                     在使用-v选项映射目录时,宿主机需关闭SElinux:  setenforce 0

 

支持为表增加计算列

在CREATE TABLE 及ALTER TABLE 语句中支持增加计算列的方式

col_name data_type [GENERATED ALWAYS] AS (expression) [VIRTUAL | STORED] [UNIQUE [KEY]] [COMMENT comment] [[NOT] NULL] [[PRIMARY]KEY ]

 

CREATE TABLE t(id INT auto_increment not null,c1 int,c2 int,c3 int, primary key(id));

DESC t;

CREATE TRIGGER insert_t BEFORE INSERT ON t FOR EACH ROW SET new.c3=new.c1+new.c2;

SHOW TRIGGERS;

-- 插入触发器

INSERT INTO t(c1,c2) VALUES(1,2);

SELECT * FROM t;

-- 更新触发器

CREATE TRIGGER update_t BEFORE UPDATE ON t FOR EACH ROW SET new.c3=new.c1+new.c2;

SHOW TRIGGERS;

UPDATE t set c1=5 WHERE id =1;

-- 视图

CREATE view vw_t as SELECT id,c1,c2,c1+c2 as c3 FROM t;

SHOW TABLE STATUS WHERE COMMENT='view';

SELECT * FROM vw_t;

DROP TABLE t;

DROP TABLE vw_t;

SHOW TRIGGERS;

-- 计算列

CREATE TABLE t(id INT auto_increment not null,c1 int,c2 int,c3 int AS (c1+c2), primary key(id));

SHOW CREATE TABLE t;

INSERT INTO t(c1,c2) VALUES(1,2);

SELECT * FROM t;

UPDATE t set c1=5 WHERE id =1;

SHOW TRIGGERS;

 

引用JSON列类型及相关函数

SELECT json_array('a','b',NOW());

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

CREATE TABLE t1(jdoc json);

INSERT INTO t1(jdoc) VALUES(json_array('a','b',NOW()));

 

Replication相关增强

       支持多源复制

       基于库或是逻辑锁的多线程复制

       在线变更复制方式

 

多源复制(为每一个数据源定义一个channel)

       一从多主(一个从服务器配置多个主服务器,将主服务器的数据汇笼)

       场景:主服务器分库分表,数据划分到不同的主服务器,为实现数据汇总功能

 

基于表的多线程复制

       从MySQL5.6开始支持多线程复制,但是是对于每一个库一个复制线程

MySQL5.7后对多线程复制功能增强,增加slave_parallel_type参数可以控制并发同步是基于database还是logical_clock(逻辑锁:逻辑时间戳)

 

 

在线变更复制方式

       MySQL5.7之前要把基于日志点的复制方式变为基于gtid的复制方式或是吧基于gtid的复制方式变为基于日志点的复制方式必须重启master服务器

       MySQL5.7之后 允许在线变更列复制的方式,而不用重启master服务器

 

  1. SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=WARN;执行完这一步后要保证所有服务器没有警告发生。
  2. SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=ON;
  3. SET @@GLOBAL..GTI_MODE=OFF_PERMISSIVE;
  4. SET @@GLOBAL.GTID_MODE=ON_PERMISSIVE;
  5. SHOW STATUS LIKE ‘ONGOING_ANONYMOUS_TRANSACTION_COUNT’;
  6. 6SET @@GLOBAL.GTID_MODE=ON;并加gtid-mode=ON到my.cnf.
  7. STOP SLAVE[FOR CHANNEL ‘channel’];

CHANGEMASTER TO MASTER_AUTO_POSITION=1 [FOR CHANNEL ‘channel’];

START SLAVE [FOR CHANNEL ‘channel’];

 

 

Innodb引擎增强

     支持缓冲池大小在线变更

       Innodb_buffer_pool_size参数变为动态参数,可以在线调整innodb缓存池的大小

 

     增加innodb_buffer_pool导入导出功能

       增加以下参数控制innodb_buffer_pool的导入导出

              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表建立表空间

              Mysql5.7前 具有系统表空间及可以为每个表建立一个的独立表空间。

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

 

       使用公用表空间/系统表空间的时候,回收磁盘空间不方便,不能直接drop。而独立表空间则可以直接回收

 

       SHOW VARIABLES LIKE 'innodb_buffer%';

-- 缓冲池大小

SELECT 134217728/(1024*1024);

       SET GLOBAL innodb_buffer_pool_dump_now=on;

       SHOW VARIABLES LIKE ‘innodb_buffer_pool%’;

 

       CREATE TABLESPACE ts1 ADD datafile 'ts1.ibd' ENGINE=INNODB;

-- 建立公用表空间 (多表共享数据)

CREATE TABLE t2(c1 int PRIMARY KEY) TABLESPACE ts1;

SHOW CREATE TABLE t2;

 

安全及管理方面的增强

       不再支持old_password认证(mysql_native_password使用)

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

       增加sys管理数据库

       USE mysql;

SELECT * FROM user;

SELECT * FROM user \G;

 

SHOW DATABASES;

USE sys;

SHOW TABLES;

SHOW CREATE TABLE statement_analysis;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值