全部產品
Search
文件中心

ApsaraDB RDS:升級資料庫版本

更新時間:Sep 07, 2024

RDS MySQL提供了兩種方式升級資料庫版本,您可以通過控制台直接升級資料庫,也可以新購一個高版本MySQL執行個體,通過DTS資料移轉任務將原執行個體資料移轉至新執行個體中,實現資料庫版本的間接升級。

選擇升級方式

在升級資料庫前,您需要通過以下內容選擇合適的升級方式:

  • 執行個體規格符合以下四種類型,且執行個體配置滿足對應類型的要求,建議通過方式一:通過控制台直接升級資料庫版本

    叢集系列 ESSD雲端硬碟

    • 組複製限制:不支援使用組複製(MGR)的叢集系列執行個體升級。

    • 資料庫代理限制(如有):資料庫代理小版本不低於1.13.41。

    • 執行個體狀態限制:執行個體狀態為運行中,主備節點狀態健康且無延遲。

    • 引擎節流:資料庫及所有庫表都為InnoDB引擎。

    • 不屬於已下線的歷史規格,詳情請參見歷史規格

    高可用系列 ESSD雲端硬碟

    • 資料庫代理限制(如有):資料庫代理小版本不低於1.13.41。

    • 執行個體狀態限制:執行個體狀態為運行中,主備節點狀態健康且無延遲。

    • 引擎節流:資料庫及所有庫表都為InnoDB引擎。

    • 不屬於已下線的歷史規格,詳情請參見歷史規格

    高可用系列 本地SSD盤

    • 加密限制:未開啟TDE加密功能(TDE開啟後不支援關閉,如已開啟TDE,請選擇方式二:通過資料移轉DTS升級資料庫版本進行升級)。

    • 唯讀執行個體限制(如有):所有隻讀執行個體規格碼一致(唯讀執行個體和主執行個體間不做要求)且唯讀執行個體數量不超過8個。

    • 資料庫代理限制(如有):資料庫代理小版本不低於1.13.41。

    • 執行個體狀態限制:執行個體狀態為運行中,主備節點狀態健康且無延遲。

    • 表數量限制:不超過20萬張。

    • 引擎節流:資料庫及所有庫表都為InnoDB引擎。

    • 不屬於已下線的歷史規格,詳情請參見歷史規格

    基礎系列 ESSD雲端硬碟

    • 執行個體狀態限制:執行個體狀態為運行中

    • 引擎節流:資料庫及所有庫表都為InnoDB引擎。

    • 不屬於已下線的歷史規格,詳情請參見歷史規格

其它引擎升級資料庫版本請參見:

方式一:通過控制台直接升級資料庫版本

準備工作

  1. 瞭解新舊版本差異與優勢

  2. 瞭解升級過程與影響

    • 版本跨度:RDS MySQL控制台不支援跨大版本升級,升級後不支援降級。例如:MySQL 5.6無法直接升級至MySQL 8.0,需要先升級到MySQL 5.7,再升級到MySQL 8.0。

    • 本地SSD盤執行個體升級過程:系統先升級備執行個體,完成後進行主備切換,再升級主執行個體。升級過程將造成30秒至1分鐘的業務中斷,請您盡量在業務低峰期執行升級操作。

    • ESSD雲端硬碟執行個體升級過程:系統先建立新節點,並在新節點上執行升級,在新節點升級完成後鏈路將切換至新節點。升級過程中,將造成30秒至1分鐘的業務中斷,請您盡量在業務低峰期執行升級操作。

  3. 檢查執行個體與資料庫配置

    • 檢查保留關鍵字:查看自訂函數,確保函數中沒有使用保留關鍵字

    • 檢查全量備份:檢查最近一周是否有全量資料備份的成功記錄,必要時請進行一次全量資料備份。

    • 檢查自動重連機制:在資料庫升級過程中,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不再支援的舊的資料類型(如old style decimals, old style varchar, old style TIMEDATETIMETIMESTAMP等),問題表需要在升級前通過REPAIR TABLE或邏輯匯出+匯入的方式做修複。更多資訊請參見準備升級安裝

      • 檢查comment取值:MySQL 8.0 20221231及之後小版本引入參數loose_upgrade_clear_invalid_comment,該參數取值為ON(預設值)時,在升級過程中會自動清空表、欄位、索引的注釋亂碼,避免升級失敗。因此,您需要在升級前確認資料庫表中的comment取值是否存在亂碼,如果存在,comment將被清空。

  4. 升級前測試與類比

    • 文法測試:建議在升級前建立一個高版本RDS執行個體進行文法測試,避免低版本文法或特性在升級高版本後不支援。

    • 類比升級:建議在升級前複製原執行個體,先使用複製執行個體進行升級測試,確認各項功能正常後再升級原執行個體。

  5. 升級後注意事項

    • 恢複舊版本執行個體:支援使用舊版本雲端硬碟備份恢複舊版本執行個體,本地碟暫不支援。

    • 恢複新版本執行個體:舊版本備份組無法用於恢複新版本執行個體,如需進行恢複操作,請使用執行個體升級後產生的備份組。

