MySQL 5.7新特性
新增特性
Security improvements.
.user表新增plugin列,且若某賬戶該欄位值為空則賬戶不能使用。從低版本MySQL升級至MySQL5.7時要注意該問題,且建議DBA將使用mysql_old_password外掛的賬戶替換為使用 mysql_native_password外掛。
管理員可以制定賬戶密碼自動過期策略,密碼過期後必須強制進行更改。(http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html)
資料庫管理員可以鎖定/解鎖賬戶來進行更好的登入控制,對應的,mysql.user表中新增account_locked列來表示鎖定狀態。版本升級過程中要注意該問題。(http://dev.mysql.com/doc/refman/5.7/en/account-locking.html)
MySQL Server可以自動建立SSL、RSA證照和Key檔案來支援安全連線,前提是Server用OpenSSL編譯(http://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html)
MySQL預設的部署策略發生了變化,變得更加安全。mysql_install_db 棄用了,改用emysqld加-initialize或–initialize-insecure選項來初始化資料目錄。使用-initialize時,預設只建立’root’@’localhost’賬戶併產生隨機密碼、設定密碼過期,儲存於error log,初次登入需使用密碼並改變密碼。不再建立匿名賬戶和test資料庫。(http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html、http://dev.mysql.com/doc/refman/5.7/en/mysql-install-db.html)
SQL mode changes.
預設開啟STRICT_TRANS_TABLES SQL mode。
ONLY_FULL_GROUP_BY SQL mode的實現更加精細,且預設開啟。 ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE和NO_ZERO_IN_DATE預設開啟(將來可能包含進strict SQL mode,而移除這些單獨的模式),也即目前預設的SQL mode為: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER和 NO_ENGINE_SUBSTITUTION. (http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-changes)
Online ALTER TABLE.
支援RENAME INDEX從句且為in place操作無需table-copy,適用於各引擎。(http://dev.mysql.com/doc/refman/5.7/en/alter-table.html)
ngram and MeCab full-text parser plugins.
內建支援中日韓全文解析的ngram parser plugin和可安裝的支援日文全文解析的MeCab plugin。
InnoDB enhancements.
VARCHAR 大小可透過 ALTER TABLE語句進行原地(in place)修改,而無需table-copy。如:ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);但存在限制,即只支援0~255位元組內的或者255以上位元組間的增加,也就是說若從254增到256時不能使用INPLACE,必須使用COPY演算法,否側報錯.這是因為0~255內的VARCHAR值需要一個額外的位元組來編碼,而256以上的VARCHAR值需要兩個位元組來編碼。另外使用INPLACE演算法縮小VARCHAR的ALTER TABLE也是不支援的,必須用COPY演算法。
InnoDB臨時表的DDL效能提升。
InnoDB臨時表後設資料不再儲存於InnoDB系統表而是儲存在INNODB_TEMP_TABLE_INFO,包含所有使用者和系統建立的臨時表資訊。該表在第一次在其上執行select時被建立。
InnoDB現在支援MySQL-supported空間資料型別。也即,之前的空間資料是以binary BLOB資料儲存的,現在空間資料型別被對映到了一個InnoDB內部資料型別DATA_GEOMETRY.
對於non-compressed InnoDB臨時表有獨立的表空間,表空間在每次伺服器重啟時於預設的DATADIR中被重建,可透過innodb_temp_data_file_path選項指定其他路徑。
innochecksum (離線的InnoDB檔案校驗工具),新增新的選擇項或擴充套件的功能,如,可指定特定的校驗演算法、可以只重寫校驗值而不進行驗證、可指定允許的校驗和不匹配量、顯示各類頁的個數、匯出頁型別資訊、輸出至日誌、從標準輸入讀取資料等。目前可支援超過2G的檔案。(http://dev.mysql.com/doc/refman/5.7/en/innochecksum.html)
針對臨時表及相關物件引入新的“non-redo” undo log,存放於臨時表空間。該型別的undo log非 redolog 因為臨時表不需崩潰恢復、也就無需redo logs,但卻需要 undo log用於回滾、MVCC等。預設的臨時表空間檔案為ibtmp1,位於資料目錄在每次伺服器啟動時被重新建立,可透過innodb_temp_data_file_path指定臨時表空間。(http://dev.mysql.com/doc/refman/5.7/en/innodb-temporary-table-undo-logs.html)
可透過innodb_buffer_pool_dump_pct調整buffer pool中最近使用的頁讀取並dump的百分比。當有其他InnoDB後臺任務所引起的I/O活動時,可透過 innodb_io_capacity 限制各I/O活動包括 buffer pool load 操作的頻次。
InnoDB支援full-text parser 外掛(http://dev.mysql.com/doc/refman/5.7/en/full-text-plugins.html)
支援多page cleaner執行緒從buffer pool中刷髒頁,透過 innodb_page_cleaners配置執行緒數,預設值為1.
支援使用INPLACE演算法的online DDL語句重建普通表和分割槽表:OPTIMIZE TABLE、ALTER TABLE … FORCE、ALTER TABLE … ENGINE=INNODB。
系統中Fusion-io Non-Volatile Memory (NVM)檔案系統提供了原子寫能力,使InnoDB雙寫變得冗餘。因此,MySQL5.7.4以後,對於支援原子寫的Fusion-io裝置上的系統表空間InnoDB doublewrite buffer會自動關閉。
對於分割槽表和獨立的InnoDB表分割槽從MySQL5.7.4開始支援“可傳輸”表空間,使得分割槽表的備份步驟更加容易也使得在不同MySQl例項間複製分割槽表和獨立的表分許成為可能。(http://dev.mysql.com/doc/refman/5.7/en/tablespace-copying.html)
可透過 innodb_buffer_pool_size 引數動態調整buffer pool大小,resize以chunk為單位,chunk大小透過 innodb_buffer_pool_chunk_size配置,另可透過Innodb_buffer_pool_resize_status 狀態變數觀察調整過程。(http://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-online-resize.html)
MySQL5.7.5開始Multi-threaded page clean也在shutdown和recover階段被支援。
MySQL5.7.5後支援空間資料型別上建索引。且可透過 ALTER TABLE … ADD SPATIAL INDEX ALGORITHM=INPLACE進行線上操作。
建立和重建索引時支援bulk load,該方法被稱為“sorted index build”,提升了索引建立效率,支援全文索引但不支援空間索引。可透過innodb_fill_factor定義每個頁的填充因子,剩餘的空間用於將來的索引增長。(http://dev.mysql.com/doc/refman/5.7/en/sorted-index-builds.html)
使用新的日誌記錄型別(MLOG_FILE_NAME)來識別上一個檢查點以來發生變化的表空間。這簡化了崩潰恢復時的表空間發現,消除了redo log應用之前的檔案系統掃描。 (http://dev.mysql.com/doc/refman/5.7/en/innodb-recovery-tablespace-discovery.html).需要注意的是這一行為導致了redo log格式的變化,所以升級至MySQL5.7.5或者從改版本降級時需完全關閉MySQL。
可透過配置 innodb_undo_log_truncate來truncate undo表空間中的undo logs。系統表空間內的undo logs不會被truncate。(預設情況下undo log儲存於系統表空間,可透過innodb_undo_directory、 innodb_undo_logs、 innodb_undo_tablespaces進行調整。http://dev.mysql.com/doc/refman/5.7/en/truncate-undo-tablespace.html )
支援本地化分割槽(native partitioning),之前需依賴ha_partition handler為每個分割槽建立handler物件,現在只需一個partition-aware handler物件,節約了記憶體。(可透過mysql_upgrade或者ALTER TABLE … UPGRADE PARTITIONING將老方法建的分割槽表升級為新的)。
支援使用CREATE TABLESPACE語句建立通用表空間。並可以透過 CREATE TABLE tbl_name … TABLESPACE [=] tablespace_name 或者 ALTER TABLE tbl_name TABLESPACE [=] tablespace_name將表新增到建立的通用表空間。(http://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html)
可透過 innodb_default_row_format指定InnoDB表的預設行格式,新版本的預設值有COMPACT替換為了DYNAMIC 。
JSON support.
MySQL5.7.8開始原生支援JSON資料型別,不再以字串形式儲存而是以二進位制格式儲存,允許快速讀取文件元素。JSON列在插入或更新時會自動進行驗證,文件格式不正確會報錯。除了可用常用比較運算子進行比較外還引入一系列函式用於處理JSON型別。(http://dev.mysql.com/doc/refman/5.7/en/json.html)
System and status variables. (http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html)
優先從performance_schema下的表中獲取系統變數和狀態變數資訊(老版本從information_schema下的表中獲取,這些表將來會被移除),這對show variables 和show status語句也有影響,也即資訊源來自於performance_schema。若想使用原來的表獲取資訊可開啟show_compatibility_56 引數(不推薦,只作為升級過程中的輔助工具,將來會被移除)。(http://dev.mysql.com/doc/refman/5.7/en/performance-schema-variable-table-migration.html)
sys schema.
包含sys庫,儲存從performance_schema收集用來輔助DBA和開發者的資訊的相關物件,如,表和觸發器、檢視、儲存過程
、儲存函式等,可用以調優和問題診斷。(http://dev.mysql.com/doc/refman/5.7/en/sys-schema.html)
Condition handling.
Optimizer.
explain可以用來獲取其他SESSION/CONNECTION中正在執行的語句的執行計劃(前提條件是正在執行語句且語句型別支援EXPLAIN),語法為:EXPLAIN [options] FOR CONNECTION connection_id;其中connection_id即連線id,可由information_schema.processlist或者CONNECTION_ID()獲取。
支援在語句中(以往是在optimizer_switch系統變數裡)提供最佳化器提示資訊以便於對語句的執行計劃進行更還的控制。同樣,在使用explain/desc檢視執行計劃時也可以在語句中使用最佳化提示,以便於檢視最佳化提示是如何影響執行計劃的。(http://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html)
Triggers.
之前的版本每個表上對於某一觸發事件(insert\update\delete)和觸發時機(before\after)的組合只能有一個觸發器,新版本取消了這一限制。比如:值之前的版本,建立瞭如下觸發器後CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;不能在建立另外的基於 BEFORE INSERT ON account的觸發器了,新版本可以,只要觸發器不同名即可。
Logging.
之前版本,Unix或類Unix系統上的MySQL支援將錯誤日誌傳送到syslog,具體是透過mysqld_safe捕獲錯誤輸出然後傳遞到syslog來實現的。新的版本原生支援將錯誤日誌輸出到syslog,且適用於windows系統,只需要透過簡單的引數(log_syslog等)配置即可。(http://dev.mysql.com/doc/refman/5.7/en/error-log.html)
mysql支援–syslog選項,可將互動式的語句輸出到系統的syslog中(Unix或類Unix系統下一般是/var/log/message)。對於匹配“ignore”過濾規則(可透過 –histignore選項或者 MYSQL_HISTIGNORE環境變數進行設定)的語句不會被記入。關於mysql客戶端的日誌使用參見:http://dev.mysql.com/doc/refman/5.7/en/mysql-logging.html
Generated Columns.
CREATE TABLE 和 ALTER TABLE語句支援Generated Columns.也即,列的值由其他列計算而得,這個計算列值的表示式在列定義中給出,當有行插入或者更新時列值被計算並儲存。(http://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-generated-columns)
mysql client.
之前mysql客戶端執行時若有語句正在執行Control+C會終止語句,若沒有語句正在執行則會退出mysql客戶端。新版本中不會退出mysql客戶端。
Database name rewriting with mysqlbinlog.
mysqlbinlog工具新增新的選項–rewrite-db,支援從行復制格式的二進位制日誌中讀取事件時將資料庫名重寫 –rewrite-db=’dboldname->dbnewname’.可以透過指定多次該引數來指定多個重寫規則。
HANDLER with partitioned tables.
可以在分割槽表上使用HANDLER(http://dev.mysql.com/doc/refman/5.6/en/handler.html)
Index condition pushdown support for partitioned tables.
使用InnoDB或者MyISAM的分割槽表上的查詢支援使用ICP(http://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html)
WITHOUT VALIDATION support for ALTER TABLE … EXCHANGE PARTITION.
ALTER TABLE … EXCHANGE PARTITION語句包含{WITH|WITHOUT} VALIDATION 從句,預設為WITH VALIDATION ,會逐行驗證交換過來的值是否滿足分割槽邊界定義。若指定了WITHOUT VALIDATION則不進行驗證。(http://dev.mysql.com/doc/refman/5.7/en/partitioning-management-exchange.html)
Master dump thread improvements.
master dump thread進行了重構來減少鎖爭用提升master吞吐量。之前的版本中只要讀取一個時間dump thread就要獲取鎖;MySQL5.7.2和後續版本中,只有從最近一次成功寫入的事件末位位置讀取時才會獲取鎖。這意味值多個dump threads可併發讀取二進位制日誌,且可以在客戶端向二進位制日誌寫入時讀取。
Globalization improvements.
開始包含gb18030字符集,支援 China National Standard GB18030 字符集。
Changing the replication master without STOP SLAVE.
新版本MySQL主從複製時在執行CHANGE MASTER TO語句前可不必執行 STOP SLAVE。此時,CHANGE MASTER語句的行為依賴於slave的SQL執行緒和IO執行緒;兩個執行緒的啟/停決定了某一時刻CHANGE MASTER TO語句中可以/不可以使用的選項。具體規則如下:
-
若SQL執行緒停止,則可在CHANGE MASTER TO語句中使用 RELAY_LOG_FILE,
RELAY_LOG_POS和MASTER_DELAY
選項的組合,即時是IO執行緒正在執行中也無妨。若此時IO執行緒還在執行則不能執行除上述選項之外的選項。 -
若IO執行緒停止,則可以在CHANGE MASTER TO語句中使用除了RELAY_LOG_FILE,
RELAY_LOG_POS和MASTER_DELAY 選項之外的任何選項的組合,即時是SQL執行緒正在執行也無妨。 -
在執行CHANGE MASTER TO…MASTER_AUTO_POSITION=1之前SQL執行緒和IO執行緒必須停止。
可透過 SHOW SLAVE STATUS命令檢查SQL執行緒和IO執行緒執行狀態。
之前的版本中若使用基於語句的複製且有臨時表那麼在執行STOP SLVAVE後執行CHANGE MASTER TO可能在遠slave上留下臨時表。新版本中會給出警告,如果在執行CHANGE MASTER TO使Slave_open_temp_tables 仍為0.
Test suite.
套件現在使用InnoDB作為預設儲存引擎
Multi-source replication is now possible.
開始支援多源複製也即從多個master向某一個salve複製。用於將多個server備份到單個server、合併表shard、從多個server合併資料到單個server等(目前不提供衝突檢測和解決方案,交由應用層處理。http://dev.mysql.com/doc/refman/5.7/en/replication-multi-source.html)。
隨多源複製而引入的另外一項技術為複製通道(replication channels),Replication channels 使slave可以開啟多個連線,每個通道連線至不同的master進行復制。(http://dev.mysql.com/doc/refman/5.7/en/replication-channels.html)
Group Replication Performance Schema tables.
performance_schema中新增一批表提供複製組相關資訊(http://dev.mysql.com/doc/refman/5.7/en/performance-schema-replication-tables.html)
Group Replication SQL.
引入如下兩條組複製控制語句:(http://dev.mysql.com/doc/refman/5.7/en/replication-group-sql.html)
START GROUP_REPLICATION
STOP GROUP_REPLICATION
廢棄特性
如下特性在MySQL5.7中不推薦使用,可能在將來的版本中被移除:
ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE和NO_ZERO_IN_DATE幾個sql mode不贊成使用了(但目前預設開啟),長遠的計劃是將這個mode包含進 strict mode而明確移除這幾個單獨的mode。
關於賬戶管理語句有一下不贊成再使用的特性:
不推薦使用GRANT語句建立使用者,而推薦使用CREATE USER語句建立。這樣一來NO_AUTO_CREATE_USER這一sql mode對於GRANT語句也就沒什麼意義了,所以也將降級。
不推薦使用GRANT語句修改賬戶屬性,而僅用於賬戶賦權。賬戶屬性透過CREATE USER或者ALTER USER在建立或修改時賦予或者改動;
不推薦使用IDENTIFIED BY PASSWORD ‘hash_string’ 語法,推薦使用IDENTIFIED WITH auth_plugin AS ‘hash_string’ ;
不推薦使用SET PASSWORD語句和PASSWORD()函式,而推薦使用ALTER USER來修改賬戶密碼;
不推薦使用old_password系統變數。
不推薦使用GROUP BY隱式排序,推薦明確使用ORDER BY從句。(GROUP BY排序只是MySQL的擴充套件語法,可能在將來版本移除)
不推薦使在EXPLAIN語句中使用EXTENDED和PARTITIONS關鍵字(仍可被識別但在新版本中已不必要。)
–skip-innodb以及–innodb=OFF, –disable-innodb等不贊成使用,因為新版本中InnoDB不能能被禁止了。
不推薦使用log_warnings系統變數和–log_warnings選項,推薦使用 log_error_verbosity 。
binlog_max_flush_queue_time 在新版本中已失效。
innodb_support_xa 在新版本中無效,因為XA事務的兩階段提交在MySQL5.7中預設支援。
metadata_locks_cache_size和metadata_locks_hash_instances、sync_frm、 character_set_database、collation_database系統變數不再起作用。
ENCRYPT(), ENCODE(), DECODE(), DES_ENCRYPT()和DES_DECRYPT() 不推薦使用,建議使用 AES_ENCRYPT() 和 AES_DECRYPT()。
請使用MBREquals()替代MBREqual()。
請使用Performance Schema替代INFORMATION_SCHEMA.PROFILING。
請使用原生的syslog替代mysqld_safe支援的syslog輸出。
mysqlcheck工具的–fix-db-names和–fix-table-names選項不推薦使用,以及ALTER DATABASE語句的UPGRADE DATA DIRECTORY NAME從句不推薦使用。
移除特性
對pre-4.1版本的密碼hash格式的支援被移除,相關聯的,old_passwords系統變數、 OLD_PASSWORD()函式被移除,mysql_old_password認證外掛被移除,–secure-auth選項無效且將在後續版本移除、 secure_auth 變數值允許為1,–skip-secure-auth被移除。
YEAR(2)不再被支援,請使用YEAR(4).
innodb_mirrored_log_groups被移除。
使用default_storage_engine代替storage_engine。
thread_concurrency、timed_mutexes 系統變數。
ALTER TABLE的IGNORE從句。
INSERT DELAYED 、 REPLACE DELAYED 中的DELAYED會被忽略,相關聯的mysqldump中的–delayed-insert 選項被移除,performance_schema.table_lock_waits_summary_by_table中相關列被移除,mysqlbinlog不再為INSERT DELAYED註解。
Windows系統中使用.sys檔案的Database symlinking被移除而使用支援native symlink 的mylink。(http://dev.mysql.com/doc/refman/5.7/en/windows-symbolic-links.html)
mysql_upgrade中的–basedir, –datadir 和–tmpdir 選項。
選項字首不再被支援,只支援使用選項全名,比如要用–key-buffer-size而不能用–key-buffer,還有–skip-grant-tables與–skip-grant等。
SHOW ENGINE INNODB MUTEX輸出被移除,可透過Performance Schema表上建立檢視獲取相關資訊。
InnoDB表空間監控和InnoDB表監控被移除。表監控資訊可透過INFORMATION_SCHEMA表獲取。
用於啟用和禁用InnoDB Monitor以及InnoDB Lock Monitor的特殊命名的表被移除,由 innodb_status_output和innodb_status_output_locks兩個動態的系統變數取代.(http://dev.mysql.com/doc/refman/5.7/en/innodb-monitors.html)
innodb_use_sys_malloc 和 innodb_additional_mem_pool_size 系統變數移除。
msql2mysql, mysql_convert_table_format, mysql_find_rows, mysql_fix_extensions, mysql_setpermission, mysql_waitpid, mysql_zap, mysqlaccess和mysqlbug 移除。
mysqlhotcopy被移除,可以使用mysqldump和 MySQL Enterprise Backup或者一些開源工具。
binary-configure.sh指令碼被移除。
INNODB_PAGE_ATOMIC_REF_COUNT CMake選項被移除
innodb_create_intrinsic選項、 innodb_optimize_point_storage 、innodb_log_checksum_algorithm 選項被移除。
轉:http://blog.itpub.net/blog/post/id/2136019/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2136019/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL · 特性分析 · MySQL 5.7新特性系列一MySql
- 【MySQL】5.7新特性之一MySql
- 【MySQL】5.7新特性之二MySql
- 【MySQL】5.7新特性之三MySql
- 【MySQL】5.7新特性之四MySql
- 【MySQL】5.7新特性之五MySql
- 【MySQL】5.7新特性之六MySql
- 【MySQL】5.7新特性之七MySql
- MySQL 5.7 新特性詳解MySql
- MySQL 5.7 新特性大全和未來展望MySql
- 【Mysql】Mysql5.7新特性之-json儲存MySqlJSON
- 【Mysql】mysql5.7新特性之-sys schema的作用MySql
- 【Mysql】MySQL 5.7新特性之Generated Column(函式索引)MySql函式索引
- **Mysql5.7新特性之—– 淺談Sys庫**MySql
- #MySQL# mysql5.7新特性之半同步複製MySql
- MySQL 5.7新特性之線上收縮undo表空間MySql
- MySQL5.7新特性之備份工具mysqlpump的使用MySql
- 關於Mysql5.7高版本group by新特性報錯MySql
- MySQL 5.6, 5.7, 8.0版本的新特性彙總大全MySql
- MySQL 5.7新特性之動態修改innodb_buffer_pool大小MySql
- mysql 5.7 新特性中線上in-place 修改欄位的大小MySql
- MySQL 5.7的主要特性簡介MySql
- 【Mysql】mysql5.7新特性之-並行複製實現原理與調優MySql並行
- MySQL5.7 group by新特性報錯1055的解決辦法MySql
- MySQL5.7新版本的運維,效能和新特性介紹MySql運維
- 【Mysql】mysql公開課之-mysql5.7複製特性MySql
- MySQL 5.7 新特性 共享臨時表空間及臨時表改進MySql
- MySQL 5.7 MyISAM併發插入特性介紹MySql
- MySQL 5.7 online DDL特性介紹MySql
- mysql 5.7中嶄新的 mysql sys schemaMySql
- MySQL 8.0 新特性MySql
- MySQL 5.7 學習心得之安全相關特性MySql
- MySQL 5.7主從新增新從庫MySql
- MySQL5.7在InnoDB層做的一些效能優化和新的特性MySql優化
- mysql5.1的新特性MySql
- MySQL 8.0新特性概覽MySql
- MySQL 5.5新特性詳解MySql
- MySQL 5.7新支援--通用表空間實戰MySql