RDS MySQL提供了兩種方式升級資料庫版本,您可以通過控制台直接升級資料庫,也可以新購一個高版本MySQL執行個體,通過DTS資料移轉任務將原執行個體資料移轉至新執行個體中,實現資料庫版本的間接升級。
選擇升級方式
方式一:通過控制台直接升級資料庫版本與方式二:通過資料移轉DTS升級資料庫版本均支援所有MySQL版本的資料庫升級,包括5.5升級至5.6、5.6升級至5.7、5.7升級至8.0。在升級資料庫前,您需要通過以下內容選擇合適的升級方式:
執行個體規格符合以下四種類型,且執行個體配置滿足對應類型的要求,建議通過方式一:通過控制台直接升級資料庫版本。
叢集系列 ESSD雲端硬碟
高可用系列 ESSD雲端硬碟
資料庫代理限制(如有):資料庫代理小版本不低於1.13.41。
執行個體狀態限制:執行個體狀態為運行中,主備節點狀態健康且無延遲。
引擎節流:資料庫及所有庫表都為InnoDB引擎。
不屬於已下線的歷史規格,詳情請參見歷史規格。
高可用系列 本地SSD盤
加密限制:未開啟TDE加密功能(TDE開啟後不支援關閉,如已開啟TDE,請選擇方式二:通過資料移轉DTS升級資料庫版本進行升級)。
資料庫代理限制(如有):資料庫代理小版本不低於1.13.41。
執行個體狀態限制:執行個體狀態為運行中,主備節點狀態健康且無延遲。
表數量限制:不超過100萬張。
引擎節流:資料庫及所有庫表都為InnoDB引擎。
規格限制:升級後的資料庫版本必須支援原執行個體規格(含主執行個體和唯讀執行個體),且不屬於已下線的歷史規格,詳情請參見RDS MySQL主執行個體規格。
基礎系列 ESSD雲端硬碟
執行個體狀態限制:執行個體狀態為運行中。
引擎節流:資料庫及所有庫表都為InnoDB引擎。
不屬於已下線的歷史規格,詳情請參見歷史規格。
執行個體規格不符合以上四種類型或已經開啟TDE加密功能,請使用方式二:通過資料移轉DTS升級資料庫版本。
執行個體規格符合以上四種類型,但執行個體配置不滿足相關要求,您可以參考下表方案修改配置後,通過方式一:通過控制台直接升級資料庫版本,或使用方式二:通過資料移轉DTS升級資料庫版本。
問題
解決方案
執行個體處於其它狀態(如重啟中)
等待任務結束後再發起資料庫版本升級任務。
高可用系列本地SSD盤執行個體表數量超過100萬張
在升級前清理冗餘表。
部分庫表未使用InnoDB引擎
使用
ALTER TABLE <表名> engine=InnoDB;
命令轉換為InnoDB引擎。執行個體規格為歷史規格
進行規格升級後再升級資料庫版本,更多資訊請參見變更配置。
資料庫代理小版本不符合要求
升級資料庫小版本至1.13.41及以上,詳情請參見升級資料庫代理核心小版本。
其它引擎升級資料庫版本請參見:
方式一:通過控制台直接升級資料庫版本
準備工作
瞭解新舊版本差異與優勢
5.6升級至5.7:功能差異請參見附錄四:MySQL 5.7和MySQL 5.6版本功能差異列表,升級優勢請參見附錄二:MySQL5.6升級MySQL 5.7的優勢。
5.7升級至8.0:功能差異請參見附錄三:MySQL 8.0和MySQL 5.7版本功能差異列表,升級優勢請參見附錄一:MySQL 5.7升級MySQL 8.0的優勢。
瞭解升級過程與影響
版本跨度:RDS MySQL控制台不支援跨大版本升級,升級後不支援降級。例如:MySQL 5.6無法直接升級至MySQL 8.0,需要先升級到MySQL 5.7,再升級到MySQL 8.0。
本地SSD盤執行個體升級過程:系統先升級備執行個體,完成後進行主備切換,再升級主執行個體。升級過程將造成30秒至1分鐘的業務中斷,請您盡量在業務低峰期執行升級操作。
ESSD雲端硬碟執行個體升級過程:系統先建立新節點,並在新節點上執行升級,在新節點升級完成後鏈路將切換至新節點。升級過程中,將造成30秒至1分鐘的業務中斷,請您盡量在業務低峰期執行升級操作。
檢查執行個體與資料庫配置
檢查保留關鍵字:查看自訂函數,確保函數中沒有使用保留關鍵字。
檢查全量備份:檢查最近一周是否有全量資料備份的成功記錄,必要時請進行一次全量資料備份。
檢查自動重連機制:在資料庫升級過程中,RDS會進行執行個體切換,請您盡量在業務低峰期執行升級操作,或確保您的應用有自動重連機制。執行個體切換的影響請參見執行個體切換的影響。
檢查可用儲存空間:升級前請確保預留充足的磁碟可用空間(建議預留10 GB以上)。
調整日誌清理策略:增加本地日誌保留時間長度以及最大儲存空間佔有率。具體操作,請參見修改本地日誌策略。
備份執行個體參數:為確保MySQL在新版本中的穩定性和效能,完成MySQL資料庫大版本升級後,RDS不再支援查看和修改部分在高版本廢棄的低版本的參數。在大版本升級前,建議您備份相關參數的修改記錄,以便後續操作和審計。
5.6升級至5.7、5.7升級至8.0情境需要額外檢查以下內容:
5.6升級至5.7
檢查全文索引及版本資訊:低於RDS MySQL 5.6 20221130版本的資料庫在建立全文索引時會將其建立在系統資料表空間上,升級至5.7版本時有機率導致資料表空間損壞。如您小版本較低,請先升級至RDS MySQL 5.6下最新的小版本,然後再升級資料庫大版本,詳情請參見常見問題。
5.7升級至8.0
檢查特性相容:如果資料庫中的預存程序、觸發器、視圖或函數中包含MySQL 8.0不支援的特性,請在升級前修改,否則會導致升級失敗。
檢查系統資料表依賴:檢查您的業務是否對MySQL 5.7系統資料表(sys、mysql、information_schema、performance_schema庫下的表)有依賴,由於MySQL 5.7中的部分系統資料表升級至8.0後會發生變化(如表被移除、表名變化、表結構變化等),若業務依賴這些發生變化的表,有可能出現錯誤。
檢查資料類型相容:RDS MySQL 8.0不再支援部分舊版本資料類型。如果表中欄位含有MySQL 8.0不支援的資料類型,需要在升級前通過
REPAIR TABLE
或邏輯匯出+匯入的方式修複。更多資訊請參見準備升級安裝。檢查
comment
取值:MySQL 8.0 20221231及之後小版本引入參數loose_upgrade_clear_invalid_comment
,該參數取值為ON
(預設值)時,在升級過程中會自動清空表、欄位、索引的注釋亂碼,避免升級失敗。因此,您需要在升級前確認資料庫表中的comment
取值是否存在亂碼,如果存在,comment
將被清空。檢查預存程序:如果資料庫中的預存程序或函數存在亂碼,請在升級前修正,以免導致升級失敗。
升級前測試與類比
文法測試:建議在升級前建立一個高版本RDS執行個體進行文法測試,避免低版本文法或特性在升級高版本後不支援。
類比升級:建議在升級前複製原執行個體,先使用複製執行個體進行升級測試,確認各項功能正常後再升級原執行個體。
升級後注意事項
恢複舊版本執行個體:支援使用舊版本雲端硬碟備份恢複舊版本執行個體,本地碟暫不支援。
恢複新版本執行個體:舊版本備份組無法用於恢複新版本執行個體,如需進行恢複操作,請使用執行個體升級後產生的備份組。
操作方式
以下資料庫版本升級情境中,您需要先進行升級前置檢查,檢查通過後再進行升級操作:
高可用系列本地SSD盤:5.6升級至5.7、5.7升級至8.0
高可用系列ESSD雲端硬碟:5.7升級至8.0
其它情境中您可以直接進行資料庫升級操作。
升級前置檢查通過後進行升級操作
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
單擊左側導覽列大版本升級,進入升級前置檢查。
在選擇升級版本右側的下拉框中,選擇需要升級的版本號碼,單擊建立升級檢查報告,報告詳情請參見大版本升級檢查報告說明。
待檢查報告檢測完畢,並確認升級無風險後,切換頁簽至升級執行個體。
在選擇升級版本右側的下拉框中,選擇需要升級的版本號碼,單擊升級執行個體。
在彈出的大版本升級執行個體中,確認升級的版本,選擇切換時間後,單擊立即升級。
直接升級
方式二:通過資料移轉DTS升級資料庫版本
對於不支援通過控制台直接升級的執行個體,您可以建立一個高資料庫版本的新執行個體,通過DTS資料移轉任務將原執行個體資料移轉至新執行個體中,實現資料庫的間接升級,相關步驟如下:
舉例:您有一個開啟了TDE功能的MySQL 5.7執行個體,其不能通過控制台直接升級資料庫版本。此時,您可以建立一個資料庫版本為MySQL 8.0的新執行個體,然後將原執行個體中的資料移轉至新執行個體,最後釋放原執行個體,實現資料庫版本的間接升級。
跨版本資料移轉後,請先測試相容性並觀察一段時間,確認正常後,再釋放原執行個體。
附錄一:MySQL 5.7升級MySQL 8.0的優勢
提高了安全性,並在帳號管理中實現了更大的靈活性。
支援資源群組的建立和管理。
InnoDB儲存引擎的功能增強。
新增字元集、資料類型、文法、新型備份鎖、optimizer_switch標誌等支援。
JSON、XML增強。
Optimizer最佳化器功能增強。
複製效能增強。
支援建立多值索引、派生條件下推最佳化。
支援讀取MySQL授權表。
支援資源分派控制。
附錄二:MySQL5.6升級MySQL 5.7的優勢
增加密碼管理、帳號鎖定、加密串連等功能,提高資料庫的安全性。
支援線上DDL操作。例如RENAME INDEX重新命名索引等。
改進了InnoDB引擎的可擴充性和暫存資料表的效能,實現更快的資料載入速度。
支援JSON。
支援針對分區表的索引條件下推(ICP),以及全新的InnoDB空間索引。
最佳化了大部分解析器、最佳化器和成本模型,提高資料庫的可維護性、可擴充性和效能。
擴充支援的字元集,包括中國國家標準規定的GB18030字元集。
提供ngram全文解析器外掛程式,支援中文、日文和韓文。
最佳化源轉儲線程,減少鎖的爭用,提高了源輸送量。
大幅改進了複寫延遲問題。
新增sys系統庫,提供多個監控項並減少儲存空間佔用,顯著提高資料庫的易用性。
附錄三:MySQL 8.0和MySQL 5.7版本功能差異列表
下表中僅列出MySQL 8.0與5.7的部分重要差異,其他各版本間差異,請參見MySQL Release Notes。
特性 | 5.7 | 8.0 |
GRANT ... IDENTIFIED BY PASSWORD文法 | 支援 | 不支援 |
PASSWORD()函數 | 支援 | 不支援 |
FLUSH QUERY CACHE、 RESET QUERY CACHE文法 | 支援 | 不支援 |
SQL_MODE系統變數的參數:DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS | 支援 | 不支援 |
GROUP BY文法預設自動排序 | 支援 | 不支援 |
包含EXTENDED或PARTITIONS關鍵字的相關文法 | 支援 | 不支援 |
ENCODE()、DECODE()、ENCRYPT()等加密函數 | 支援 | 不支援 |
空間分析相關函數。更多資訊,請參見官方文檔 | 支援 | 不支援 |
函數以前接受WKB值的字串或幾何參數,現在不再允許幾何參數 | 支援 | 不支援 |
將\N解析為NULL | 支援 | 不支援 |
PROCEDURE ANALYSE()函數 | 支援 | 不支援 |
通過NDB儲存引擎建立分區表 | 支援 | 不支援 |
通過InnoDB儲存引擎壓縮暫存資料表 | 支援 | 不支援 |
JSON_APPEND()函數 | 支援 | 不支援 |
在共用資料表空間中放置表分區的支援 | 支援 | 不支援 |
ALTER TABLE ... UPGRADE PARTITIONING文法 | 支援 | 不支援 |
附錄四:MySQL 5.7和MySQL 5.6版本功能差異列表
下表中僅列出MySQL 5.7與5.6的部分重要差異,其他各版本間差異,請參見MySQL Release Notes。
特性 | 5.6 | 5.7 |
GTID模式下的CREATE...AS SELECT | 支援 | 不支援 |
GTID模式下在事務中使用暫存資料表 | 支援 | 不支援 |
在分區表中指定分區鍵 | 支援 | 不支援 |
ENGINE_NO_CACHE文法 | 支援 | 不支援 |
不可見索引(Invisible Indexes) | 支援 | 不支援 |
UPDATE non_affected_rows INSERT文法 | 支援 | 不支援 |
Proxy相關命令 | 使用SET命令方式 | 使用Call Procedure模式 |
TokuDB、Sphinx、RocksDB和Memory引擎 | 支援 | 不支援 |
str_ord()函數 | 支援 | 不支援 |
raiseerror()函數 | 支援 | 不支援 |
OPTIMIZE TABLE table ASYNC | 支援 | 不支援 |
ENGINE_NO_CACHE | 支援 | 不支援 |
表INFORMATION.TABLE_UTILIZATION | 支援 | 不支援 |
表INFORMATION_SCHEMA.INNODB_LOCK_WAITS中的requesting_thd_id列和blocking_thd_id列 | 支援 | 不支援 |
表INFORMATION_SCHEMA.INNODB_RSEG | 支援 | 不支援 |
表INFORMATION_SCHEMA.INNODB_IO_STATUS | 支援 | 不支援 |
壓縮列功能 | 支援 | 不支援 |
Query Plan Cache | 支援 | 不支援 |
Limit + Union文法 | 不需要括弧 | 需要括弧 |
SHOW FULL PROCESSLIST文法 | MySQL 5.7返回結果刪除memory和query_memory列。 | |
max_statement_time和max_execution_time | MySQL 5.7刪除max_statement_time,只保留max_execution_time。 | |
RDS_SQL_MAX_AFFECTED文法 | MySQL 5.7不再支援通過RDS_SQL_MAX_AFFECTED限制單條UPDATE或DELETE影響的記錄數。通過變數rds_sql_max_affected_rows控制。 | |
並發效能最佳化調整 | MySQL 5.7不再支援通過如下參數進行並發控制:
| |
串連數變數的調整 | MySQL 5.7刪除如下變數:
| |
複製相關調整 |
| |
日誌相關調整 | MySQL 5.7錯誤記錄檔調整:
|
附錄五:MySQL 5.5和MySQL 5.6版本功能差異列表
下表中僅列出MySQL 5.5和5.6的部分重要差異,其他各版本間差異,請參見MySQL 5.6 Reference Manual。
特性 | MySQL 5.5 | MySQL 5.6 |
全文索引 | 不支援 | 支援 |
InnoDB online DDL | 不支援 | 部分支援 |
REDO | 最大支援4 GB | 最大支援512 GB |
刷髒 | 單線程 | 單獨的刷髒線程 |
purge | 單線程 | 多線程 |
EXCHANGE PARTITION | 不支援 | 支援 |
DML 顯式指定分區 | 不支援 | 支援 |
INFORMATION_SCHEMA | MySQL 5.6提供更多關於Buffer Pool資訊和表、索引、欄位等元資訊。 | |
PERFORMANCE_SCHEMA | MySQL 5.6中PFS增加了更多的監控資訊和查看形式。 | |
複製 | MySQL 5.6中複製增強和變更包括:
重要 RDS MySQL 5.5升級至5.6後,自動切換為基於GTID的複製模式。 | |
最佳化器 | MySQL 5.6增強了最佳化器能力,主要包括:
| |
不支援 | 支援 | |
不支援 | 支援 | |
不支援 | 支援 | |
不支援 | 支援 | |
不支援 | 支援 |
常見問題
Q:升級過程中,為什麼會出現執行個體切換?是否會有其他嚴重風險?
A:為保證業務穩定,本地SSD盤執行個體升級採用先備後主的方式,備執行個體升級完成後,業務自動切換至備執行個體。ESSD雲端硬碟執行個體升級採用建立節點的方式,新節點升級完成後,業務自動切換至新節點。無其他嚴重風險。主備切換的影響請參見主備切換的影響。
Q:升級時,主備執行個體會一起升級嗎?
A:本地SSD盤升級時,系統先行升級備執行個體,再升級主執行個體。
Q:MySQL 5.7基礎系列SSD雲端硬碟執行個體如何升級?
A:當前不支援該類型的執行個體升級。如您想升級MySQL 5.7基礎系列SSD雲端硬碟執行個體,您可以先將目標執行個體從基礎系列升級為高可用系列,並變更儲存類型,然後再升級資料庫版本。
Q:資料庫版本升級前後,參數模板是否保持一致?
A:RDS MySQL 5.7升級至RDS MySQL 8.0時,如果升級前執行個體為系統參數模板,升級後執行個體將設定為新版本對應的系統參數模板,如升級前為MySQL_InnoDB_5.7_高可用系列_高績效參數模板,升級後將設定為MySQL_InnoDB_8.0_高可用系列_高績效參數模板;如果升級前執行個體為使用者自訂參數模板,升級後參數模板將不會被保留。
Q:資料庫版本升級期間,是否能變更執行個體?
A:資料庫版本升級期間不支援變更執行個體,必須在版本升級完成後,才可以進行其他動作。
Q:資料庫版本是否支援自動升級?
A:暫不支援自動升級資料庫版本。
Q:資料庫版本是否支援降級?
A:不支援降級,包括升級後降級以及對原版本降級。
Q:RDS MySQL 5.6升級至RDS MySQL 5.7或RDS MySQL 5.7升級至RDS MySQL 8.0時,升級失敗,提示“當前執行個體有全文索引且小版本低於20221130,請先進行小版本升級後再進行刪除、重建全文索引”或“當前執行個體包含建立在系統資料表空間的全文索引,請刪除並重建相應全文索引後再進行升級操作”,問題原因和解決方案是什嗎?
A:問題原因和解決方案如下:
問題原因
由於MySQL的歷史原因,較低版本的MySQL 5.6在建立全文索引(Full-Text Index)時會建立在系統資料表空間(System Tablespace)之上。當升級到5.7或進一步升級到8.0後,建立在系統資料表空間的全文索引有機率會導致資料表空間損壞,因此需要在升級前進行處理,避免執行個體資料損毀和不可訪問等問題。
說明RDS MySQL 5.6 20221130對該問題進行了修複,全文索引將建立在單獨的資料表空間之上。
解決方案
重要老版本RDS MySQL 5.6全文索引會建立在系統資料表空間,因此需要確保升級至RDS MySQL 5.7前的版本是RDS MySQL 5.6 20221130或之後的版本。如您的版本較低,請先升級到最新的RDS MySQL 5.6版本。
根據提示中的表名,刪除建立在系統資料表空間的全文索引。
# 刪除全文索引 ALTER TABLE $table_name DROP INDEX $fts_name;
重新建立全文索引。
# 重新建立全文索引 ALTER TABLE $table_name ADD FULLTEXT INDEX $fts_name;
建立完索引後,可以使用如下SQL對當前執行個體的全文索引進行檢查。SQL會返回建立在系統資料表空間的全文索引,如查詢結果為空白,則RDS MySQL5.6升級至RDS MySQL5.7的過程中不會因為該問題而導致失敗。
# 查詢建立在系統資料表空間的全文索引 SELECT NAME FROM information_schema.INNODB_SYS_TABLES WHERE TABLE_ID IN ( SELECT CONV(SUBSTRING_INDEX(SUBSTRING_INDEX(NAME, '_', -4),'_', 1),16,10) FROM INNODB_SYS_TABLES WHERE NAME LIKE '%fts_00000000%' AND SPACE = 0);
相關API
API | 描述 |
升級RDS執行個體版本。 |