操作方式

以下資料庫版本升級情境中,您需要先進行升級前置檢查,檢查通過後再進行升級操作

  • 高可用系列本地SSD盤:5.6升級至5.7、5.7升級至8.0

  • 高可用系列ESSD雲端硬碟:5.7升級至8.0

其它情境中您可以直接進行資料庫升級操作

升級前置檢查通過後進行升級操作

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 單擊左側導覽列大版本升級,進入升級前置檢查

  3. 選擇升級版本右側的下拉框中,選擇需要升級的版本號碼,單擊建立升級檢查報告,報告詳情請參見大版本升級檢查報告說明

    image

  4. 待檢查報告檢測完畢,並確認升級無風險後,切換頁簽至升級執行個體

  5. 選擇升級版本右側的下拉框中,選擇需要升級的版本號碼,單擊升級執行個體

    image

  6. 在彈出的大版本升級執行個體中,確認升級的版本,選擇切換時間後,單擊立即升級

    image

直接升級

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 配置資訊地區單擊升級資料庫版本

    說明

    如果未找到該入口,請確認執行個體版本是否符合升級的要求。

  3. 在彈出的對話方塊中,選擇立即切換在可維護時間段內進行切換,並單擊確定

    • 立即切換:立即開始升級。

    • 在可維護時間段內進行切換:在可維護時間段升級。您也可以單擊可維護時間段右側的設定快速修改可維護時間段。

    說明

    升級過程中,執行個體的狀態為遷移版本中

方式二:通過資料移轉DTS升級資料庫版本

對於不支援通過控制台直接升級的執行個體,您可以建立一個高資料庫版本的新執行個體,通過DTS資料移轉任務將原執行個體資料移轉至新執行個體中,實現資料庫的間接升級,相關步驟如下:

  1. 建立新執行個體

  2. 資料移轉至新執行個體

  3. 釋放原執行個體

舉例:您有一個開啟了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 CACHERESET QUERY CACHE文法

支援

不支援

SQL_MODE系統變數的參數:DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS

支援

不支援

GROUP BY文法預設自動排序

支援

不支援

包含EXTENDEDPARTITIONS關鍵字的相關文法

支援

不支援

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返回結果刪除memoryquery_memory列。

max_statement_timemax_execution_time

MySQL 5.7刪除max_statement_time,只保留max_execution_time

RDS_SQL_MAX_AFFECTED文法

MySQL 5.7不再支援通過RDS_SQL_MAX_AFFECTED限制單條UPDATEDELETE影響的記錄數。通過變數rds_sql_max_affected_rows控制。

並發效能最佳化調整

MySQL 5.7不再支援通過如下參數進行並發控制:

  • innodb_adaptive_tickets_algo

  • innodb_min_concurrency_tickets

  • rds_threads_running_ctl_mode

  • rds_threads_running_high_watermark

  • rds_filter_key_cmp_in_order

  • rds_reset_all_filter

  • rds_sql_delete_filter

  • rds_sql_select_filter

  • rds_sql_update_filter

  • rds_strict_concurrency

  • rds_thread_extra_concurrency

  • rds_strict_trx_idle_timeout

  • rds_sql_buf_read_bandwidth

  • rds_sql_buf_read_threshold_bytes

  • rds_sql_buf_write_bandwidth

  • rds_sql_buf_write_threshold_bytes

  • rds_sql_max_iops

串連數變數的調整

MySQL 5.7刪除如下變數:

  • extra_max_connections

  • rds_root_connections

  • rds_sysinfo_connections

  • rds_sysinfo_user_list

複製相關調整

  • MySQL 5.7相容性調整:

    • 不再支援GTID和非GTID之間的複製。

    • sql_slave_skip_counter不能再用於GTID。

    • 不再支援CREATE .... SELECT

  • MySQL 5.7 slave相關調整:

    • SHOW SLAVE LAG不再支援。

    • SHOW SLAVE STATUS不再支援逾時。

    • SHOW SLAVE STATUS顯示的資訊變少。

    • slave的sql_thread不再支援執行逾時。

    • slave的sql_thread不再支援跳過某些語句。

  • MySQL 5.7 Binlog調整:

    • 不再支援傳輸速度調整。

    • 不再支援rds_rpl_receive_buffer_difftime

    • 不再支援rds_rpl_receive_buffer_size

日誌相關調整

MySQL 5.7錯誤記錄檔調整:

  • 不再記錄SHUTDOWN的IP、user和io/net latency。

  • 不再支援Duplicate key顯示錶名。

常見問題

  • 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版本。

      1. 根據提示中的表名,刪除建立在系統資料表空間的全文索引。

        # 刪除全文索引
        ALTER TABLE $table_name DROP INDEX $fts_name;
      2. 重新建立全文索引。

        # 重新建立全文索引
        ALTER TABLE $table_name ADD FULLTEXT INDEX $fts_name;
      3. 建立完索引後,可以使用如下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 MySQL升級資料庫大版本

升級RDS執行個體版本。