溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql5.7 InnoDB存儲引擎方面的提升有哪些

發布時間:2021-11-16 14:08:18 來源:億速云 閱讀:165 作者:柒染 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關 mysql5.7 InnoDB存儲引擎方面的提升有哪些,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

版本: 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存儲引擎方面的提升有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女