久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL 5.7新特性有哪些

147次閱讀
沒有評論

共計 5540 個字符,預計需要花費 14 分鐘才能閱讀完成。

本篇內容主要講解“MySQL 5.7 新特性有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“MySQL 5.7 新特性有哪些”吧!

1. 背景

MySQL 5.7 在 2015-10-21 發布了 GA 版本,即 5.7.9,目前小版本已經到了 5.7.12。5.7 新增了許多新的 feature 和優化,接下來一個系列,我們就一起來嘗嘗鮮。首先這次主要是預覽 feature 的變化以及兼容性問題。后面的系列,會針對重要的 feature 展開來學習。

2 安全相關的特性
2.1 認證插件

mysql.user 表中的 plugin 更改成 not null,5.7 開始不再支持 mysql_old_password 的認證插件,推薦全部使用 mysql_native_password。從低版本升級到 5.7 的時候,需要處理兩個兼容性問題。

[兼容性]
需要先遷移 mysql_old_password 的用戶,然后進行 user 表結構的升級:

1. 遷移 mysql_old_password 用戶
MySQL 5.7.2 之前的版本,是根據 password 的 hash value 來判斷使用的認證插件類型,5.7.2 以后的版本,plugin 字段為 not null,就直接根據 plugin 來判斷了。新的密碼從 password 字段中,保存到新的字段 authentication_string 中,password 字段廢棄處理。

如果 user 是隱式的 mysql_native_password。直接使用 sql 進行變更:

UPDATE mysql.user SET plugin =  mysql_native_password  WHERE plugin =   AND (Password =   OR LENGTH(Password) = 41); FLUSH PRIVILEGES;

如果 user 是隱式的或者顯示的 mysql_old_password,首先通過以下 sql 進行查詢:

SELECT User, Host, Password FROM mysql.user WHERE (plugin =   AND LENGTH(Password) = 16) OR plugin =  mysql_old_password

如果存在記錄,就表示還有使用 mysql_old_password 的 user,使用以下 sql 進行用戶的遷移:

ALTER USER  user1 @ localhost  IDENTIFIED WITH mysql_native_password BY  DBA-chosen-password

2. user 表結構升級
通過 mysql_upgrade 直接進行升級,步驟如下[5.6- 5.7]:

stop MySQL 5.6 實例

替換 5.7 的 mysqld 二進制版本

使用 5.7 啟動實例

run mysql_upgrade 升級系統表

重啟 MySQL 5.7 實例

2.2 密碼過期

用戶可以通過  ALTER USER jeffrey @ localhost PASSWORD EXPIRE; 這樣的語句來使用戶的密碼過期。
并新增加 default_password_lifetime 來表示用戶密碼自動過期時間,從 5.7.10 開始,其默認值從 0 變更到了 360,也就是默認一年過期。
可以通過以下兩種方法禁止過期:

1. SET GLOBAL default_password_lifetime = 0; 2. ALTER USER  jeffrey @ localhost  PASSWORD EXPIRE NEVER;

[兼容性]
只需要通過 mysql_upgrade 升級 mysql.user 系統表就可以使用密碼過期新功能。

2.3 賬號鎖定

用戶可以通過以下語法進行賬號鎖定,阻止這個用戶進行登錄:

ALTER USER  jeffrey @ localhost  ACCOUNT LOCK; ALTER USER  jeffrey @ localhost  ACCOUNT UNLOCK;

[兼容性]
只需要通過 mysql_upgrade 升級 mysql.user 系統表就可以使用密碼過期新功能。

2.4 SSL 連接

如果 mysqld 編譯使用的 openssl,在啟動的時候,默認創建 SSL,RSA certificate 和 key 文件。
但不管是 openssl 還是 yassl,如果沒有設置 ssl 相關的參數,mysqld 都會在 data directory 里查找 ssl 認證文件,來盡量打開 ssl 特性。

[兼容性]
不存在兼容性的問題

2.5 安裝數據庫

5.7 開始建議用戶使用  mysqld –initialize 來初始化數據庫,放棄之前的 mysql_install_db 的方式,新的方式只創建了一個 root@localhost 的用戶,隨機密碼保存在~/.mysql_secret 文件中,并且賬號是 expired,第一次使用必須 reset password,并且不再創建 test db。

[兼容性]
不存在兼容性的問題

3 sql mode 變更

5.7 sql_mode 的默認值變更為:

mode_no_engine_substitution |
 mode_only_full_group_by |
 mode_strict_trans_tables |
 mode_no_zero_in_date |
 mode_no_zero_date |
 mode_error_for_division_by_zero |
 mode_no_auto_create_user

而在 5.7 之前,sql_mode 的默認值都只有 mode_no_engine_substitution。
所以在 5.7 默認的情況下,比如 grant 不存在的用戶的時候,會報一下錯誤:

ERROR 1133 (42000): Can t find any matching row in the user table

必須先使用 create user,然后再使用 grant user。

[兼容性]
默認 sql mode 發生變更會導致 sql 的行為不一致。

4. online alter table

支持 online rename index 操作,in_place 并且不需要 table copy。
[兼容性]
不存在兼容性的問題

5. InnoDB 增強
5.1 varchar 長度變更支持 inplace

變更 varchar 類型字段的長度支持 inplace 方法,但有一個限制,即用于表示 varchar 字段長度的字節數不能發生變化,也就是支持比如 varchar 的長度在 255 以下變更或者 255 以上的范圍進行變更,因為從小于 255 變更到大于 255,其 size 的字節需要從 1 個增加到 2 個。

