新特性解讀 | MySQL 5.7升級到MySQL 8.0的注意事項
引言
近期項目進(jìn)行MySQL 5.7.21到MySQL 8.0.13的升級測試,采用邏輯升級,配置文件來自于生產(chǎn)環(huán)境。在初始化MySQL 8.0時,初始化命令秒級完成,而數(shù)據(jù)目錄卻是空的,執(zhí)行初始化操作的shell窗口也沒有任何的報錯提示。
通過翻閱官方手冊發(fā)現(xiàn)MySQL 8.0.13中NO_AUTO_CREATE_USER這種sql_mode已經(jīng)廢棄,而配置文件的sql_mode有這個配置項,最終導(dǎo)致了實例初始化失敗。為了減少升級過程中出現(xiàn)類似問題,因此對MySQL 5.7到8.0的升級進(jìn)行部分整理,主要包括:升級對MySQL版本的要求、升級都做了哪些內(nèi)容、數(shù)據(jù)庫升級做了哪些步驟以及注意事項。
升級要求
- MySQL 5.7升級到MySQL 8.0,要求MySQL5.7的版本是MySQL 5.7.9或者更高的GA版
- 不支持跨版本升級
升級內(nèi)容
- 升級數(shù)據(jù)字典表的版本
- 升級MySQL server 版本,主要包括system表以及其他schema對象
升級步驟
- 升級數(shù)據(jù)字典,這個階段主要升級MySQL庫的數(shù)據(jù)字典表。數(shù)據(jù)字典的升級在數(shù)據(jù)庫服務(wù)啟動過程自動完成。
- 升級MySQL庫的系統(tǒng)表(剩余的非字典表);升級Performance schema、 information schema 、sys schema;升級用戶schema。在MySQL 8.0.16版本之前,需要手動的執(zhí)行MySQL_upgrade來完成該步驟的升級,在MySQL 8.0.16版本是由MySQLd來完成該步驟的升級。
升級注意事項
- caching_sha2_password認(rèn)證插件提供更多的密碼加密方式,并且在加密方面具有更好的表現(xiàn),目前MySQL 8.0選用caching_sha2_password作為默認(rèn)的認(rèn)證插件,MySQL 5.7的認(rèn)證插件是MySQL_native_password。如果客戶端版本過低,會造成無法識別MySQL 8.0的加密認(rèn)證方式,最終導(dǎo)致連接問題。
- MySQL存儲引擎現(xiàn)在負(fù)責(zé)提供自己的分區(qū)處理程序,而MySQL服務(wù)器不再提供通用分區(qū)支持,InnoDB和NDB是唯一提供MySQL 8.0支持的本地分區(qū)處理程序的存儲引擎。 如果分區(qū)表用的是別的存儲引擎,存儲引擎必須進(jìn)行修改。要么將其轉(zhuǎn)換為InnoDB或NDB,要么刪除其分區(qū)。通過MySQLdump從5.7獲取的備份文件,在導(dǎo)入到8.0環(huán)境前,需要確保創(chuàng)建分區(qū)表語句中指定的存儲引擎必須支持分區(qū),否則會報錯。
- MySQL 8.0的默認(rèn)字符集utf8mb4,可能會導(dǎo)致之前數(shù)據(jù)的字符集跟新建對象的字符集不一致,為了避免新舊對象字符集不一致的情況,可以在配置文件將字符集和校驗規(guī)則設(shè)置為舊版本的字符集和校驗規(guī)則。
- MySQL 8.0啟動使用的lower_case_table_names值必須跟初始化時使用的一致。使用不同的設(shè)置重新啟動服務(wù)器會引入與標(biāo)識符的排序和比較方式不一致的問題。
< lower_case_table_names >
https://dev.mysql.com/doc/refman/8.0/en/server-systemvariables.html#sysvar_lower_case_table_names
- 要避免MySQL 8.0上的啟動失敗,MySQL配置文件中的sql_mode系統(tǒng)變量不能包含NO_AUTO_CREATE_USER。
- 從MySQL 5.7.24和MySQL 8.0.13開始,MySQLdump從存儲程序定義中刪除了NO_AUTO_CREATE_USER。 必須手動修改使用早期版本的MySQLdump創(chuàng)建的轉(zhuǎn)儲文件,以刪除NO_AUTO_CREATE_USER。
- 在MySQL 8.0.11中,刪除了這些不推薦使用的兼容性SQL Mode:DB2,MAXDB,MSSQL,MySQL323,MySQL40,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS。從5.7到8.0的復(fù)制場景中,如果語句使用到廢棄的SQL Mode會導(dǎo)致復(fù)制異常。
- 在執(zhí)行到MySQL 8.0.3或更高版本的in-place升級時,BACKUP_ADMIN權(quán)限自動授予具有RELOAD權(quán)限的用戶。
本文對MySQL 5.7到MySQL 8.0的升級過程中出現(xiàn)部分易出現(xiàn)問題進(jìn)行整理:升級對MySQL版本的要求、升級都做了哪些內(nèi)容、數(shù)據(jù)庫升級做了哪些步驟以及注意事項,希望對大家版本升級有幫助。
原創(chuàng)作者: 郭斌斌