原創: 郭斌斌html
前 言mysql
本文是由愛可生運維團隊出品的「MySQL專欄」系列文章,內容來自於運維團隊一線實戰經驗,涵蓋MySQL各類特性的實踐,優化案例,數據庫架構,HA,監控以及故障分析,有掃雷功效。sql
有深度的MySQL開源社區持續運營維護的小目標:shell
每週至少推送一篇高質量技術文章數據庫
每個月研發團隊發佈開源組件新版服務器
每一年1024開源一款優質開源工具架構
2019年至少25場社區活動運維
歡迎你們持續關注~工具
近期項目進行MySQL 5.7.21到MySQL 8.0.13的升級測試,採用邏輯升級,配置文件來自於生產環境。在初始化MySQL 8.0時,初始化命令秒級完成,而數據目錄倒是空的,執行初始化操做的shell窗口也沒有任何的報錯提示。測試
經過翻閱官方手冊發現MySQL 8.0.13中NO_AUTO_CREATE_USER這種sql_mode已經廢棄,而配置文件的sql_mode有這個配置項,最終致使了實例初始化失敗。爲了減小升級過程當中出現相似問題,所以對MySQL 5.7到8.0的升級進行部分整理,主要包括:升級對MySQL版本的要求、升級都作了哪些內容、數據庫升級作了哪些步驟以及注意事項。
升級要求
MySQL 5.7升級到MySQL 8.0,要求MySQL5.7的版本是MySQL 5.7.9或者更高的GA版
不支持跨版本升級
升級內容
升級數據字典表的版本
升級MySQL server 版本,主要包括system表以及其餘schema對象
升級步驟
升級數據字典,這個階段主要升級MySQL庫的數據字典表。數據字典的升級在數據庫服務啓動過程自動完成。
升級MySQL庫的系統表(剩餘的非字典表);升級Performance schema、 information schema 、sys schema;升級用戶schema。在MySQL 8.0.16版本以前,須要手動的執行MySQL_upgrade來完成該步驟的升級,在MySQL 8.0.16版本是由MySQLd來完成該步驟的升級。
升級注意事項
caching_sha2_password認證插件提供更多的密碼加密方式,而且在加密方面具備更好的表現,目前MySQL 8.0選用caching_sha2_password做爲默認的認證插件,MySQL 5.7的認證插件是MySQL_native_password。若是客戶端版本太低,會形成沒法識別MySQL 8.0的加密認證方式,最終致使鏈接問題。
MySQL存儲引擎如今負責提供本身的分區處理程序,而MySQL服務器再也不提供通用分區支持,InnoDB和NDB是惟一提供MySQL 8.0支持的本地分區處理程序的存儲引擎。 若是分區表用的是別的存儲引擎,存儲引擎必須進行修改。要麼將其轉換爲InnoDB或NDB,要麼刪除其分區。經過MySQLdump從5.7獲取的備份文件,在導入到8.0環境前,須要確保建立分區表語句中指定的存儲引擎必須支持分區,不然會報錯。
MySQL 8.0的默認字符集utf8mb4,可能會致使以前數據的字符集跟新建對象的字符集不一致,爲了不新舊對象字符集不一致的狀況,能夠在配置文件將字符集和校驗規則設置爲舊版本的字符集和校驗規則。
MySQL 8.0啓動使用的lower_case_table_names值必須跟初始化時使用的一致。使用不一樣的設置從新啓動服務器會引入與標識符的排序和比較方式不一致的問題。
< 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系統變量不能包含NO_AUTO_CREATE_USER。
從MySQL 5.7.24和MySQL 8.0.13開始,MySQLdump從存儲程序定義中刪除了NO_AUTO_CREATE_USER。 必須手動修改使用早期版本的MySQLdump建立的轉儲文件,以刪除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的複製場景中,若是語句使用到廢棄的SQL Mode會致使複製異常。
在執行到MySQL 8.0.3或更高版本的in-place升級時,BACKUP_ADMIN權限自動授予具備RELOAD權限的用戶。
本文對MySQL 5.7到MySQL 8.0的升級過程當中出現部分易出現問題進行整理:升級對MySQL版本的要求、升級都作了哪些內容、數據庫升級作了哪些步驟以及注意事項,但願對你們版本升級有幫助。
參考文檔:
https://dev.mysql.com/doc/refman/8.0/en/upgrade-binary-package.html