【MySQL精通之路】MySQL8.0升級過程升級了什么

目錄

1.升級內容

1.1 mysql系統庫

1.2.其他庫

2.步驟

2.1 步驟1:數據字典庫升級。

2.2 步驟2:服務器升級。

3.mysql_upgrade

3.1 執行正常升級(根據需要執行步驟1和2):

3.2 必要時僅執行步驟1:

3.3 根據需要執行步驟1,并強制執行步驟2

3.4 注意事項


本文主要對現有版本數據庫進行升級時升級的內容進行解釋。開發人員可以跳過,更面向于DBA,

以下內容來自Mysql8.0官方文檔。

安裝新版本的MySQL可能需要升級現有安裝的以下部分:

1.升級內容

1.1 mysql系統庫

其中包含存儲mysql服務器運行時所需信息的表(請參閱第7.3節“mysql系統架構”)。mysql模式表分為兩大類:

-數據字典表,用于存儲數據庫對象元數據。

-系統庫(即剩余的非數據字典表),用于其他操作目的。

1.2.其他庫

其中一些是內置的,可能被視為服務器“擁有”,而另一些則不是:

-performance_schema、INFORMATION_SCHEMA、ndbinfo和sys庫。

-用戶表。

兩個不同的版本成員與可能需要升級的安裝部分相關聯:

-數據字典版本。這適用于數據字典表。

-服務器版本,也稱為MySQL版本。這適用于其他數據庫實例中的系統表和對象。


在這兩種情況下,適用于現有MySQL安裝的實際版本都存儲在數據字典中,并且當前預期版本被編譯為MySQL的新版本。當實際版本低于當前預期版本時,與該版本相關聯的安裝部分必須升級到當前版本。如果兩個版本都表示需要升級,則必須首先進行數據字典升級

作為剛才提到的兩個不同版本的反映,升級分為兩個步驟:

2.步驟

2.1 步驟1:數據字典庫升級。

升級內容

-Mysql庫中的數據字典表。如果實際的數據字典版本低于當前的預期版本,則服務器會創建具有更新定義的數據字典表,將持久化元數據復制到新表用新表原子替換舊表并重新初始化數據字典。

-performance_schema, INFORMATION_SCHEMA, ndbinfo

博主PS:就是說數據庫自帶的這兩表的數據字典信息。

2.2 步驟2:服務器升級。

此步驟包括所有其他升級任務。如果現有MySQL安裝的服務器版本低于新安裝的MySQL版本,則必須升級其他所有內容:

-mysql庫中的系統表(剩余的非數據字典表)。

-sys庫。

-用戶的庫。

數據字典升級(步驟1)是服務器的責任,它在啟動時根據需要執行此任務,除非使用阻止它執行此任務的選項進行調用。選項為--upgrade=NONE(自MySQL 8.0.16起),--no dd upgrade(自MySQL 8.0.16起)。
如果數據字典已過期,但服務器無法升級,則服務器不會運行,而是退出并返回錯誤。例如

[ERROR] [MY-013381] [Server] Server shutting down because upgrade is
required, yet prohibited by the command line option '--upgrade=NONE'.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

3.mysql_upgrade

MySQL 8.0.16中對步驟2的責任進行了一些更改:

在MySQL 8.0.16之前,mysql_upgrade?升級了Performance Schema、INFORMATION_SCHEMA和步驟2中描述的對象。DBA應該在啟動服務器后手動調用mysql_upgrade。

從MySQL 8.0.16開始,服務器執行之前由MySQL_upgrade處理的所有任務。盡管升級仍然是一個兩步操作,但服務器同時執行這兩個操作,從而簡化了過程

根據要升級到的MySQL版本,就地升級和邏輯升級中的說明指示服務器是否執行所有升級任務,或者在服務器啟動后是否也必須調用mysql_upgrade。

注意:
由于服務器從MySQL 8.0.16開始升級Performance Schema,?INFORMATION_SCHEMA和步驟2中描述的對象,因此mysql_upgrade是不需要的,并且從該版本開始不推薦使用;它也許在MySQL的未來版本中被刪除。

3.1 mysql_upgrade

盡管可能需要不同的命令選項來實現特定的效果,但在MySQL 8.0.16之前和之后,步驟2期間發生的事情的大多數方面都是相同的。
從MySQL 8.0.16開始

--upgrade-server選項控制服務器是否以及如何在啟動時執行自動升級:

如果為配置或配置--upgrade=AUTO:

服務器將升級它確定為過期的任何內容(步驟1和2)。

如果配置--upgrade=NONE:

