5.7新特性(總結(jié))

一.安全方面增強(qiáng)

1.mysql.user表變化

  1. mysql.user表中的plugin更改成not null
  2. 少了一個字段Password
  3. 多了三個字段password_last_changed,password_lifetime,account_locked
  4. 5.7開始不再支持mysql_old_password的認(rèn)證插件,推薦全部使用mysql_native_password。
  5. 可以設(shè)置賬號的過期時間
  6. 可以對賬號執(zhí)行加鎖或者解鎖功能。

2.數(shù)據(jù)庫初始化方式變更

  • mysql5.7之前使用的是/scripts/mysql_install_db,默認(rèn)root賬號沒有密碼
  • mysql5.7之后使用的是bin/mysqld
    • 默認(rèn)會生成一個root的隨機(jī)密碼
    • 不再創(chuàng)建匿名用戶
    • 不再創(chuàng)建test database

二.sql模式改變

默認(rèn)啟用嚴(yán)格的sql模式

  • mysql5.6
mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode                                 |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)
  • mysql5.7
mysql> select @@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 |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

三.DDL語法改進(jìn)

ALTER TABLE現(xiàn)在支持重命名索引的RENAME INDEX子句

  • mysql5.6(不支持這種語法,執(zhí)行報錯)
mysql> alter table test4 rename index idx_data to idx_data1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index idx_data to idx_data1' at line 1
  • mysql5.7
mysql> alter table test4 rename index idx_data to idx_data1;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

四.Innodb引擎增強(qiáng)

1.online ddl改進(jìn)

VARCHAR列大小可以使用一個in-place ALTER表來增加,如下例所示:

ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255), ALGORITHM=INPLACE, LOCK=NONE;


以下兩種情況的修改字段長度的ddl,可以使用in-place方式

  • VARCHAR列大小從0增加到255字節(jié)(utf8一個字符為3個字節(jié),也就是從varchar(0)到85)
mysql>   alter table sbtest4  ALGORITHM=INPLACE,modify test1 varchar(85) not null default '';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>   alter table sbtest4  ALGORITHM=INPLACE,modify test1 varchar(86) not null default ''; 
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
  • 從256字節(jié)增加到更大的大小(utf8一個字符為3個字節(jié),也就是從varchar(86)到更多)
mysql> alter table sbtest4 add test2 varchar(86) not null default '';
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>   alter table sbtest4  ALGORITHM=INPLACE,modify test2 varchar(200) not null default '';   
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

其他情況還是要使用copy方式,拷貝整個表(速度慢,堵塞dml)

mysql> show create table sbtest2;
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                                                                         |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest2 | CREATE TABLE `sbtest2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  `test1` varchar(85) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `idx_k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8 MAX_ROWS=1000000

mysql> alter table sbtest2 modify test1 varchar(86) not null default '';                   
    Query OK, 9998981 rows affected (4 min 3.38 sec)
Records: 9998981  Duplicates: 0  Warnings: 0

2.InnoDB緩沖池轉(zhuǎn)儲和加載操作得到了增強(qiáng)

  • mysql5.6
mysql> show variables like '%dump%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| innodb_buffer_pool_dump_at_shutdown | OFF   |
| innodb_buffer_pool_dump_now         | OFF   |
+-------------------------------------+-------+
2 rows in set (0.00 sec)
  • mysql5.7
mysql> show variables like '%dump%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| innodb_buffer_pool_dump_at_shutdown | ON    |
| innodb_buffer_pool_dump_now         | OFF   |
| innodb_buffer_pool_dump_pct         | 25    |
+-------------------------------------+-------+
3 rows in set (0.00 sec)

一個新的系統(tǒng)變量innodb_buffer_pool_dump_pct允許您指定每個緩沖池中要讀取和轉(zhuǎn)儲的最近使用頁面的百分比。默認(rèn)25%

3.支持緩沖池大小在線變更

innodb_buffer_pool_size參數(shù)是動態(tài)的,允許您在不重啟服務(wù)器的情況下調(diào)整緩沖池的大小。調(diào)整大小的操作(包括將頁面移動到內(nèi)存中的新位置)是以塊的形式執(zhí)行的。塊大小可以使用新的innodb_buffer_pool_chunk_size配置選項進(jìn)行配置。可以使用新的Innodb_buffer_pool_resize_status變量監(jiān)視調(diào)整大小的過程。

4.支持回收(收縮)undo log回滾日志物理文件空間

可以truncate駐留在undo表空間中的undo日志。這個特性是使用innodb_undo_log_truncate配置選項啟用的。

5.支持為innodb表建立通用表空間

InnoDB支持使用CREATE TABLESPACE語法創(chuàng)建通用表空間。

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

一般表空間可以在MySQL數(shù)據(jù)目錄之外創(chuàng)建,能夠保存多個表,并支持所有行格式的表。

五.引入JSON列類型及相關(guān)函數(shù)