注意:減少 varchar 的長度,仍然需要 table copy。

5.2 優化 InnoDB 臨時表

因為 InnoDB 臨時表的數據不再不受 redo 保護,而 redo 只保護臨時表的元數據,所以大幅提升了臨時表的性能。
并且 InnoDB 臨時表的元數據保存在一個新的系統表中即 innodb_temp_table_info,
臨時表將建立一個統一的表空間,我們稱之為臨時表空間,其目錄地址可以通過參數 innodb_temp_data_file_path 來設置。系統在啟動的時候,都會新建這個表空間,重啟會刪除重建。

例如:

mysql  show global variables like  %temp_data_file_path%  +----------------------------+-----------------------+ | Variable_name | Value | +----------------------------+-----------------------+ | innodb_temp_data_file_path | ibtmp1:12M:autoextend | +----------------------------+-----------------------+

并且 5.7 存儲引擎默認都變更成 InnoDB 了:

mysql  show global variables like  %storage_engine%  +----------------------------------+--------+ | Variable_name | Value | +----------------------------------+--------+ | default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_disk_storage_engine | InnoDB | +----------------------------------+--------+

注意:  在開啟 gtid 的情況下,非 auto commit 或者顯示 begin 的 context 下,create 或者 drop 臨時表,仍然和 5.6 一樣:

ERROR 1787 (HY000): Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context.

另外,insert into t select * from t 也會遇到錯誤,不能在一個 sql 語句中 reference 兩次臨時表。

備注:  因為 InnoDB 臨時表進行了比較大的變動,我們會專門進行一次詳細的介紹。

5.3 InnoDB 原生支持 DATA_GEOMETRY 類型

并且支持在 spatial data types 上建立 index,加速查詢。

5.4 buffer pool dump

buffer pool dump 和 load 支持一個新的參數 innodb_buffer_pool_dump_pct,即 dump 的比例,并且使用 innodb_io_capacity 來控制 load 過程中的 IO 吞吐量。

5.5 多線程 flush dirty

從 5.7.4 開始,innodb_page_cleaners 參數可以設置,支持多線程 flush dirty page,加快臟塊的刷新。

5.6 NVM file system

MySQL 一直使用 double write buffer 來解決一個 page 寫入的 partial write 問題,但在 linux 系統上的 Fusion-io Non-Volatile Memory (NVM) file system 支持原子的寫入。
這樣就可以省略掉 double write buffer 的使用,5.7.4 以后,如果 Fusion-io devices 支持 atomic write,那么 MySQL 自動把 dirty block 直接寫入到數據文件了。這樣減少了一次內存 copy 和 IO 操作。

5.7 InnoDB 分區表

MySQL 5.7 之前的版本,InnoDB 并不支持分區表,分區表的支持是在 ha_partition 引擎上支持的,從 5.7 開始,InnoDB 支持原生的分區表,并且可以使用傳輸表空間。

[兼容性]
mysql_upgrade 會掃描 ha_partition 引擎支持的 InnoDB 表,并升級成 InnoDB 分區表,5.7.9 之后,可以通過命令 ALTER TABLE … UPGRADE PARTITIONING. 進行升級。如果之前的版本大量使用了分區表,要注意使用 mysql_upgrade 會消耗非常長的時間來升級分區表。

5.8 動態調整 buffer pool size

MySQL 5.7.5 之后,可以 online 動態調整 buffer pool size,通過設置動態的參數 innodb_buffer_pool_size 來調整,并且根據 Innodb_buffer_pool_resize_status 狀態來查看 resize 的進度,因為 resize 的過程是以 chunk 為大小,把 pages 從一個內存區域 copy 到另一片內存的。

5.9 加快 recovery

MySQL 5.7.5 之前,在 recovery 的過程中,需要掃描所有的 ibd 文件,獲取元信息,5.7.5 之后,新加了一種 redo log 類型,即 MLOG_FILE_NAME,記錄從上一次 checkpoint 以來,發生過變更的文件,這樣在 recovery 的過程中,只需要打開這些文件就可以了。
[兼容性]
因為增加了新的 log record type,需要安全的關閉 5.7 之前的實例,清理掉 redo。

5.10 表空間管理

支持創建表空間,例如

CREATE TABLESPACE `tablespace_name` ADD DATAFILE  file_name.ibd  [FILE_BLOCK_SIZE = n]

并可以在創建表的時候,指定屬于哪個表空間,

[兼容性]
因為可以任意指定空間目錄,要注意升級過程中,不要漏掉目錄。

5.11 InnoDB Tablespace Encryption

支持 InnoDB 數據文件加密,其依賴 keyring plugin 來進行秘鑰的管理,后面我們單獨來介紹 InnoDB 加密的方法,并且 RDS 也實現了一種 InnoDB 數據文件透明加密方法,并通過 KMS 系統來管理秘鑰。例如:

create table t(id int) encryption= y

到此,相信大家對“MySQL 5.7 新特性有哪些”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計5540字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 昭通市| 巴林左旗| 青海省| 兖州市| 东丽区| 灵宝市| 娄底市| 迁西县| 中阳县| 穆棱市| 富阳市| 乌兰察布市| 上林县| 舞钢市| 江门市| 缙云县| 岳普湖县| 黔西县| 安徽省| 弥渡县| 察隅县| 昔阳县| 仁化县| 红桥区| 广西| 吉水县| 怀集县| 宝鸡市| 清原| 库伦旗| 新闻| 襄汾县| 正镶白旗| 宁津县| 连平县| 高要市| 滦南县| 叙永县| 黎川县| 富平县| 浦东新区|