操作場景
云數據庫 RDS for MySQL支持通過以下兩種方式升級實例大版本:
通過RDS界面升級大版本:如需該操作請提交工單進行權限申請。
通過DRS升級大版本:通過DRS遷移功能將RDS for MySQL低版本實例遷移到高版本。
前提條件
通過RDS界面升級大版本功能目前支持西寧、海口、太原、南昌、鄭州、烏魯木齊、內蒙3、蘭州、福州、北京2、長沙2、廣州4、蘇州、杭州、成都3、蕪湖、上海4、深圳、武漢2、中衛、重慶、石家莊、青島、貴州、西安2、華北。
如果用戶創建DRS任務使用的是子賬號,需要完成DRS賬戶委托,否則會導致升級失敗。具體操作如下。
當用戶創建DRS任務使用的是子賬號,執行定時啟動任務、全量完成自動結束、自動續傳失敗任務、定時對比任務等自動功能時,可能會訪問全局服務或是Region級別服務,需要使用“賬戶委托”,否則會導致執行失敗。
數據復制服務支持在創建任務的時候,自動將用戶賬戶委托給數據復制服務的管理租戶,即op_svc_rds,便于在執行定期任務的時候,具有對任務實行自動化管理的權限。
解決方案:
方法一:使用主賬號重新創建一次任務,主賬號默認有Security Administrator權限,可在創建任務后將委托創建出來。
方法二:使用主賬號在子賬號所在的用戶組添加Security Administrator權限后,重新創建任務。
方法三:手動添加“賬戶委托”,添加步驟如下:
a. 使用主賬號登錄天翼云,在右上角單擊“控制臺”。
b. 在控制臺頁面管理與部署頁面,選擇“統一身份認證服務”。
c. 在統一身份認證頁面,單擊左側導航窗格中“委托”,進入“委托”頁面。
d. 在“委托”頁面,單擊右上方的“創建委托”進行委托創建。
e. 填寫委托名稱為“DRS_AGENTCY” ,委托類型為 “普通賬號”時, 委托的賬號為 “op_svc_rds”;持續時間為“永久”,完成后單擊“完成”。
圖 創建委托
f. 在“選擇策略”頁面,選擇DRS_AGENTCY的授權策略,委托權限需配置全局的 Tenant Administrator,完成后單擊右下角的“下一步”。
圖 選擇策略
g. 在“設置最小授權范圍”頁面,先選擇全局服務資源授權,點擊右下角的“確定”后,在授權記錄頁面再點擊“授權”,基于指定區域設置最小授權范圍,完成后單擊右下角的“確定”。
圖 全局服務資源授權
圖 指定區域項目授權
h. 授權完成后,單擊委托名稱,在“授權記錄”中可看到全局服務和指定區域兩條授權記錄。
圖 授權記錄
i. 權限生效時間提醒,您選中的OBS權限由于系統設計的原因,授權后需等待15-30分鐘才可生效,權限生效后重新創建即可。
注意事項
5.6升級至5.7成功后,為避免連續升級后出現問題難恢復、難定位,后臺默認需要一天的觀察期,也請您在升級后在12小時內及時對業務進行驗證,升級成功一天后即可繼續對升級5.7成功的實例繼續升級至8.0。如果前序升級成功一天后繼續升級預檢查報錯,您可提交工單讓運維人員解決此問題。
下發RDS for MySQL 5.7升級至8.0前,需進行預檢查,請注意以下內容:
? 預檢查耗時與表數量相關,請您盡量在業務低峰期執行。
? 檢查報告保留24小時,請及時下載。
? “檢查參數”項失敗時,請根據檢查詳情中的檢查項,對照表 升級預檢查項及修復建議進行修復,級別為error的檢查項,必須修復才可升級,級別為warning的檢查項,請知悉升級前后該內核特性的變化。
? 修復后需單擊“重新檢查”,獲取新的檢查結果。
只能從5.7的最新小版本升級到8.0的最新小版本。請先確認5.7版本已經是最新小版本,才能繼續大版本升級。
大版本升級操作建議避開執行備份的時間窗。
升級大版本前建議先做一次全量備份。
升級數據庫大版本過程將造成約10~120秒的業務中斷,請確保您的應用有自動重連機制。請在業務低峰期執行該操作,在業務高峰期執行會導致升級時長變長。當前大版本升級為了保證數據完整性會在下發升級后幾分鐘內重啟數據庫進程,預計中斷1分鐘左右。如果您選擇的是可維護時間段內升級,請注意此中斷發生在可維護時間窗之前。
升級主實例大版本時,如有只讀實例,也會同步升級只讀實例的大版本(不支持單獨升級只讀實例的大版本)。
升級大版本后,實例會升級到新的內核大版本,不支持降級。
請務必仔細對比升級前后版本差異,建議您新建一個RDS for MySQL 5.7或8.0版本實例進行語法測試,避免應用使用的低版本語法或特性在升級高版本后不支持。
建議您將原實例數據恢復到新實例上面,先使用新實例進行升級測試,確認各項功能正常后再升級原實例。
內核大版本升級期間,自動擴容不生效,需要確保實例預留了足夠的空間支撐升級過程中的業務寫入。
大版本升級定時任務需預準備,設置后不可取消。
升級大版本后,升級前的備份將不可用于新版本實例,時間點恢復功能將不能選擇升級前的時間點。
大版本升級過程中禁止event的DDL操作,如create event、drop event和alter event。
大版本升級后,規格參數會恢復到升級版本的默認值,包括以下參數:threadpool_size、innodb_buffer_pool_size、innodb_io_capacity、innodb_io_capacity_max、innodb_buffer_pool_instances、back_log、max_connections。
5.7版本和8.0版本實例存在相同參數取值范圍不一樣的情況,例如參數“max_execution_time”如果在5.7版本中設置為小于60000,大版本升級后將恢復成默認值0,這是因為8.0版本該參數最小值只能為60000。
MySQL大版本升級耗時與實例的數據量和表數量有關。
約束限制
對于主備實例,復制延遲大于300秒無法升級大版本。
實例中存在異常節點,無法升級大版本。
MySQL 5.7及之后版本不再支持Sequence Engine,升級前請確認。
目前RDS for MySQL實例最大可支持50萬張表(系統表+數據表),大于50萬張表時,會導致大版本升級失敗。
云數據庫RDS for MySQL暫不支持已開啟事件定時器功能的實例升級大版本,若您想使用該功能,請先關閉事件定時器。具體操作請參考開啟或關閉事件定時器。
升級到8.0版本后,主實例和只讀實例會共用SQL限流規則,為避免主實例SQL限流規則對只讀業務造成影響,請在升級前審視調整主實例SQL限流規則、以及主實例和只讀實例的SQL限流開關。
準備升級時,如果仍存在XA prepared狀態的XA事務:請使用 XA recover; 語句排查后,將這些XA事務commit或者rollback,再進行升級;否則無法升級成功。
? XA recover語句只會顯示XA prepare狀態后的XA事務,其他階段如XA start、XA end、XA commit、XA rollback后的XA事務都不會顯示在其中。
? 如果要commit或者rollback處于XA prepare狀態的XA事務,請在XA recover返回的結果中,找到data一列(如下圖中的'xid1'),作為XA commit或者XA rollback的輸入。
圖 排查XA事務
以下場景不支持RDS for MySQL 5.7升級至8.0:
? 不支持已綁定DRDS或已開通數據庫代理的RDS for MySQL實例進行升級。
? 不支持單機進行升級。
? 主實例下的只讀實例帶有SQL限流規則時,不支持升級,請在升級前刪除只讀的限流規則。
升級預檢查項及升級失敗的修復建議
表 升級預檢查項及修復建議
| 檢查項 | 檢查內容 | 修復建議 |
|---|---|---|
| utf8mb3Check | 檢查字符集utf8mb3。 | MySQL 5.7中,字符集utf8等同于utf8mb3, MySQL 8.0中,字符集utf8等同于utf8mb4, 請注意升級后如果使用utf8創建表格,相當于使用字符集utf8mb4。 |
| removedSysVars | 檢查已移除的系統參數。 | 系統參數在MySQL 8.0中已刪除。 |
| sysVarsNewDefaults | 檢查系統參數默認值變化。 | 系統參數在MySQL 8.0中的默認值發生變化,如果您修改過該參數的值,升級后保留修改后的值,如果未修改過,將采用新的默認值。 |
| zeroDatesCheck | 檢查使用了零日期、日期時間和時間戳。 | MySQL 8.0.16及以后版本,將零值日期(例:“2024-00-00”)作為查詢條件時,MySQL將該字符串轉換為DATE,如果轉換失敗,該查詢將報錯。 |
| enumSetElementLenghtCheck | 檢查ENUM/SET列元素長度。 | 元素長度大于255個字符,請修改到不超過255個字符。 |
| reservedKeywordsCheck | 檢查保留字。 | 與MySQL 8.0中的保留字沖突,請修改名字。 |
| mysqlDollarSignNameCheck | 檢查$符號。 | 數據庫對象名包含“$”,請修改。 |
| mysqlInvalid57NamesCheck | 檢查非法庫名/表名/列名等。 | 包含非法名字,請修改。 |
| groupByAscCheck | 檢查group by ASC/DESC語法。 | MySQL 8.0移除了GROUP BY ASC/DESC語法,請修改數據庫對象,可將ASC/DESC關鍵字從 GROUP BY子句中移除,并放置在適當的ORDER BY子句中。 |
| checkTableOutput | 通過"check table x for upgrade"檢查表存在的問題。 | 根據檢查結果中的“說明”進行修復。 |
| engineMixupCheck | 檢查 InnoDB 識別了屬于其他引擎的表的情況。 | 表格被 InnoDB引擎識別,但 SQL 層認為它們屬于另一個引擎,請聯系客服解決。 |
foreignKeyLengthCheck | 檢查外鍵約束名長度。 | 外鍵約束名長度不得超過64個字符,請修改。 |
| nonNativePartitioningCheck | 檢查使用了非本地分區引擎的分區表的情況。 | MySQL 8.0僅支持InnoDB 和 NDB作分區表引擎,請轉換為InnoDB引擎,或刪除其分區。 |
| routinesSyntaxCheck | 檢查語法不兼容的情況。 | 存儲過程、函數等數據庫對象的定義包含了不兼容的語法,例如與MySQL8.0中的保留字沖突,請根據檢查結果中的“說明”做修改。 |
| maxdbFlagCheck | 檢查是否使用了過時的 MAXDB sql_mode標志。 | MySQL 8.0刪除了sql_mode中的MAXDB選項,請修改sql_mode參數,不使用MAXDB。 |
| sqlModeFlagCheck | 檢查是否使用了過時的sql_mode標志。 | MySQL 8.0刪除了部分sql_mode標志,請根據檢查結果中的“說明”,修改sql_mode參數。 |
| removedSysLogVars | 檢查已移除的系統日志系統參數。 | MySQL 8.0移除了部分系統日志系統參數,請知悉。 |
| mysqlIndexTooLargeCheck | 檢查索引長度。 | MySQL 5.7和MySQL 8.0都支持相同長度的索引,最大索引長度為767字節,在MySQL 8.0 utf8mb4編碼下,最大支持191個字符;請修改索引長度至不超過191個字符。 |
| circularDirectoryCheck | 檢查表空間數據文件路徑使用循環目錄。 | 目標版本不支持表空間在數據文件路徑中包含循環目錄引用(例如“/../”),請聯系客服處理。 |
| columnsWhichCannotHaveDefaultsCheck | 檢查列默認值。 | BLOB、TEXT、GEOMETRY或JSON等類型的列不允許設置默認值,請通過ALTER TABLE語句刪除默認值。 |
| removedFunctionsCheck | 檢查已移除的函數。 | 目標版本刪除了部分函數,請根據檢查結果中的“說明”,修改相應數據庫對象。 |
| mysqlOrphanedRoutinesCheck | 檢查孤立的存儲過程或函數等。 | 孤立的存儲過程或函數等指其引用的數據庫對象已不存在,無法運行,請刪除。 |
| mysqlEmptyDotTableSyntaxCheck | 檢查廢棄的標識符。 | 請根據檢查結果中的“說明”,修改對應數據庫對象中的標識符。 |
| mysqlSchemaCheck | 檢查表名沖突。 | MySQL8.0新增部分表,請通過RENAME TABLE語句修改存在沖突的表名。 |
| mysqlInvalidEngineForeignKeyCheck | 檢查外鍵約束指向其他引擎的表。 | 請通過ALTER TABLE語句修改引擎,或刪除外鍵引用。 |
| lowerCaseNameCheck | 檢查參數lower_case_table_names=1時,是否存在大寫表名 | 參數lower_case_table_names=1時,如果存在大寫表名,將導致升級失敗;請先修改lower_case_table_names=0,通過RENAME TABLE語句將檢查結果中的大寫表名修改為小寫,再將lower_case_table_names的值修改回1。 |
| specVarInConfigFileCheck | 檢查配置文件中 sql_mode、loose_tls_version 是否有過時的值。 | 目標版本移除了部分sql_mode標志,MySQL8.0.28及其以上,loose_tls_version參數不支持TLSv1和TLSv1.1,請根據檢查結果修改sql_mode或loose_tls_version參數的值。 |
| reversedUserCheck | 檢查是否創建了創建 mysql.infoschema@localhost。 | MySQL8.0內置mysql.infoschema@localhost賬號,如MySQL5.7存在此賬號,將導致升級失敗,升級前請刪除該賬號。 |
| schemaInconsistencyCheck | 檢查表文件移除或損壞導致的數據庫結構不一致問題。 | 表文件.frm缺失,請聯系客服申請處理。 |
| geometryIndexCheck | 檢查空間坐標作為索引時是否為空間索引。 | 目標版本中,空間坐標作索引時必須為空間索引,請重建索引或刪除索引。 |
| danglingIndexCheck | 檢查是否存在空懸索引。 | 全文索引列刪除導致FTS_DOC_ID空懸的表,需要進行 OPTIMIZE TABLE修復。 |
| viewColumnCheck | 檢查視圖列名長度。 | 目標版本中視圖列名長度不可超過64個字符,請通過ALTER VIEW語句修改列名。 |
| partitionedTablesInSharedTablespaceCheck | 檢查分區表是否在共享表空間。 | 目標版本不支持共享表空間,請通過ALTER TABLE語句將它們移動到獨立表空間。 |
| partitionsReferencedCheck | 檢查分區表是否被普通表通過外鍵引用。 | 分區表不可被普通表引用,請刪除外鍵引用。 |
| partitionsRangeDateCheck | 檢查按時間分區的分區表。 | MySQL 8.0按時間分區時,時間列內容要求是標準的格式(例如:'YYYY-MM-DD hh:mm:ss' 或 'YY-MM-DD hh:mm:ss'),并修改相應表中時間數值為標準格式。 |
表 升級失敗的修復建議
| 問題描述 | 影響 | 修復建議 |
|---|---|---|
RDS for MySQL 5.7升級到8.0后,由于默認字符集變更,導致執行部分SQL時索引失效。 | 5.7版本使用默認字符集建表,在升級過程中,字符集不會自動變更為8.0版本默認字符集,若用戶在內核升級到8.0后建表,同時對兩張字符集不同的表進行JOIN等操作,影響SQL執行時索引選擇,最終導致SQL執行時間變長。 | 修改8.0的庫、表、字段字符集、以及默認字符集,與5.7的字符集一致。 |
| RDS for MySQL 5.7升級到8.0過程中,刪除了全文索引,可能會導致升級失敗。 | 可能會導致升級失敗。 | 執行optimize table重建表;并排查空懸FTS_DOC_ID,詳見表 升級預檢查項及修復建議。 |
| RDS for MySQL 5.7升級到8.0過程中,由于含有分區表外鍵約束(通過參數foreign_key_check設置),導致升級失敗。 | 導致升級失敗。 | 移除該外鍵約束。 |
| 5.7版本中含有definer列為空的“mysql.events”表,會導致RDS for MySQL 5.7升級到8.0失敗。 | 導致升級失敗。 | 將definer列設置為非空。 |
| RDS for MySQL 5.7升級到8.0過程中,Server層和InnoDB層列名大小寫不匹配導致升級失敗。 | 導致升級失敗。 | 執行optimize table重建表。 |
| RDS for MySQL 5.7升級到8.0過程中,索引中包含的字段在Server層和InnoDB層中大小寫不一致導致升級失敗。 | 導致升級失敗。 | 執行optimize table重建表。 |
| 使用8.0不支持的“BTREE SPATIAL INDEX”,會導致RDS for MySQL 5.7升級到8.0失敗。 | 導致升級失敗。 | 刪除“BTREE SPATIAL INDEX”索引。 |
通過RDS界面升級大版本
步驟 1 登錄管理控制臺。
步驟 2 單擊管理控制臺左上角的 ,選擇區域。
步驟 3 選擇“數據庫 > 關系型數據庫”。進入關系型數據庫信息頁面。
步驟 4 在“實例管理”頁面,單擊主實例名稱。
步驟 5 在“基本信息”頁面的“數據庫引擎版本”處,單擊“升級數據庫版本”。
步驟 6 在彈出框中,確認升級信息,然后單擊“下一步”。
對于RDS for MySQL 5.7升級至8.0的場景,執行步驟7。
其他升級場景,執行步驟8。
步驟 7 升級預檢查。
預檢查結束后,根據預檢查結果參考表 升級預檢查項及修復建議進行修復。
修復完成后,單擊“重新檢查”再次下發檢查,直到“檢查實例狀態”和“檢查參數”全部是“已完成”,然后單擊“下一步”。
步驟 8 選擇升級方式,單擊“確定”。
立即升級:系統會立即升級您的數據庫版本到當前5.7或8.0最新版本。
可維護時間段內升級:系統會在您設置的可維護時間段內,升級您的數據庫版本到當前5.7或8.0最新版本。詳情請參見設置可維護時間段。
如果升級失敗,參考表 升級失敗的修復建議進行修復。
----結束
通過DRS升級大版本
RDS for MySQL支持通過DRS將RDS for MySQL 5.6版本數據遷移到5.7版本。使用該方式進行大版本升級,需要提前準備好待遷移到的目標版本數據庫實例。
具體遷移操作,請參見《數據復制服務用戶指南》的“創建遷移任務”內容。
表 MySQL數據庫版本信息
| 源數據庫版本 | 目標數據庫版本 | 遷移類型 |
|---|---|---|
RDS for MySQL/自建MySQL/其他云MySQL
| RDS for MySQL
| MySQL數據庫版本升級 |
說明
DRS僅支持從低版本遷移到高版本。