[TOC]
# 服務功能增強
* 數據庫初始化方式變更
* 支持為表增加計算列
* 引入json列類型及相關函數
## 初始化方式的變更
注意各人路徑有些不同
mysql5.7之前
~~~
scripts/mysql_install_db \
--datadir=/data/sql_data \
--user=mysql --basedir=/home/mysql
~~~
---
mysql5.7之后
~~~
bin/mysqld --initialize --user=mysql \
--basedir=/home/mysql \
--datadir=/home/mysql/data
~~~
初始化后會提供個root用戶的默認密碼,我們要記錄下來
我們要改變密碼后才可對數據庫操作,這也是mysql對安全方面加強
## 支持為表增加計算列
當一個表的某個列是其他列計算而來的列叫計算列
mysql5.7之前要靠觸發器來實現
**而且要寫更新觸發器和插入觸發器,因為他的數據要隨著其他列改變而改變**
視圖也可以達到相同效果
---
mysql5.7之后
在create table及alter tablel語句中支持增加計算列的方式
~~~
col_name data_type [GENERATED ALWAYS] AS (expression)
[VIRTUAL | STORED] [UNIQUE [KEY]] [COMMENT comment]
[[NOT] NULL] [[PRIMARY] KEY]
~~~
比如創建
~~~
create table t (
id int(11) not null auto_increment,
c1 int(11) default null,
c2 int(11) default null,
c3 int(11) GENERATED ALWAYS AS (c1+c2) VIRTUAL,
primary key (id)
)engine=innodb default charset=utf8
~~~
## 引入json列類型及相關函數
mysql5.7之前
只能在varchar或text等字符類型的列中存儲json類型的字符串,并通過程序解析使用json字符串
mysql5.7之后
增加了json列類型及json_開頭的相關處理函數,如json_type(), json_object(), json_merge()等
比如我們要創建個數組轉為json
~~~
select json_array('a','b',now());
~~~
比如json對象
~~~
select json_object('key1',1,'key2',2);
~~~
比如建表
~~~
create table t1(jdoc json);
insert into t (jdoc) values (json_array('a','b',now()));
~~~
# Replication相關增強
* 支持多源復制
* 基于庫或是邏輯鎖的多線程復制
* 在線變更復制方式
## 支持多源復制
mysql5.7之前的一主多從

可以分擔主服務器的負載,可以在遠距離分發數據,如果我們想要多個主或是在主上進行數據庫的合并,在mysql5.7之前是無法完成的,除非是有一些第三方的插件
mysql5.7支持多源復制

比如把訂單表分布上不同的主服務器上
這樣可以在從服務器上進行數據的匯總
他是走channel實現的,不同的channel走不同的復制鏈路
## 基于表的多線程復制
mysql5.7之前
從mysql5.6開始支持多線程復制,只不過是對于每一個庫一個復制線程,對于一些庫的讀寫非常頻繁,這樣多線程的復制是沒有什么用的,有時反而比單線程慢
mysql5.7之后
mysql5.7后對多線程復制功能進行了加強,增加了slave_parallel_type參數可以控制并發同步是基于database還是logical_clock(邏輯鎖)
基于邏輯鎖,比如在主上執行事務的時候,給這個事務加上時間戳,從上根據時間戳并行的執行事務,這樣就大大的降低延遲復制
## 在線變更復制方式
mysql5.7之前
要把基于日志點的復制方式變為基于gtid的復制方式或是把基于日志點的復制方式必須要重啟master服務器
gtid復制方式無論在安全方式還是數據一致性方面上都是優于基于日志點的復制方式
mysql5.7之后
允許在線變更復制方式,而不用重啟master服務器
---
在線變更復制方式有7步

第一步有警告就處理警告
# Innodb引擎增強
* 支持緩沖池大小在線變更
* 增加innodb_buffer_pool導入導出功能
* 支持為innodb建立表空間
## 支持緩沖池大小在線變更
mysql5.7之前
要變更innodb_buffer_pool大小必須更改my.cnf文件后重啟數據庫服務器
mysql5.7之后
innodb_buffer_poll_size 參數變為動態參數,可以在線調整innodb緩存池大小
我們查看innodb_buffer的相關參數
~~~
mysql> show variables like 'innodb_buffer%';
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size | 134217728 |
| innodb_buffer_pool_dump_at_shutdown | ON |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_dump_pct | 25 |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | ON |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | 134217728 |
+-------------------------------------+----------------+
~~~
他大小調整是以chunk為單位的,每次調整都是一個chunk大小
~~~
mysql> select 134217728/(1024*1024);
+-----------------------+
| 134217728/(1024*1024) |
+-----------------------+
| 128.0000 |
+-----------------------+
1 row in set (0.00 sec)
~~~
如果我們定義這個 innodb_buffer_pool_instances ,我們就要用chunk的大小乘以這個倍數來調整
所以大小調整的范圍是
~~~
mysql> select 128*1;
+-------+
| 128*1 |
+-------+
| 128 |
+-------+
1 row in set (0.00 sec)
~~~
如果設置的不是這個倍數,他也會自動調整為這個倍數
## 增加innodb_buffer_pool導入導出功能

