天天看點

MySQL 5.7新特性新的特性移除的特性

    關于mysql5.7,現在據說也是蠻火的,此文主要參照官方文檔整理的,時日有些長了,最新的特性可能沒采集進來,各位看客朋友們随意就好~~勿噴

1、安全性增強

1)mysql.user表。plugin字段要求非空;新增時間戳字段儲存密碼最後被修改時間;不再使用password字段,使用authentication_string替代

2)安裝與服務。全新的安裝方式mysqld --initialize;安裝完畢後隻建立一個本地root賬戶,即root@'localhost';無匿名賬戶;安裝不建立test庫;ssl支援

3)新增選項super_read_only,鎖定超級管理者的寫操作

4)提供新的指令行選項--disabled-storage-engines,禁用存儲引擎清單,防止使用者使用任意特定的存儲引擎

5)建議的行為:設定參數secure_file_priv的值,并修改該路徑的權限為僅mysql所有

2、基本特性

預設啟用strict_trans_tables

推薦sql_mode=no_engine_substitution,strict_trans_tables,no_zero_date,no_zero_in_date,error_for_division_by_zero,no_auto_create_user

2)online alter table改進

線上alter table語句現在支援rename index字句(非主鍵),并且實作過程不需要table-copy操作。本特性适用于所有的存儲引擎

3)json支援。

使用mysql的最新的json功能,現在伺服器可以高效存儲,檢索和查找 json 資料

5)alter table ... exchange partition 語句新增without validation子句,即不進行分區校驗

6)新增字元集gb18030

7)sys schema

3、innodb增強特性

2)優化了對臨時表的ddl操作(create table, drop table, truncate table以及alter table),提升臨時表的ddl操作性能

4)支援空間資料類型以及空間索引(5.6使用binary blob data替代)

6)新增一類日志temporary table undo log,為保留的32個復原段,用于記錄臨時表極其相關對象的修改

7)innodb buffer pool dump/load功能增強。新增參數innodb_buffer_pool_dump_pct,支援僅dump每個緩沖池中僅最熱的 n% 頁;load操作改進,減少了對使用者活動的破壞性,減少io資源占用。innodb_buffer_pool_dump_at_shutdown,innodb_buffer_pool_load_at_startup參數預設開啟。

8)新增full-text解析器插件。是全文搜尋更加靈活與優化

9)page cleaner線程不再隻有一個,通過新增的innodb_page_cleaners參數來指定page cleaner線程的數量

10)支援分區表的三種online ddl操作:optimize table,alter table ... force,alter table ... engine=innodb。

11)當系統表空間建立在fusion-io裝置上時,雙寫機制将自動禁用(多餘)

12)支援分區表的transportable tablespaces功能

14)完善bulk load特性,提升索引建立和重建的速度。新增配置參數innodb_fill_factor,定義在使用bulk load方法建立索引時index page的使用百分比,預留的空間作為索引的增長空間

15)新增redo log日志記錄類型mlog_file_name,用于辨別表空間,簡化表空間的崩潰恢複過程

16)截斷undo特性。通過新增的配置選項innodb_undo_log_truncate啟用,并由參數innodb_max_undo_log_size指定截斷門檻值,當undo log超過門檻值時截斷已回收的undo log,防止磁盤空間緊張

17)預設row_format=dynamic,引入了一個新的全局變量innodb_default_row_format,用于指定預設的 row_format

18)增加本地分區支援,減少整體資源的消耗

19)新增create tablespace語句。建立的通用表空間可讓使用者自由的選擇表和表空間之間的映射

20)預設打開innodb_file_per_table參數

4、優化器

5.7中重寫了大部分解析器,優化器和成本模型,重構了select、set、insert/replace、delete、update語句的解析。

in查詢優化。mysql 5.7的in查詢能夠使用到index rang scan方式

union all查詢的優化。盡量避免union all語句建立臨時表,并提高了響應速度

