MySQL 8.0新特性

  • 默認字符集由latin1變?yōu)閡tf8mb4:
    在8.0版本之前,默認字符集為latin1绩衷,utf8指向的是utf8mb3蹦魔,8.0版本默認字符集為utf8mb4,utf8默認指向的也是utf8mb4咳燕。在Percona Server 8.0.15版本上測試勿决,utf8仍然指向的是utf8mb3,與官方文檔有出入招盲。
  • MyISAM系統(tǒng)表全部換成InnoDB表:
    系統(tǒng)表全部換成事務(wù)型的innodb表低缩,默認的MySQL實例將不包含任何MyISAM表,除非手動創(chuàng)建MyISAM表曹货。
  • 自增變量持久化:
    在8.0之前的版本咆繁,自增主鍵AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重啟后控乾,會重置AUTO_INCREMENT=max(primary key)+1么介,這種現(xiàn)象在某些情況下會導(dǎo)致業(yè)務(wù)主鍵沖突或者其他難以發(fā)現(xiàn)的問題。自增主鍵重啟重置的問題很早就被發(fā)現(xiàn)(https://bugs.mysql.com/bug.php?id=199)蜕衡,一直到8.0才被解決壤短,8.0版本將會對AUTO_INCREMENT值進行持久化设拟,MySQL重啟后,該值將不會改變久脯。
  • DDL原子化:
    InnoDB表的DDL支持事務(wù)完整性纳胧,要么成功要么回滾,將DDL操作回滾日志寫入到data dictionary 數(shù)據(jù)字典表 mysql.innodb_ddl_log 中用于回滾操作帘撰,該表是隱藏的表跑慕,通過show tables無法看到。通過設(shè)置參數(shù)摧找,可將ddl操作日志打印輸出到mysql錯誤日志中核行。
mysql> set global log_error_verbosity=3;
mysql> set global innodb_print_ddl_logs=1;
mysql> create table t1(c int) engine=innodb;

來看另外一個例子,庫里只有一個t1表蹬耘,drop table t1,t2;
試圖刪除t1,t2兩張表,在5.7中芝雪,執(zhí)行報錯,但是t1表被刪除综苔,在8.0中執(zhí)行報錯惩系,但是t1表沒有被刪除,證明了8.0 DDL操作的原子性如筛,要么全部成功堡牡,要么回滾。

  • 參數(shù)修改持久化:
    MySQL 8.0版本支持在線修改全局參數(shù)并持久化杨刨,通過加上PERSIST關(guān)鍵字晤柄,可以將修改的參數(shù)持久化到新的配置文件(mysqld-auto.cnf)中,重啟MySQL時拭嫁,可以從該配置文件獲取到最新的配置參數(shù)可免。
例如執(zhí)行:
set PERSIST expire_logs_days=10 ;
系統(tǒng)會在數(shù)據(jù)目錄下生成一個包含json格式的 mysqld-auto.cnf 的文件,格式化后如下所示做粤,當 my.cnf 和 mysqld-auto.cnf 同時存在時,后者具有更高優(yōu)先級捉撮。
  • 新增降序索引:
    MySQL在語法上很早就已經(jīng)支持降序索引怕品,但實際上創(chuàng)建的仍然是升序索引。
  • group by 不再隱式排序:
    mysql 8.0 對于group by 字段不再隱式排序巾遭,如需要排序肉康,必須顯式加上order by 子句。
  • JSON特性增強:
    MySQL 8 大幅改進了對 JSON 的支持灼舍,添加了基于路徑查詢參數(shù)從 JSON 字段中抽取數(shù)據(jù)的 JSON_EXTRACT() 函數(shù)吼和,以及用于將數(shù)據(jù)分別組合到 JSON 數(shù)組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數(shù)。
    在主從復(fù)制中骑素,新增參數(shù) binlog_row_value_options炫乓,控制JSON數(shù)據(jù)的傳輸方式,允許對于Json類型部分修改,在binlog中只記錄修改的部分末捣,減少json大數(shù)據(jù)在只有少量修改的情況下侠姑,對資源的占用。
  • redo & undo 日志加密:
    增加以下兩個參數(shù)箩做,用于控制redo莽红、undo日志的加密。
innodb_undo_log_encrypt
innodb_undo_log_truncate
  • innodb select for update跳過鎖等待:
    select ... for update邦邦,select ... for share(8.0新增語法) 添加 NOWAIT安吁、SKIP LOCKED語法,跳過鎖等待燃辖,或者跳過鎖定柳畔。在5.7及之前的版本,select...for update郭赐,如果獲取不到鎖薪韩,會一直等待捌锭,直到innodb_lock_wait_timeout超時。
    在8.0版本观谦,通過添加nowait拉盾,skip locked語法豁状,能夠立即返回。如果查詢的行已經(jīng)加鎖泻红,那么nowait會立即報錯返回,而skip locked也會立即返回谊路,只是返回的結(jié)果中不包含被鎖定的行讹躯。
  • 增加SET_VAR語法:
    在sql語法中增加SET_VAR語法缠劝,動態(tài)調(diào)整部分參數(shù),有利于提升語句性能惨恭。
SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ id  FROM test ORDER id ;
INSERT  /*+ SET_VAR(foreign_key_checks=OFF) */ INTO test(NAME) VALUES(1);
  • 支持不可見索引:
    使用INVISIBLE關(guān)鍵字在創(chuàng)建表或者進行表變更中設(shè)置索引是否可見。索引不可見只是在查詢時優(yōu)化器不使用該索引脱羡,即使使用force index免都。優(yōu)化器也不會使用該索引,同時優(yōu)化器也不會報索引不存在的錯誤糊肤,因為索引仍然真實存在琴昆,在必要時,也可以快速的恢復(fù)成可見馆揉。
# 創(chuàng)建不可見索引
CREATE TABLE t2(c1 INT,c2 INT,INDEX idx_c1_c2(c1,c2 DESC) invisible );
# 索引可見
ALTER TABLE t2 ALTER INDEX idx_c1_c2 visible;
# 索引不可見
ALTER TABLE t2 ALTER INDEX idx_c1_c2 invisible;
  • 新增innodb_dedicated_server參數(shù):
    能夠讓InnoDB根據(jù)服務(wù)器上檢測到的內(nèi)存大小自動配置innodb_buffer_pool_size业舍,innodb_log_file_size,innodb_flush_method三個參數(shù)升酣。

  • 日志分類更詳細:
    在錯誤信息中添加了錯誤信息編號[MY-010311]和錯誤所屬子系統(tǒng)[Server]

  • undo空間自動回收:
    innodb_undo_log_truncate參數(shù)在8.0.2版本默認值由OFF變?yōu)镺N舷暮,默認開啟undo日志表空間自動回收。
    innodb_undo_tablespaces參數(shù)在8.0.2版本默認為2噩茄,當一個undo表空間被回收時下面,還有另外一個提供正常服務(wù)。
    innodb_max_undo_log_size參數(shù)定義了undo表空間回收的最大值绩聘,當undo表空間超過這個值沥割,該表空間被標記為可回收。

  • 增加資源組:
    MySQL 8.0新增了一個資源組功能凿菩,用于調(diào)控線程優(yōu)先級以及綁定CPU核机杜。MySQL用戶需要有 RESOURCE_GROUP_ADMIN權(quán)限才能創(chuàng)建、修改衅谷、刪除資源組椒拗。在Linux環(huán)境下,MySQL進程需要有CAP_SYS_NICE 權(quán)限才能使用資源組完整功能获黔。
    默認提供兩個資源組蚀苛,分別是USR_default,SYS_default