則服務器不進行任何升級(跳過步驟1和2),但如果必須升級數據字典,則服務器也會退出并返回錯誤。使用過期的數據字典運行服務器是不可能的服務器堅持要么升級,要么退出

配置--upgrade=MINIMAL:

服務器將根據需要升級數據字典、Performance Schema和INFORMATION_SCHEMA(步驟1)。請注意,使用此選項進行升級后,無法啟動組復制因為復制內部所依賴的系統表不會更新,而且在其他方面功能可能也會明顯減少。

配置--upgrade=FORCE:

服務器將根據需要升級數據字典、Performance Schema和INFORMATION_SCHEMA(步驟1),并強制升級其他所有內容(步驟2)。由于服務器會檢查所有模式中的所有對象,因此使用此選項預計服務器啟動需要更長的時間

如果服務器認為不需要執行步驟2的操作,則FORCE可用于強制執行這些操作。FORCE與AUTO的一個不同之處在于,使用FORCE,服務器會重新創建系統表,如幫助表或時區表(如果丟失)

以下列表顯示了MySQL 8.0.16之前的升級命令以及MySQL 8.0.16及更高版本的等效命令:

3.1 執行正常升級(根據需要執行步驟1和2):

MySQL 8.0.16之前:mysqld后面跟著mysql_upgrade
截至MySQL 8.0.16:mysqld


3.2 必要時僅執行步驟1:

在MySQL 8.0.16之前:不可能執行步驟1中描述的所有升級任務,同時排除步驟2中描述的任務。但是,您可以避免升級用戶庫和sys,使用mysqld,然后使用--upgrade-system-tables和----skip-sys-schema選項升級mysql_upgrade。

自MySQL 8.0.16起:mysqld--升級=MINIMAL

3.3 根據需要執行步驟1,并強制執行步驟2

MySQL 8.0.16之前:mysqld后跟mysql_upgrade --force


自MySQL 8.0.16起:mysqld--upgrade=FORCE

在MySQL 8.0.16之前,某些mysql_upgrade選項會影響它執行的操作。下表顯示了從MySQL 8.0.16開始使用哪個服務器-升級選項值來實現類似的效果。(這些不一定是完全等效的,因為給定的--upgrade選項值可能會產生額外的影響。)

mysql_upgrade OptionServer Option
--skip-sys-schema--upgrade=NONE?or?--upgrade=MINIMAL
--upgrade-system-tables--upgrade=NONE?or?--upgrade=MINIMAL
--force--upgrade=FORCE

關于升級步驟2期間發生的情況的其他注意事項:

3.4 注意事項

步驟2 安裝sys庫(如果未安裝),否則將升級到當前版本。如果sys庫存在,但沒有版本視圖,則會發生錯誤,假設其不存在表示用戶創建的庫:

A sys schema exists with no sys.version view. If
you have a user created sys schema, this must be renamed for the
upgrade to succeed.

要在這種情況下升級,請先刪除或重命名現有的sys庫。然后再次執行升級過程。(可能需要強制執行步驟2。)
要防止sys庫檢查,請執行以下操作:

從MySQL 8.0.16開始:使用--upgrade=NONE或--upgrade=MINIMAL選項啟動服務器。
在MySQL 8.0.16之前:調用mysql_upgrade使用--skip-sys schema選項。

步驟2 升級系統表以確保它們具有當前結構。無論服務器還是mysql_upgrade執行該步驟,都是如此。關于幫助表和時區表的內容,mysql_upgrade不加載任何一種類型的表,而服務器加載幫助表,但不加載時區表。(也就是說,在MySQL 8.0.16之前,服務器只在數據目錄初始化時加載幫助表。從MySQL 8.0.16開始,它在初始化和升級時加載幫助表格。)加載時區表的過程取決于平臺,需要DBA進行決策,因此無法自動完成。?

從MySQL 8.0.30開始,當步驟2升級MySQL模式中的sys庫時,MySQL.db、MySQL.tables_priv、MySQL.columns_priv和MySQL.procs_priv表主鍵中的列順序被更改為將主機名用戶名列放在一起。將主機名和用戶名放在一起意味著可以使用索引查找這提高了CREATE user、DROP user和RENAME user語句的性能,以及具有多個權限的多個用戶的ACL檢查的性能。刪除并重新創建索引是必要的,如果系統具有大量用戶和權限,則可能需要一些時間

要防止對表進行檢查,請執行以下操作:

從MySQL 8.0.16開始:使用--upgrade=NONE或--upgrade=MINIMAL選項啟動服務器。
在MySQL 8.0.16之前:使用--upgrade system tables選項調用mysql_upgrade。

要強制對表進行檢查,請執行以下操作:

