【MySQL技術之旅】(5)該換換你的數據庫版本了,讓我們一同迎接8.0的到來哦!(初探篇)
theme: smartblue
本文已參與「掘力星計劃」,贏取創作大禮包,挑戰創作激勵金。
前提背景
MySQL關是一種關係數據庫管理系統,所使用的 SQL 語言是用於訪問數據庫的最常用的標準化語言,其特點為體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,在 Web應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係數據庫管理系統)應用軟件之一。 本文主要講述壓縮版,因為安裝不太方便,但是功能效果都是一樣的!
MySQL8的介紹説明
MySQL 8.0是全球最受歡迎的開源數據庫的一個非常令人興奮的新版本,全面改進。一些關鍵的增強包括:
MySQL8的特性介紹
-
SQL窗口函數,公用表表達式,NOWAIT和SKIP LOCKED,降序索引,分組,正則表達式,字符集,成本模型和直方圖。
-
JSON擴展語法,新功能,改進排序和部分更新。使用JSON表函數,您可以使用JSON數據的SQL機制。
-
GIS地理支持。空間參考系統(SRS),以及SRS感知空間數據類型,空間索引和空間功能。
-
可靠性 DDL語句已變得原子性和崩潰安全,元數據存儲在單個事務數據字典中。由InnoDB提供支持!
-
可觀察性性能架構,信息架構,配置變量和錯誤記錄的顯着增強。
-
可管理性遠程管理,撤消表空間管理和新的即時DDL。
-
安全 OpenSSL改進,新的默認身份驗證,SQL角色,分解超級特權,密碼強度等等。
-
性能 InnoDB在讀/寫工作負載,IO綁定工作負載和高爭用“熱點”工作負載方面明顯更好。
-
增加了資源組功能,通過將用户線程映射到CPU,為用户提供一個選項,以針對特定硬件上的特定工作負載進行優化
開發者需要了解的特性!
MySQL開發人員需要新功能,而MySQL 8.0在諸如SQL,JSON,正則表達式和GIS等領域提供了許多新的和更多需求的功能。開發人員也希望能夠存儲Emojis,因此UTF8MB4現在是8.0中的默認字符集。最後,數據類型得到了改進,在BINARY數據類型上進行了按位操作,並且改進了IPv6和UUID功能。
下面簡要介紹 MySQL 8 中值得關注的新特性和改進。
- 性能:MySQL8.0的速度要比MySQL5.7 快 2 倍。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負載、IO 密集型工作負載、以及高競爭("hot spot"熱點競爭問題)工作負載。
- NoSQL:MySQL從5.7版本開始提供 NoSQL 存儲功能,目前在8.0版本中這部分功能也得到了更大的改進。該項功能消除了對獨立的 NoSQL 文檔數據庫的需求,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務支持和完整的ACID合規性。
- 窗口函數(Window Functions):從 MySQL 8.0 開始,新增了一個叫窗口函數的概念,它可以用來實現若干新的查詢方式。窗口函數與 SUM()、COUNT() 這種集合函數類似,但它不會將多行查詢結果合併為一行,而是將結果放回多行當中。即窗口函數不需要 GROUP BY。
- 窗口函數
- MySQL 8.0提供了SQL窗口功能。與分組集合函數類似,窗口函數對一組行進行一些計算,例如COUNT或SUM。但是,如果分組聚合將這組行集合到一行中,則窗口函數將為結果集中的每一行執行聚合。
- 窗口化的聚合函數:COUNT,SUM,AVG,MIN,MAX,BIT_OR,BIT_AND,BIT_XOR,STDDEV_POP(及其同義詞STD,STDDEV),STDDEV_SAMP,VAR_POP(及其同義詞VARIANCE)和VAR_SAMP。
- 專門的窗口函數是:RANK,DENSE_RANK,PERCENT_RANK,CUME_DIST,NTILE,ROW_NUMBER,FIRST_VALUE,LAST_VALUE,NTH_VALUE,LEAD和LAG
- 窗口函數
對窗口函數(又名分析函數)的支持是一種頻繁的用户請求
-
隱藏索引:在 MySQL 8.0 中,索引可以被“隱藏”和“顯示”。當對索引進行隱藏時,它不會被查詢優化器所使用。我們可以使用這個特性用於性能調試,例如我們先隱藏一個索引,然後觀察其對數據庫的影響。如果數據庫性能有所下降,説明這個索引是有用的,然後將其“恢復顯示”即可;如果數據庫性能看不出變化,説明這個索引是多餘的,可以考慮刪掉。
-
降序索引:MySQL 8.0 為索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序。
-
公用表表達式(Common Table Expressions CTE):在複雜的查詢中使用嵌入式表時,使用 CTE 使得查詢語句更清晰。
- MySQL 8.0提供[遞歸]公用表表達式(CTE)。非遞歸CTE可以解釋為“改進的派生表”,因為它允許派生表被多次引用。遞歸CTE是一組迭代構建的行:從最初的一組行開始,一個進程派生新的行,然後將這些新的行重新輸入到進程中,產生更多的行,等等,直到該過程不再生成行。
-
UTF-8 編碼:從 MySQL 8 開始,使用 utf8mb4 作為 MySQL 的默認字符集。
-
JSON:MySQL 8 大幅改進了對 JSON 的支持,添加了基於路徑查詢參數從 JSON 字段中抽取數據的 JSON_EXTRACT() 函數,以及用於將數據分別組合到 JSON 數組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數。
-
可靠性:InnoDB 現在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實現事務完整性,要麼失敗回滾,要麼成功提交,不至於出現 DDL 時部分成功的問題,此外還支持 crash-safe 特性,元數據存儲在單個事務數據字典中。
-
高可用性(High Availability):InnoDB 集羣為您的數據庫提供集成的原生 HA 解決方案。
-
安全性:對 OpenSSL 的改進、新的默認身份驗證、SQL 角色、密碼強度、授權。
MySQL8的安裝介紹
-
進入官網後,點擊"Dowload",然後頁面往下拉
-
接下來看到的頁面是這樣的,紅色框框的鏈接就是mysql社區版,是免費的mysql版本,然後我們點擊這個框框的鏈接:
-
接下來跳轉到這個頁面,在這裏,我們只要下載社區版的Server就可以了:
-
下載免安裝版(windows以外的其他系統除外)
- 至此,安裝包就下載好了!
注意,安裝的目錄應當放在指定位置,其次,絕對路徑中避免出現中文,推薦首選英文為命名條件!
MySQL解壓和配置環境變量
-
找一個文件夾放入解壓後的mysql,不建議放c盤,200M左右的sql解壓後大約接近1G
-
把MySQL解壓後的bin文件地址加入環境變量的path,方便終端尋找MySQL命令行。
MySQL 創建配置
下載完後,建議解壓到一個沒有中文的路徑,在解壓目錄創建my.ini配置文件(如果沒有就自己手動建立一個即可)
添加相關基本配置
````
這些是基本配置信息
[client]
設置mysql客户端默認字符集
default-character-set=utf8mb4 [mysqld]
設置3336端口
port = 3336
設置mysql的安裝目錄
basedir=D:\developer\installed\mysql8\mysql-8.0.12-winx64
設置 mysql數據庫的數據的存放目錄
datadir=D:\developer\installed\mysql8\mysql-8.0.12-winx64\data
允許最大連接數
max_connections=20
創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
允許連接失敗的次數。
max_connect_errors=10
服務端使用的字符集默認為utf8mb4
character-set-server=utf8mb4
創建新表時將使用的默認存儲引擎
使用“mysql_native_password”插件認證
mysql_native_password
default_authentication_plugin=mysql_native_password
設置時區為東八區,此項設置後,在連接MySQL的時候可以不用每次都手動設置時區
default-time-zone = '+8:00' ````
- mysql給出的初始密碼太複雜了,一般我們需要改為一個簡單的密碼方便之後登陸,在MySQL8.0.4以前,執行:SET PASSWORD=PASSWORD(’[修改的密碼]’),即可更改密碼,但MySQL8.0.4開始,這樣默認是不行的。因為之前,MySQL的密碼認證插件是“mysql_native_password”,而現在使用的是“caching_sha2_password”。
- 因為當前有很多數據庫工具和鏈接包都不支持“caching_sha2_password”,為了方便,暫時需要改回“mysql_native_password”認證插件。
初始化MySQL服務
採用cmd進入解壓後的bin目錄,輸入mysqld --initialize --console
- mysql會在和bin同級目錄下產生data文件,即root的數據庫,併產生如下紅框中的隨機密碼(如果沒有密碼,可以使用mysql -uroot -p直接登陸),對應賬號為root。在沒有更改密碼前,需要記住這個密碼,後續登錄需要用到。
安裝MySQL服務
- 還在bin 目錄下執行命令
mysqld --install [服務名]
後面的服務名可以不寫,默認的名字為 mysql。當然,如果電腦上需要安裝多個MySQL服務,就可以用不同的名字區分了,比如 liboMySQL
-
在mysql的bin目錄下面執行: mysqld --install
-
報錯信息如下:Install/Remove of the Service Denied
-
解決辦法:打開cmd.exe程序的時候選擇“用管理員身份打開”。
-
出現上述信息則標識成功安裝
啟動MySQL服務
輸入:net start [服務名]
登錄MySQL服務
- 登錄指定端口3336
命令如下,這時候會提示輸入密碼,使用上面安裝時給的隨機密碼,填入即可登錄成功,進入MySQL命令模式。
mysql -u root -p 3336
修改密碼
剛才生成的是臨時密碼,得改。
java
輸入ALTER USER "root"@"localhost" IDENTIFIED BY "新密碼";
卸載MySQL服務
停止服務
net stop libomysql(服務名)
卸載服務
mysqld --remove libomysql(服務名)
參考資料
- http://www.cnblogs.com/2020javamianshibaodian/p/12933674.html
- http://www.jianshu.com/p/647a596cb251
- http://www.jb51.net/article/218165.htm
- http://blog.csdn.net/qq_32448349/article/details/81701355
- 完整秒殺架構的設計到技術關鍵點的“情報信息”
- 獨一無二的「MySQL調優金字塔」相信也許你擁有了它,你就很可能擁有了全世界。
- 【MySQL技術之旅】(5)該換換你的數據庫版本了,讓我們一同迎接8.0的到來哦!(初探篇)
- ☕【Java技術指南】「Java8編程專題」讓你真正會用對Java新版日期時間API編程指南
- 【Fegin技術專題】「原生態」打開Fegin之RPC技術的開端,你會使用原生態的Fegin嗎?(高級用法)
- 【優化技術專題】「線程間的高性能消息框架」終極關注Disruptor的核心源碼和Java8的@Contended偽共享指南
- 【優化技術專題】「線程間的高性能消息框架」再次細節領略Disruptor的底層原理和優勢分析
- 【Zookeeper核心原理】Paxos協議的原理和實際運行中的應用流程分析
- ☕【Java技術指南】「JPA編程專題」讓你不再對JPA技術中的“持久化型註解”感到陌生了!
- Java技術開發專題系列之【Guava RateLimiter】針對於限流器的入門到精通(含源碼分析介紹)
- ☕【Java技術指南】「JPA編程專題」讓你不再對JPA技術中的“持久化型註解”感到陌生了!
- 【Eureka技術指南】「SpringCloud」從源碼層面讓你認識Eureka工作流程和運作機制(下)
- MySQL技術專題(6)這也許是你的知識盲區-MySQL主從架構以及[半同步機制]
- 優化技術專題-線程間的高性能消息框架-深入淺出Disruptor的使用和原理
- ☕【Java技術指南】「併發編程專題」Fork/Join框架基本使用和原理探究(原理篇)
- ☕【Java技術指南】「併發編程專題」Guava RateLimiter針對於限流器的入門到精通(含源碼分析介紹)
- 【優化技術專題】「温故而知新」基於Quartz系列的任務調度框架的動態化任務實現分析
- ☕【Java技術指南】「併發編程專題」Guava RateLimiter針對於限流器的入門到精通(含實戰和原理分析)
- 【MySQL技術之旅】(4)這也許是你的知識盲區-[MySQL主從架構]之半同步機制
- ☕【Java技術指南】「併發編程專題」CompletionService框架基本使用和原理探究(基礎篇)