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;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章