從MySQL 8.0.16開始:使用--upgrade=FORCE選項啟動服務器。
在MySQL 8.0.16之前:使用--force選項調用mysql_upgrade。

步驟2 將MySQL版本號保存在數據目錄中名為?mysql_upgrade_info的文件中。

要忽略mysql_upgrade_info文件并執行檢查,請執行以下操作:

從MySQL 8.0.16開始:使用--upgrade=FORCE選項啟動服務器。
在MySQL 8.0.16之前:使用--force選項調用mysql_upgrade。

筆記
mysql_upgrade_info文件已棄用;期望它在MySQL的未來版本中被刪除。

步驟2 用當前MySQL版本號標記所有檢查和修復的表。這樣可以確保下次對相同版本的服務器進行升級檢查時,可以確定是否需要再次檢查或修復給定的表。

博主PS:本文主要在于升級現有的數據庫。但實際生產環境對數據庫版本的升級是很少見的,因此本文的知識點只作為真正需要升級數據庫時的文檔查閱。或面向專業DBA運維人員備忘查閱。對日常開發人員用處不大。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13618.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL精通之路】InnoDB(6)-磁盤結構(6)-Undolog

1.介紹 Undolog是與單個讀寫事務相關聯的Undolog記錄的集合。 Undolog包含有關如何撤消事務對聚集索引記錄最新更改的信息。如果另一個事務需要將查看一致性讀的一部分原始數據,則會從Undolog記錄中檢索未修改的數據。 2.結構 Undolog記錄存在于Undolog段中 而Un…

LLMPerf-為LLM提供可重現的性能指標

LLMPerf-為LLM推理提供可復現的性能指標 翻譯自文章:Reproducible Performance Metrics for LLM inference 結合之前的LLMPerf測試大模型API性能的文章進行查看,效果更佳。 1. 摘要 我們見過許多關于LLM性能的聲明;然而,這些聲明往…

Android面試題之Kotlin泛型和reified關鍵字

本文首發于公眾號“AntDream”&#xff0c;歡迎微信搜索“AntDream”或掃描文章底部二維碼關注&#xff0c;和我一起每天進步一點點 //泛型 class MagicBox<T>(item:T){var available falseprivate var subject:T itemfun fetch() : T? {return subject.takeIf { avai…

Ubuntu徹底卸載Nginx

停止Nginx服務 sudo systemctl stop nginx卸載Nginx軟件包 sudo apt purge nginx nginx-common nginx-core清除配置文件和依賴項 清除Nginx的配置文件 sudo rm -rf /etc/nginx清除Nginx安裝的依賴項 sudo apt autoremove清除相關文件和目錄 刪除Nginx的日志文件 sudo rm…

配置旁掛二層組網直接轉發示例(命令行)

業務需求 企業用戶通過WLAN接入網絡&#xff0c;以滿足移動辦公的最基本需求。且在覆蓋區域內移動發生漫游時&#xff0c;不影響用戶的業務使用。 組網需求 AC組網方式&#xff1a;旁掛二層組網。DHCP部署方式&#xff1a; AC作為DHCP服務器為AP分配IP地址。匯聚交換機SwitchB作…

深度學習基礎之《TensorFlow框架(18)—卷積神經網絡(2)》

一、卷積層 1、卷積層&#xff08;Convolutional Layer&#xff09;介紹 卷積神經網絡中每層卷積層由若干卷積單元&#xff08;卷積核&#xff09;組成&#xff0c;每個卷積單元的參數都是通過反向傳播算法最佳化得到的 卷積運算的目的是特征提取&#xff0c;第一層卷積層可能…

Gradle和Maven項目解決Spring Boot Configuration Annotation Processor not configured警告

問題描述 寫了一個配置類,加了注解@ConfigurationProperties(prefix = “xxx”) 后一直報警告:Spring Boot Configuration Annotation Processor not configured 意思是 Spring boot 未配置注解處理器 解決過程 出現這個問題后,百度查了解決方式 1.maven項目 maven項目是…

學習前端第四十四天(瀏覽器事件簡介)

一、事件處理程序 對事件作出響應&#xff0c;可以分配一個 處理程序 &#xff0c; 一個在事件發生時運行的函數 1、HTML特性綁定事件處理函數 <button id"btn1" οnclick"fn();console.log(xc)">保存1</button> 2、DOM屬性綁定事件處理函數…

純軟件雙機熱備

在信息化高速發展的今天&#xff0c;企業對于業務連續性的需求愈發強烈。無論哪個行業&#xff0c;系統的穩定運行都至關重要。為了確保系統的高可用性和業務連續性&#xff0c;純軟件雙機熱備技術應運而生&#xff0c;成為了企業IT架構中的關鍵一環。 雙機熱備軟件下載 …