filesort優化。通過壓進排序緩沖區多個元組,使filesort執行的更快;更充分地利用排序緩沖區,減少磁盤排序

only_full_group_by sql子產品改進

新增了更多的hints,并提供新的hints文法

explain for connection。能擷取一個指定會話中正在執行的sql語句的執行計劃,而不需要找到sql語句

增強json explain輸出

5、複制優化

1)dump線程增強。5.7重寫了dump線程,減少了鎖争用并提高了master的吞吐量

2)支援多源複制。即多主一從的模式

3)支援線上修改replication filter(需要停掉sql線程)。以下是測試情況,

mysql> change replication filter replicate_ignore_db=(newtest);

error 3017 (hy000): this operation cannot be performed with a running slave sql thread; run stop slave sql_thread first

mysql> change replication filter replicate_do_db=(newtest);

mysql> stop slave sql_thread;

query ok, 0 rows affected (0.11 sec)

query ok, 0 rows affected (0.00 sec)

4)實作真正的并行複制。不同于5.6的基于schema的多線程複制,而是master上同時送出的binlog在slave端也可以同時被apply

5)線上change master。進行change master to操作不需要先stop slave,但從庫io線程與sql線程的狀态決定該語句能使用的參數

6)show slave status 與 stop slave 并行運作時不阻塞

7)半同步複制增強

8)支援線上開啟gtid;新增将gtids存儲進表中的選項

6、工具與用戶端

1)innochecksum。增加了新的選項,并擴充了功能

2)mysql用戶端。審計,可使用syslog記錄使用者互動指令日志,通過新增的選項--syslog開啟;現在crtl+c操作不會退出用戶端

3)測試元件。現在測試元件預設的存儲引擎是innodb了

4)mysqlbinlog。讀取row模式的二進制日志時,能夠通過--rewrite-db選項修改資料庫名;ssl選項支援,可通過遠端的安全用戶端連接配接讀取binlog

5)新的工具mysqlpump。mysqldump的擴充,支援并行導出和壓縮選項;預設啟用延遲索引建立,no drop等特性。但是此版本中預設設定不支援--single-transaction選項(需關閉并行)

    <b>mysqlpump</b>的并行導出功能的架構為:隊列+線程,允許有多個隊列,每個隊列下有多個線程,而一個隊列可以綁定1個或者多個資料庫。但是,對于每張表的導出隻能是單個線程的, 這和mydumper工具是不一樣的 ,因為mydumper支援一張表多個線程以chunk的方式批量導出,這在主鍵是随機的情況下,導出速度還能有提升。

1、不再支援4.1之前的舊密碼認證模式。mysql_old_password認證插件被移除,同時與之相關的選項與函數不再被支援,不支援--skip-secure-auth選項

2、不再支援year(2)資料類型。更新最新版本之前轉換為year(4)類型

3、移除部分參數。innodb_mirrored_log_groups,storage_engine(使用新的default_storage_engine替代),thread_concurrency,timed_mutexes,innodb_use_sys_malloc,innodb_additional_mem_pool_size等

4、alter tables 語句不再支援ignore子句

5、移除insert delay特性,但保留該文法。與之相關的選項或特性被移除,如mysqldump的--delayed-insert選項

6、移除mysql_upgrade的幾個選項--basedir, --datadir, --tmpdir

7、移除show engine innodb mutex,現在可以通過查詢performance_schema中的相關視圖擷取資訊

8、取消對選項字首的支援,現在需要完整的選項名

9、移除innodb monitor特性。添加兩個動态參數innodb_status_output、innodb_status_output_locks,相關資訊現在被包含在information_schema

10、移除一些工具。msql2mysql, mysql_convert_table_format, mysql_find_rows, mysql_fix_extensions, mysql_setpermission, mysql_waitpid, mysql_zap, mysqlaccess,  mysqlbug, mysqlhotcopy

    前後整理總結有些時差,也采集的不是很全,有新的發現或見解可以在本文評論。或者,找我面談,面談。。