這篇文章將為大家詳細講解有關 MySQL5.7 InnoDB存儲引擎方面的提升有哪些,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
我們提供的服務有:成都網(wǎng)站設計、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、涪城ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的涪城網(wǎng)站制作公司
版本: mysql5.7.16
一 : 安全性
① 初始化數(shù)據(jù)庫方式的變化
老版本: 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 (會生成一個臨時密碼,若不想要密碼則用參數(shù) --initialize-insecure)
② 可以通過 mysql_ssl_ras_setup 來開啟 ssl
③ sql_mode 由mysql5.6的默認空 變?yōu)槟J 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是個臨界值,這里指字節(jié) , 不能跨越 如 varchar(30) --> varchar(320),則以copy的方式ddl,鎖表
4> 對于char 和 int來說還是老方法,即 copy 的算法進行ddl,鎖表
另 : 5.1和5.5 對于index的增刪用 algorithm = inplace方法 不鎖表;5.6支持對于 字段的增刪使用inplace方法。對于主鍵的更改仍然使用copy算法來實現(xiàn)。
3. 全文索引對中文的支持
1> mysql5.6 開始針對于innodb才有全文索引,但是不支持 中文,日文,韓文等。
2> select * from xxx where match(content) against('+horand -生日快樂' in boolean mode ); 表示查找有'horand' 沒有 '生日快樂'的文檔。
3> 新增參數(shù) ngram_token_size 用于檢索中文單詞的個數(shù)。與5.6設置單詞長度的幾個參數(shù)互斥
4. BP 預熱的改進
1> mysql5.6 由 i_b_p_dump_at_shutdown=1 和 i_b_p_load_at_startup=1 來實現(xiàn)相關預熱功能(mysql得正常關閉)
2> mysql5.7 添加參數(shù) i_b_p_dump_pct=xx 來控制 dump所有熱數(shù)據(jù)的百分比(從頭到尾),默認25,可以在1~100之間。mysql5.6是全部。
適當降低該值 可以 減少關閉和啟動mysql的時間
5. 在線調整 BP
1> 會阻塞用戶請求,建議在業(yè)務低峰期進行
6. 回收undo log 空間
1> mysql5.6 開始可以指定 undo log的文件目錄(innodb_undo_direcrory),個數(shù)(innodb_undo_tablespace)以及大小(innodb_undo_logs=128 回滾段數(shù)量)
2> mysql5.7 添加兩個參數(shù)控制undo log 的回收 ,innodb_undo_log_truncate=1(開啟回收機制),innodb_max_undo_log_size=1G(文件大小超過1G觸發(fā)回收機制)
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' 對應的表數(shù)據(jù)文件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(存儲了數(shù)據(jù)字典信息,經(jīng)測試不要也可) 將三個文件copy到新數(shù)據(jù)庫下
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
設置參數(shù) innodb_print_all_deadlocks=1 將死鎖信息打印到err日志
12. 只讀事務(5.6 5.7)
start transaction read only;
三 : SERVER 層提升
1. Json 字段類型的支持
2. 支持虛擬列(函數(shù)索引)
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. 記錄到系統(tǒng)日志
server啟動時 : --syslog
client 連接時: --syslog
關于 mysql5.7 InnoDB存儲引擎方面的提升有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。