04信號量

如果有兩個或者兩個以上的任務(進程 / 線程&#xff0c;并發的實體)&#xff0c;去訪問一個共享資源(硬件上面的&#xff0c;軟件上的)。我們必須要保證這個共享資源的有序訪問&#xff0c;否則會產生不可預知的后果 例子: very_important_i 5; // 共享資源 fun(…

vue3父組件使用ref獲取子組件的屬性和方法

在vue3中父組件訪問子組件中的屬性和方法是需要借助于ref: 1.<script setup> 中定義響應式變量 例如&#xff1a; const demo1 ref(null) 2.在引入的子組件標簽上綁定ref屬性的值與定義的響應式變量同名( <demo1 ref"demo1"/>)。 父組件代碼如下&…

cPanel中如何進行網站質量檢測

最近我在維護網站的時候需要查看網站質量如何&#xff0c;我使用的是Hostease的主機安裝的WordPress網站&#xff0c;隨后在咨詢了他們的技術支持后獲得了方法。 當您在cPanel中部署了網站后&#xff0c;確保網站的質量和性能是至關重要的。cPanel提供了一個便捷的功能Site Qu…

Postman進階功能-Mock服務與監控

大家好&#xff0c;前面跟大家分享一些關于 Postman 的進階功能&#xff0c;當我們深入探索 Postman 的進階功能時&#xff0c;Mock 服務與監控這兩個重要方面便躍然眼前。 首先&#xff0c;Mock 服務為我們提供了一種靈活便捷的方式&#xff0c;讓我們在某些實際接口尚未準備好…

18.SpringCloud Gateway

簡介 SpringCloud Gateway是spingcloud家族的產品&#xff0c;使用netty實現的高性能服務網關&#xff0c;用于替換netflix公司的zuul網關實現。 參考地址&#xff1a; https://spring.io/projects/spring-cloud 術語 工作原理 Route Predicate Factories GatewayFilte…

科大訊飛筆試題---字符串切割

1、 題目描述 小紅拿到了一個字符串&#xff0c;她希望你幫她切割成若干子串&#xff0c;滿足以下兩個條件&#xff1a; 子串長度均為不小于 3 的奇數。 子串內部的字符全部相同。 輸入 第一行輸入一個正整數n&#xff0c;代表字符串長度。第二行輸入一個字符串&#xff0c;僅…

前端基礎入門三大核心之HTML篇:解密標簽、標題與段落的藝術

前端基礎入門三大核心之HTML篇&#xff1a;解密標簽、標題與段落的藝術 一、HTML標簽&#xff1a;網頁元素的建筑磚石1.1 HTML標簽的基本概念1.2 基礎標簽示例自閉合標簽示例&#xff1a;圖片標簽 1.3 實戰應用&#xff1a;使用<meta>標簽優化網頁 二、標題標簽&#xff…

運行時間比較

subprocess.run() 函數參數的含義&#xff1a; shell_command&#xff1a;這是要執行的命令。它可以是一個字符串&#xff0c;也可以是一個包含命令和參數的列表。例如&#xff0c;“ls -l” 或 [“ls”, “-l”]。shellTrue&#xff1a;這是一個布爾值參數&#xff0c;指示是…

新一代分布式鏈路追蹤skywalking編碼實戰教程(下)

&#x1f680; 作者 &#xff1a;“二當家-小D” &#x1f680; 博主簡介&#xff1a;?前荔枝FM架構師、阿里資深工程師||曾任職于阿里巴巴擔任多個項目負責人&#xff0c;8年開發架構經驗&#xff0c;精通java,擅長分布式高并發架構,自動化壓力測試&#xff0c;微服務容器化k…

PostgresSQL開啟歸檔模式

文章目錄 一、查詢數據庫歸檔是否開啟1、查看數據目錄(找出conf文件位置)2、查看歸檔是否開啟 二、開啟歸檔模式&#xff08;開啟后有一定的性能損耗&#xff09;1、創建歸檔目錄2、修改postgresql.conf配置文件3、重啟pg 三、驗證歸檔情況1、查看歸檔是否開啟2、檢查點 , 刷新…

利用遠控工具橫向

一.橫向移動介紹和方式 1.介紹 內網滲透的橫向移動是指攻擊者在成功進入內網后&#xff0c;通過利用內部系統的漏洞或者獲取的合法訪問權限&#xff0c;從一個受感染的系統向其他系統擴散或移動。這種橫向移動的目的通常是為了獲取更多的敏感信息、提升權限、擴大攻擊面或者更…