共計 2787 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關 mysql5.7 InnoDB 存儲引擎方面的提升有哪些,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
版本:mysql5.7.16
一 : 安全性
① 初始化數據庫方式的變化
老版本: mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/opt/mysql
mysql5.7 : mysqld –initialize –user=mysql –basedir=/usr/local/mysql –datadir=/opt/mysql (會生成一個臨時密碼, 若不想要密碼則用參數 –initialize-insecure)
② 可以通過 mysql_ssl_ras_setup 來開啟 ssl
③ sql_mode 由 mysql5.6 的默認空 變為默認 STRICT_TRANS_TABLES
二 : InnoDB 存儲引擎方面的提升
1. 更改索引名不鎖表,直接更改
alter table xxx rename index ix_a to ix_b
2. Online DDL 對 字段屬性為 varchar 更改的改進
1 varchar(20) — varchar(40) 不鎖表直接更改
2 40 — 20 copy 方法鎖表
3 256 是個臨界值,這里指字節,不能跨越 如 varchar(30) — varchar(320),則以 copy 的方式 ddl,鎖表
4 對于 char 和 int 來說還是老方法,即 copy 的算法進行 ddl,鎖表
另:5.1 和 5.5 對于 index 的增刪用 algorithm = inplace 方法 不鎖表;5.6 支持對于 字段的增刪使用 inplace 方法。對于主鍵的更改仍然使用 copy 算法來實現。
3. 全文索引對中文的支持
1 mysql5.6 開始針對于 innodb 才有全文索引,但是不支持 中文,日文,韓文等。
2 select * from xxx where match(content) against(+horand - 生日快樂 in boolean mode); 表示查找有 horand 沒有 生日快樂 的文檔。
3 新增參數 ngram_token_size 用于檢索中文單詞的個數。與 5.6 設置單詞長度的幾個參數互斥
4. BP 預熱的改進
1 mysql5.6 由 i_b_p_dump_at_shutdown=1 和 i_b_p_load_at_startup=1 來實現相關預熱功能(mysql 得正常關閉)
2 mysql5.7 添加參數 i_b_p_dump_pct=xx 來控制 dump 所有熱數據的百分比(從頭到尾),默認 25,可以在 1~100 之間。mysql5.6 是全部。
適當降低該值 可以 減少關閉和啟動 mysql 的時間
5. 在線調整 BP
1 會阻塞用戶請求,建議在業務低峰期進行
6. 回收 undo log 空間
1 mysql5.6 開始可以指定 undo log 的文件目錄(innodb_undo_direcrory),個數(innodb_undo_tablespace) 以及大小 (innodb_undo_logs=128 回滾段數量)
2 mysql5.7 添加兩個參數控制 undo log 的回收 ,innodb_undo_log_truncate=1(開啟回收機制),innodb_max_undo_log_size=1G(文件大小超過 1G 觸發回收機制)
7. 通用表空間(開啟 innodb_file_per_table=1)
1 create tablespace ts_name
2 create table xxx(id int)engine=innodb TABLESPACE ts_name
3 多個表公用一個 ibd 文件 和 ibdata1 在一個目錄下
8. 獨立表空間指定存放路徑
1 5.6 和 5.7 create table t2(id int) DATA DIRECTORY= /tmp 對應的表數據文件 idb 生成一個軟連接 連接到 /tmp 目錄下
9. 遷移 某個 innodb 表(開啟 innodb_file_per_table=1,mysql5.6 5.7)
1 FLUSH TABLES xxx for EXPORT
2 xxx.frm xxx.idb xxx.cfg(存儲了數據字典信息,經測試不要也可) 將三個文件 copy 到新數據庫下
3 更改三個文件的屬主為 mysql:mysql
4 alter table xxx discart tablespace
5 alter table xxx import tablespace
6 check table xxx;
10. 直接修改 redo log 的大小
mysql5.5(ib_logfile0 size 最大支持 4G) 以及之前
1 set global innodb_fast_shutdown=0
2 mysqladmin shutdown
3 修改 innodb_log_file_size 的大小
4 移除老的 ib_logfile0 ib_logfile1
5 mysqld_safe 啟動 mysql
mysql5.6 mysql5.7(ib_logfile size 最大提升到幾十個 GB)
1 shutdown
2 修改配置文件 innodb_log_file_size
3 mysqld_safe 啟動
11. 死鎖打印到錯誤日志
1 mysql5.5 以及之前版本
show engine innodb status\G
2 mysql5.6 mysql5.7
設置參數 innodb_print_all_deadlocks=1 將死鎖信息打印到 err 日志
12. 只讀事務(5.6 5.7)
start transaction read only;
三 : SERVER 層提升
1. Json 字段類型的支持
2. 支持虛擬列(函數索引)
1 create table xxx(id int , mod_id int GENERATED Alaways as (( id % 10)) virtual ,key vir_col_inx (mod_id) )engine=innodb;
2 select * from xxx where mod_id=3; 則可以使用索引 vir_col_inx
3 插入只能使用 default 方式(insert into xxx values(13,default); )
3. explain 支持 update/delete/insert
4. 記錄到系統日志
server 啟動時:–syslog
client 連接時:–syslog
關于 mysql5.7 InnoDB 存儲引擎方面的提升有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。