~~~
mysql> show variables like 'innodb_buffer_pool%';
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size | 134217728 |
| innodb_buffer_pool_dump_at_shutdown | ON |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_dump_pct | 25 |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | ON |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | 134217728 |
+-------------------------------------+----------------+
~~~
innodb_buffer_pool_dump_at_shutdown
innodb_buffer_pool_load_at_startup
這2個參數決定了宕機的時候需要導入和導出參數
innodb_buffer_pool_dump_pct 決定了導出導入緩沖池的百分比,默認25%導入到磁盤
innodb_buffer_pool_filename 決定了導出的文件名
innodb_buffer_pool_dump_now把這個設為on就開始導出了
## 支持為innodb建立表空間
mysql5.7之前
具有系統表空間以及可以為每個表建立一個獨立表空間
mysql5.7之后
支持create tablespace 語法為一個表或多個表建立共用的表空間
~~~
create tablespace ts1 add datafile 'ts1.ibd' engine=innodb;
~~~
這樣就建立好了一個ts1的表空間
~~~
create table t2(c1 int primary key) tablespace ts1;
~~~
這樣就創建了一個公共表空間
使用公共表空間
優點:
和系統表類似,能被一個表和多個表
比獨立使用的表更節約內存
文件可以不放在數據目錄下
缺點:
不能使用drop table對表空間進行回收
空間不容易回收
# 安全管理方面的增強
* 不再支持old_password認證
* 增加賬號默認過期時間
* 加強了對賬號的管理
* 增加sys對數據庫管理
刪除了匿名賬戶
~~~
mysql> show variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| default_password_lifetime | 0 |
+---------------------------+-------+
~~~
查看賬號默認過期時間,0是關閉,有些賬號默認是360就是默認360天過期,在這天數里面不改密碼,過了這天數就不能連接了
---
創建用戶的時候可以增加用戶過期時間和密碼加密方式

我們也可以對用戶進行鎖定
~~~
select * from mysql.user \G;
~~~
會在最下面看到account_locked這個表示賬號是否被鎖定,修改這個值可以讓賬號鎖定
有時候一些賬號測試sql注入,我們可以對這個賬號進行鎖定
---
mysql5.7之后建議不要關閉performance_shcmea這個庫,mysql5.7之前有些場景我們會關閉,5.7之后就不要這樣了
一些全局變量以前是在informatiion_schema這個里面,5.7是在performance_shcmea
- SQL
- 名詞
- mysql
- 初識mysql
- 備份和恢復
- 存儲引擎
- 數據表損壞和修復
- mysql工具
- 數據庫操作
- 增
- 刪
- 改
- 查
- 數據類型
- 整數類型
- 小數類型
- 日期時間類型
- 字符和文本型
- enum類型
- set類型
- 時間類型
- null與not null和null與空值''的區別
- 數據表操作
- 創建
- 索引
- 約束
- 表選項列表
- 表的其他語句
- 視圖
- sql增刪改查
- sql增
- sql刪
- sql改
- sql查
- sql語句練習
- 連接查詢和更新
- 常用sql語句集錦
- 函數
- 字符函數
- 數值運算符
- 比較運算符與函數
- 日期時間函數
- 信息函數
- 聚合函數
- 加密函數
- null函數
- 用戶權限管理
- 用戶管理
- 權限管理
- pdo
- 與pdo相關的幾個類
- 連接數據庫
- 使用
- pdo的錯誤處理
- pdo結果集對象
- pdo結果集對象常用方法
- pdo預處理
- 常用屬性
- mysql編程
- 事務
- 語句塊
- mysql中的變量
- 存儲函數
- 存儲過程
- 觸發器
- mysql優化
- 存儲引擎
- 字段類型
- 三范式和逆范式
- 索引
- 查詢緩存
- limit分頁優化
- 分區
- 介紹
- 分區算法
- list分區
- range范圍
- Hash哈希
- key鍵值
- 分區管理
- 特別注意
- 分表
- 數據碎片與維護
- innodb表壓縮
- 慢查詢
- explain執行計劃
- count和max,groupby優化
- 子查詢優化
- mysql鎖機制
- 介紹
- 演示
- 總結
- 樂觀鎖和悲觀鎖
- 扛得住的mysql
- 實例和故事
- 系統參數優化
- mysql體系結構
- mysql基準測試
- 索引
- mysql的復制
- win配置MySQL主從
- mysql5.7新特性
- 常見問題
- general log
- 忘記密碼
- uodo log與redo log
- 事務隔離級別
- mysql8密碼登錄
- explain
- 高效的Tree表
- on delete cascade 總結
- mongod
- 簡介
- 集合文檔操作語句
- 增刪改查
- 索引
- 數據導入和導出
- 主從復制
- php7操作mongod
- 權限管理
- redis
- redis簡介
- 3.2版本配置文件
- 3.0版本配置文件
- 2.8版本配置文件
- 配置文件總結
- 外網連接
- 持久化
- RDB備份方式保存數據
- AOF備份方式保存數據
- 總結
- win安裝redis和sentinel部署
- 事務
- Sentinel模式配置
- 分布式鎖
- 管道
- php中redis代碼
- 發布訂閱
- slowlog
- Redis4.0
- scan和keys
- elasticsearch
- 配置說明
- 啟動
- kibana
- kibana下載
- kibana配置文件
- kibana常用功能
- 常用術語
- Beats
- Beats簡介
- Filebeat
- Packetbeat
- Logstash
- 配置
- elasticsearch架構
- es1.7
- head和bigdesk插件
- 插件大全
- 倒排索引
- 單模式下API增刪改查
- mget獲取多個文檔
- 批量操作bulk
- 版本控制
- Mapping映射
- 基本查詢
- Filter過濾
- 組合查詢
- es配置文件
- es集群優化和管理
- logstash
- kibana
- es5.2
- 安裝
- 沖突處理
- 數據備份
- 缺陷不足
- 集群管理api
- 分布式事務
- CAP理論
- BASE模型
- 兩階段提交(2PC)
- TCC (Try-Confirm-Cancle)
- 異步確保型
- 最大努力通知型
- 總結