從MySQL 5.7.8開始,MySQL開始支持一種原生JSON類型。JSON值不存儲為字符串,而是使用允許快速讀取文檔元素的內(nèi)部二進(jìn)制格式。每當(dāng)插入或更新JSON列中存儲的JSON文檔時,都會自動驗證它們,而無效的文檔會產(chǎn)生錯誤。JSON文檔在創(chuàng)建時是標(biāo)準(zhǔn)化的,可以使用大多數(shù)比較操作符進(jìn)行比較,比如=、<、<=、>、>=、<>、!=和<=>

六.新增sys這個database

MySQL發(fā)行版現(xiàn)在包括sys模式,它是一組對象,幫助dba和開發(fā)人員解釋性能模式收集的數(shù)據(jù)。sys schema對象可用于典型的調(diào)優(yōu)和診斷用例。

七.支持為表增加計算列

MySQL現(xiàn)在支持在CREATE TABLE和ALTER TABLE語句
中生成列的規(guī)范。生成列的值從列創(chuàng)建時指定的表達(dá)式計算。生成的列可以是虛擬的(在讀取行時“動態(tài)計算”),也可以是存儲的(在插入或更新行時計算)。

八.支持多源復(fù)制

現(xiàn)在可以進(jìn)行多源復(fù)制。MySQL多源復(fù)制增加了從多個主服務(wù)器復(fù)制到從服務(wù)器的能力。MySQL多源復(fù)制拓?fù)淇捎糜趯⒍鄠€服務(wù)器備份到單個服務(wù)器,合并表碎片,并將多個服務(wù)器的數(shù)據(jù)合并到單個服務(wù)器
作為MySQL多源復(fù)制的一部分,添加了復(fù)制通道。復(fù)制通道允許從服務(wù)器打開多個連接進(jìn)行復(fù)制,每個通道都是到主服務(wù)器的連接。

九.支持mgr

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引進(jìn)的一個數(shù)據(jù)庫高可用與高擴(kuò)展的解決方案,以插件形式提供,實現(xiàn)了分布式下數(shù)據(jù)的最終一致性,總結(jié)MGR特點如下
高一致性:基于分布式paxos協(xié)議實現(xiàn)組復(fù)制,保證數(shù)據(jù)一致性
高容錯性:自動檢測機(jī)制,只要不是大多數(shù)節(jié)點都宕機(jī)就可以繼續(xù)工作,內(nèi)置防腦裂保護(hù)機(jī)制
高擴(kuò)展性:節(jié)點的增加與移除會自動更新組成員信息,新節(jié)點加入后,自動從其他節(jié)點同步增量數(shù)據(jù),直到與其他節(jié)點數(shù)據(jù)一致
高靈活性:提供單主模式和多主模式,單主模式在主庫宕機(jī)后能夠自動選主,所有寫入都在主節(jié)點進(jìn)行,多主模式支持多節(jié)點寫入。

十.支持基于組提交的并行復(fù)制

MySQL 5.7才可稱為真正的并行復(fù)制,這其中最為主要的原因就是slave服務(wù)器的回放與主機(jī)是一致的即master服務(wù)器上是怎么并行執(zhí)行的slave上就怎樣進(jìn)行并行回放。不再有庫的并行復(fù)制限制,對于二進(jìn)制日志格式也無特殊的要求(基于庫的并行復(fù)制也沒有要求)。
MySQL 5.7并行復(fù)制的思想簡單易懂,一言以蔽之: 一個組提交的事務(wù)都是可以并行回放 ,因為這些事務(wù)都已進(jìn)入到事務(wù)的prepare階段,則說明事務(wù)之間沒有任何沖突(否則就不可能提交)。

為了兼容MySQL 5.6基于庫的并行復(fù)制,5.7引入了新的變量slave-parallel-type,其可以配置的值有:

  • DATABASE:默認(rèn)值,基于庫的并行復(fù)制方式
  • LOGICAL_CLOCK:基于組提交的并行復(fù)制方式

十一.支持無損半同步復(fù)制

  • mysql5.6
    after_commit,可能會丟數(shù)據(jù)
  • myql5.7
    支持無損半同步復(fù)制,after_sync,不會丟數(shù)據(jù)

MySQL5.7在Master事務(wù)提交的時間方面做了改進(jìn)(rpl_semi_sync_master_wait_point
:AFTER_COMMIT\AFTER_SYNC【默認(rèn)】),事務(wù)是在提交之前發(fā)送給Slave(默認(rèn),after_sync),當(dāng)Slave沒有接收成功,并且Master宕機(jī)了,不會導(dǎo)致主從不一致,因為此時主還沒有提交,所以主從都沒有數(shù)據(jù)。

十二.gtid復(fù)制改進(jìn)

  • mysql5.6
開啟gtid復(fù)制方式后,必須開啟log_slave_updates參數(shù),否則啟動會報錯,因為需要在binlog里面找到同步復(fù)制的信息
  • mysql5.7
不需要開啟log_slave_updates參數(shù),因為用一張gtid_executed表來記錄同步復(fù)制的信息
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容