中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

MySQL 5.7 新特性是什么

發布時間:2021-11-08 09:21:26 來源:億速云 閱讀:159 作者:小新 欄目:MySQL數據庫

小編給大家分享一下MySQL 5.7 新特性是什么,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!


    我們自豪的宣布 MySQL 5.7 穩定版開放下載了。 MySQL 5.7.9 是目前世界上最流行開源數據庫的一令人興奮的新版本, 比 MySQL 5.6 快 3 倍,同時還提高了可用性,可管理性和安全性。一些重要的增強功能如下: 

    1. 性能和可擴展性:改進 InnoDB 的可擴展性和臨時表的性能,從而實現更快的網絡和大數據加載等操作。

    2. JSON支持:使用 MySQL 的 JSON      功能,你可以結合 NoSQL 的靈活和關系數據庫的強大。

    3. 改進復制 以提高可用性的性能。包括多源復制,多從線程增強,在線      GTIDs,和增強的半同步復制。 

    4. 性能模式 提供更好的視角。我們增加了許多新的監控功能,以減少空間和過載,使用新的      SYS 模式顯著提高易用性。

    5. 安全: 我們貫徹“安全第一”的要求,許多 MySQL 5.7      新功能幫助用戶保證他們數據庫的安全。

    6. 優化: 我們重寫了大部分解析器,優化器和成本模型。這提高了可維護性,可擴展性和性能。

    7. GIS: MySQL 5.7 全新的功能,包括 InnoDB      空間索引,使用 Boost.Geometry,同時提高完整性和標準符合性。

           

     

    新增特性

    Security improvements.

    mysql.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.htmlhttp://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。

    Linux系統中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 選項被移除。

看完了這篇文章,相信你對“MySQL 5.7 新特性是什么”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

四子王旗| 泰州市| 墨竹工卡县| 吴桥县| 义马市| 余干县| 蕲春县| 保山市| 屏边| 榆树市| 游戏| 南雄市| 双辽市| 青海省| 富锦市| 忻城县| 武威市| 文成县| 大丰市| 新营市| 同心县| 兰坪| 太原市| 龙岩市| 义马市| 海南省| 玉树县| 赫章县| 普格县| 六盘水市| 津南区| 武山县| 资讯| 梁山县| 慈溪市| 新巴尔虎左旗| 宁远县| 苍南县| 拉孜县| 宁津县| 静宁县|