創(chuàng)建資源組:
create resource group test_resouce_group type=USER vcpu=0,1 thread_priority=5;
將當前線程加入資源組:
SET RESOURCE GROUP test_resouce_group;
將某個線程加入資源組:
SET RESOURCE GROUP test_resouce_group FOR thread_id;
查看資源組里有哪些線程:
select * from Performance_Schema.threads where
RESOURCE_GROUP='test_resouce_group';
修改資源組:
alter resource group test_resouce_group vcpu = 2,3 THREAD_PRIORITY = 8;
刪除資源組 :
drop resource group test_resouce_group;
  • 增加角色管理:
    角色可以認為是一些權(quán)限的集合玷氏,為用戶賦予統(tǒng)一的角色堵未,權(quán)限的修改直接通過角色來進行,無需為每個用戶單獨授權(quán)预茄。

  • MySQL8.0現(xiàn)在支持窗口函數(shù)(over)和公用表表達式(with)兴溜。毫無疑問,這是兩個最重要的Post-SQL-92功能耻陕。

  • 8.0.12的優(yōu)化是,新增了一個算法 ALGORITHM=INSTANT刨沦,專門處理只需要修改元數(shù)據(jù)就可以完成的變更诗宣,這個就可以相對比較方便地直接使用了,不需要擔(dān)心從庫延遲想诅。
    目前支持的操作是:

    • 添加新列召庞。已知限制條件如下:
      不能與其他不支持INSTANT算法的alter子語句合并在一起岛心。
      只能添加在表列的末尾。
      不能用于innodb的壓縮表(ROW_FORMAT=COMPRESSED)篮灼。
      目標表不能包含全文索引忘古。
      目標表不能是臨時表。
      目標表不能是數(shù)據(jù)字典表诅诱。
      這種添加方式下髓堪,不會計算行長度是否合適,這個計算會在發(fā)生insert或者update的時候處理娘荡。
    • 添加或者刪除虛擬列
    • 添加或者去掉列的默認值干旁。
    • 修改 enum争群,set 列類型的定義
    • 修改索引類型
    • 重命名表名稱
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末大年,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子轻要,更是在濱河造成了極大的恐慌,老刑警劉巖伦腐,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柏蘑,死亡現(xiàn)場離奇詭異粹庞,居然都是意外死亡,警方通過查閱死者的電腦和手機革半,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門又官,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人六敬,你說我怎么就攤上這事驾荣∑张荩” “怎么了撼班?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵砰嘁,是天一觀的道長。 經(jīng)常有香客問我般码,道長乱顾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任券时,我火速辦了婚禮伏伯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炸枣。我一直安慰自己弄唧,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布侯养。 她就那樣靜靜地躺著澄干,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辩稽。 梳的紋絲不亂的頭發(fā)上从媚,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音炭懊,去河邊找鬼拂檩。 笑死,一個胖子當著我的面吹牛稻励,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播加矛,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼斟览,長吁一口氣:“原來是場噩夢啊……” “哼辑奈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸠窗,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤稍计,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后臣嚣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡庭瑰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年弹灭,在試婚紗的時候發(fā)現(xiàn)自己被綠了揪垄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡捡鱼,死狀恐怖酷愧,靈堂內(nèi)的尸體忽然破棺而出缠诅,到底是詐尸還是另有隱情乍迄,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布褥伴,位于F島的核電站漾狼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏似踱。R本人自食惡果不足惜志衣,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狞洋。 院中可真熱鬧,春花似錦吉懊、人聲如沸假勿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浸须。三九已至,卻和暖如春删窒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕉拢。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留午乓,地道東北人届巩。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親或辖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容