溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

發(fā)布時(shí)間:2023-02-27 13:34:32 來(lái)源:億速云 閱讀:236 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要講解了“MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決”吧!

    一、MySQL升級(jí)到8.0.X版本

    1、升級(jí)的原因及MySQL8.0版本新特性

    比MySQL 5.7快2倍,僅這一個(gè)理由就夠了,而且還有其他許多很好的新特性:

    1. 性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面帶來(lái)了更好的性能:讀/寫(xiě)工作負(fù)載、IO 密集型工作負(fù)載、以及高競(jìng)爭(zhēng)("hot spot"熱點(diǎn)競(jìng)爭(zhēng)問(wèn)題)工作負(fù)載。

    2. NoSQL:MySQL 從 5.7 版本開(kāi)始提供 NoSQL 存儲(chǔ)功能,目前在 8.0 版本中這部分功能也得到了更大的改進(jìn)。該項(xiàng)功能消除了對(duì)獨(dú)立的 NoSQL 文檔數(shù)據(jù)庫(kù)的需求,而 MySQL 文檔存儲(chǔ)也為 schema-less 模式的 JSON 文檔提供了多文檔事務(wù)支持和完整的 ACID 合規(guī)性。

    3. 窗口函數(shù)(Window Functions):從 MySQL 8.0 開(kāi)始,新增了一個(gè)叫窗口函數(shù)的概念,它可以用來(lái)實(shí)現(xiàn)若干新的查詢(xún)方式。窗口函數(shù)與 SUM()、COUNT() 這種集合函數(shù)類(lèi)似,但它不會(huì)將多行查詢(xún)結(jié)果合并為一行,而是將結(jié)果放回多行當(dāng)中。即窗口函數(shù)不需要 GROUP BY。

    4. 隱藏索引:在 MySQL 8.0 中,索引可以被“隱藏”和“顯示”。當(dāng)對(duì)索引進(jìn)行隱藏時(shí),它不會(huì)被查詢(xún)優(yōu)化器所使用。我們可以使用這個(gè)特性用于性能調(diào)試,例如我們先隱藏一個(gè)索引,然后觀察其對(duì)數(shù)據(jù)庫(kù)的影響。如果數(shù)據(jù)庫(kù)性能有所下降,說(shuō)明這個(gè)索引是有用的,然后將其“恢復(fù)顯示”即可;如果數(shù)據(jù)庫(kù)性能看不出變化,說(shuō)明這個(gè)索引是多余的,可以考慮刪掉。

    5. 降序索引:MySQL 8.0 為索引提供按降序方式進(jìn)行排序的支持,在這種索引中的值也會(huì)按降序的方式進(jìn)行排序。

    6. 通用表表達(dá)式(Common Table Expressions CTE):在復(fù)雜的查詢(xún)中使用嵌入式表時(shí),使用 CTE 使得查詢(xún)語(yǔ)句更清晰。

    7. UTF-8 編碼:從 MySQL 8 開(kāi)始,使用 utf8mb4 作為 MySQL 的默認(rèn)字符集。

    8. JSON:MySQL 8 大幅改進(jìn)了對(duì) JSON 的支持,添加了基于路徑查詢(xún)參數(shù)從 JSON 字段中抽取數(shù)據(jù)的 JSON_EXTRACT() 函數(shù),以及用于將數(shù)據(jù)分別組合到 JSON 數(shù)組和對(duì)象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數(shù)。

    9. 可靠性:InnoDB 現(xiàn)在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實(shí)現(xiàn)事務(wù)完整性了,要么失敗回滾,要么成功提交,不至于出現(xiàn) DDL 時(shí)部分成功的問(wèn)題,此外還支持 crash-safe 特性,元數(shù)據(jù)存儲(chǔ)在單個(gè)事務(wù)數(shù)據(jù)字典中。

    10. 高可用性(High Availability):InnoDB 集群為您的數(shù)據(jù)庫(kù)提供集成的原生 HA 解決方案。

    11. 安全性:對(duì) OpenSSL 的改進(jìn)、新的默認(rèn)身份驗(yàn)證、SQL 角色、密碼強(qiáng)度、授權(quán)。

    2、下載MySQL

    到官網(wǎng),下載MySQL Community Server,這個(gè)是日常使用版本,選擇要安裝的操作系統(tǒng),下載對(duì)應(yīng)的安裝包,下載最新的穩(wěn)定版本即可。

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    3、備份數(shù)據(jù)

    保留數(shù)據(jù)SQL腳本,沒(méi)有的話(huà)導(dǎo)出,可以使用Navicat等工具進(jìn)行備份。

    4、卸載原版本MySQL

    直接按照普通軟件卸載的方式卸載即可。

    5、安裝下載的新版本

    8.0和以前比較安裝步驟簡(jiǎn)單了許多,一步一步安裝即可。

    6、MySQL升級(jí)后的兼容性問(wèn)題

    兼容性還是可以的,目前為止筆者還沒(méi)遇到有兼容問(wèn)題。

    雖然網(wǎng)上說(shuō)會(huì)有一點(diǎn)兼容問(wèn)題,但是還是應(yīng)該升級(jí),不能因噎廢食,利益明顯大于弊端。當(dāng)然也要考慮實(shí)際情況,最好不要在版本忙碌期間進(jìn)行,可以選擇一個(gè)不是很忙的版本,最為一個(gè)事項(xiàng)來(lái)做升級(jí),然后進(jìn)行充分驗(yàn)證和修改,保證升級(jí)后的功能正常。

    二、升級(jí)MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本

    1、為什么要升級(jí)驅(qū)動(dòng)版本

    筆者原來(lái)安裝MySQL后,驅(qū)動(dòng)沒(méi)升級(jí),使用的mysql-connector-java 5.1.47,驗(yàn)證功能也沒(méi)問(wèn)題,能夠連接數(shù)據(jù)庫(kù)。

    但是一定要升級(jí),升級(jí)后使用新的驅(qū)動(dòng)類(lèi),無(wú)論是啟動(dòng)加載速度還是數(shù)據(jù)庫(kù)查詢(xún)速度性能都有明顯提升。

    筆者本地弄了個(gè)實(shí)例,對(duì)比了下,雖然數(shù)據(jù)量小,差距不明顯,但是還是明顯看到性能提升:

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    2、升級(jí)版本

    直接下載最新版本jar包或,修改引用的版本號(hào)??梢缘絤aven的一些搜索網(wǎng)站(如https://mvnrepository.com/)進(jìn)行搜索可用版本。

            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.16</version>
            </dependency>

    3、修改配置

    1、驅(qū)動(dòng)類(lèi)變了,原來(lái)是由原來(lái)的com.mysql.jdbc.Driver改為com.mysql.cj.jdbc.Driver

    不修改會(huì)影響性能,啟動(dòng)過(guò)程中有告警:

    Loading class `com.mysql.jdbc.Driver&rsquo;. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver&rsquo;. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

    修改后的驅(qū)動(dòng)程序通過(guò)SPI自動(dòng)注冊(cè),通常不需要手動(dòng)加載驅(qū)動(dòng)程序類(lèi)。

    2、jdbc_url上的時(shí)區(qū)變?yōu)楸仨毰渲?,否則會(huì)啟動(dòng)報(bào)錯(cuò)

    Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value &lsquo;?й???&rsquo; is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

    如:

    jdbc:mysql://localhost:3306/dbname?characterEncoding=utf-8&useSSL=true&serverTimezone=GMT

    4、mysql-connector-java升級(jí)到8.0之后的一些兼容問(wèn)題

    基本還是兼容的,但是有一些不兼容的地方,目前已經(jīng)筆者知道的有2點(diǎn):

    1、如果數(shù)據(jù)庫(kù)表自增主鍵id是bigint類(lèi)型,原來(lái)版本執(zhí)行后返回的id是Long類(lèi)型,現(xiàn)在改為了BigInteger類(lèi)型,如果是使用mybatis基本沒(méi)問(wèn)題;如果是自定義的JDBC框架就要格外注意看處理是否有問(wèn)題,類(lèi)型是否存在不匹配導(dǎo)致問(wèn)題。

    2、日期類(lèi)型的字段處理可能存在問(wèn)題,如表中字段為T(mén)IMESTAMP,之前查詢(xún)返回能夠返回毫秒值,升級(jí)后不再返回。如果在查詢(xún)時(shí)有使用日期轉(zhuǎn)換函數(shù)轉(zhuǎn)換為String,并且對(duì)毫秒值進(jìn)行了處理,那么升級(jí)后會(huì)報(bào)錯(cuò),需要去掉對(duì)毫秒值得處理。如果查詢(xún)返回直接映射為Date就沒(méi)問(wèn)題。

    三、MySQL8.0和5.7性能對(duì)比

    1、InnoDB Row Operations

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    2、Transactions Processed

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    3、CPU Resources

    MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決

    感謝各位的閱讀,以上就是“MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)MySQL驅(qū)動(dòng)mysql-connector-java升級(jí)到8.0.X版本問(wèn)題怎么解決這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI