全部產品
Search
文件中心

ApsaraDB RDS:大版本升級檢查報告說明

更新時間:Sep 10, 2024

本文介紹RDS MySQL大版本升級檢查時的常見報錯資訊,並提供檢測項的內容詳情、可能原因以及解決方案。

以下報錯資訊為常見報錯,如遇其他報錯資訊請提工單諮詢。

檢測項

常見報錯

檢查內容

可能原因

解決方案

check_ins_major_version

Current engine version does not support operations.

檢查當前執行個體版本是否符合MySQL大版本升級的前提條件。

該執行個體版本不是5.6或5.7,並且升級方式不是5.6升級到5.7或5.7升級到8.0。

請參照MySQL大版本升級的前提條件進行操作。詳情請參見升級資料庫版本

check_ins

Specified instance does not exist or not support.

檢查當前執行個體是否存在。

執行個體不存在或已被刪除。

查看執行個體是否存在,使用已有的RDS MySQL執行個體進行檢查。

check_ins_status

Current DB instance state does not support this operation.

檢查執行個體狀態是否為運行中。

有其他相關操作(如重啟中,建立網路連接中等)進行中,導致執行個體狀態不為運行中。

請等待任務結束,執行個體狀態為運行中後,再發起資料庫大版本升級檢查。

check_master_ins

Current DB instance type does not support this operation.

檢查待升級執行個體是否為主執行個體。

待升級的執行個體為災備執行個體或者唯讀執行個體。

需要確保當前升級的執行個體為主執行個體。

check_ins_locked_state

Current DB instance lock mode does not support this operation.

檢查執行個體是否為鎖定狀態。

此執行個體狀態為“鎖定中”。

請先解鎖執行個體,等待目前狀態變為“運行中“,再進行升級檢查操作。具體解鎖資訊,請參見執行個體狀態顯示“鎖定中”時如何解決?

check_maxscale_kernel

The Maxscale version used by the instance is too low, please upgrade the Maxscale version first.

檢查資料庫代理中代理小版本是否支援。

執行個體使用了代理,代理的小版本低於1.13.41。

請先升級代理小版本至符合要求的版本後,再升級資料庫版本。詳情請參見升級資料庫代理核心小版本

check_ins_tde_state

Specified TDEStatus is not configured on the This custins.

檢查當前執行個體是否開啟TDE。

待檢查執行個體已開啟TDE。

執行個體開啟了TDE功能,則不支援通過控制台直接升級。更多資訊,請參見升級資料庫版本

check_target_ins_level

Current DB instance level does not support this operation.

校正當前執行個體規格是否為在售的規格。

當前執行個體規格已下線。

部分已下線的執行個體無法進行版本升級,請先進行規格升級。

check_target_read_level

The read-only instance level is not supported in the target instance.

校正當前唯讀執行個體規格是否為在售的規格。

唯讀執行個體規格已下線。

執行個體儲存為本地碟,請將當前唯讀執行個體變更至官方售賣的規格後,再進行檢查。

check_upgrade_check_task

The task already exists.

檢查當前執行個體是否存在大版本升級前置校正任務。

當前執行個體有大版本升級前置校正任務進行中中。

請等待前置校正任務完成,待執行個體狀態變為運行中後,再進行檢查。

check_upgrade_task

The task already exists.

檢查當前執行個體是否已存在大版本升級任務。

當前執行個體有大版本升級任務進行中。

請等待大版本升級任務完成,待執行個體狀態變為運行中後,再進行檢查。

check_storage _type

Cloud ssd does not support this operation, please upgrade to essd.

檢查當前執行個體儲存是否為SSD雲端硬碟。

當前執行個體儲存為SSD雲端硬碟。

請先升級儲存類型為ESSD雲端硬碟。詳情請參見升級SSD雲端硬碟至ESSD雲端硬碟

check_source_category

Specified source category is invalid.

檢查當前執行個體類型。

當前執行個體類型不屬於基礎系列或者高可用系列。

暫不支援非高可用系列或基礎系列的執行個體進行升級檢查。

check_ins_biz_type

Specified biz type is not valid.

檢查當前執行個體是否屬於公用雲。

當前執行個體不屬於公用雲。

目前只支援針對公用雲執行個體進行升級檢查。

check_ins_tables_number

Upgrade not allowed due to excessive number of tables: more than 200,000.

Upgrade not allowed due to excessive number of tables: more than 50,000.

檢查執行個體的資料表數量。

  • 本地碟執行個體的資料表數量超過20W,不支援升級。

  • 雲端硬碟執行個體的資料表數量超過30W,不支援升級。

請在升級檢查前清理冗餘的資料表。

check_ins_db_engine

There are engines present such as MyISAM, Memory, TokuDB, Sphinx, or RocksDB.

檢查執行個體資料庫中是否有MyISAM、Memory,TokuDB,Sphinx或RocksDB引擎

資料庫執行個體中使用了MyISAM、Memory、TokuDB、Sphinx或RocksDB引擎,不支援升級。

請先將資料庫引擎轉換為InnoDB引擎。如果您的資料庫已是InnoDB引擎,但部分表仍是其他引擎,請使用ALTER TABLE <表名> engine=InnoDB;命令,將錶轉換為InnoDB引擎後,再進行升級。

check_ins_fts

The current instance has an FTS index, and the minor version is less than 20221130.

檢查執行個體資料庫中是否具有Fts索引,且小版本是否低於20221130。

  • 由於MySQL歷史原因,全文索引可能建立在系統資料表空間上。大版本升級時,這些索引可能導致資料表空間損壞。為避免資料損毀,應在升級前處理這些索引。

  • RDS MySQL 5.6 20221130對該問題進行了修複,全文索引將建立在單獨的資料表空間之上。

RDS MySQL的5.6版本中,全文索引會建立在系統資料表空間。因此,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 MySQL 5.6升級至RDS MySQL 5.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);

check_read_ins_number

The number of read-only instances cannot be greater than 8.

檢查本地碟的唯讀執行個體數量不能大於8。

當前本地碟執行個體中唯讀執行個體數量大於8。

釋放掉多餘的唯讀執行個體,待升級完成後再建立。

check_slave_state

The slave status is unhealthy or has delays.

檢查備節點狀態以及時延資訊。

備節點狀態可能非正常或存在延遲。

可以通過控制台監控與警示功能查看節點複製線程狀態(單位:秒)和節點複寫延遲(單位:秒)的監控指標,待備節點狀態恢複正常後進行檢查。

check_account

The instance has an aliyun_root account.

檢查賬戶。

RDS MySQL 5.6中存在使用者手動建立的aliyun_root賬戶。

RDS MySQL 5.7以上版本添加aliyun_root為預設賬戶,5如果使用者在5.6版本手動建立了aliyun_root賬戶後,升級到5.7時會報同名錯誤,需提前刪除或修改aliyun_root賬戶,再進行升級檢查。更多資訊,請參見系統帳號說明

check_sys_schema

The instance already has a sys database.

檢查執行個體中是否存在sys庫。

RDS MySQL 5.7中,預設是存在sys庫的,如果RDS MySQL 5.6存在sys庫,這將導致5.6升級到5.7的過程失敗。

如果存在sys庫,則需要使用者將sys庫做重新命名(由於MySQL不支援RENAME DATABASE,因此需要手動逐個執行ALTER TABLE RENAME)。

SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='sys';

check_table_discard

There are tables that have been discarded.

檢查執行個體中是否存在discarded的表(即做過ALTER TABLE discard TABLESPACE 操作).

執行個體中存在discarded的表。

查詢並刪除discarded的表。

SELECT space,name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FS_BLOCK_SIZE=0 AND FILE_SIZE=0 AND name NOT LIKE '%#sql%';

check_table_foreign_key

The partitioned table contains foreign keys.

檢查執行個體中分區表是否包含外鍵。

有包含外鍵或者被其他表外鍵引用的分區表。

需要使用者解決表中外鍵和分區表的衝突。

  1. 查詢包含外鍵的分區表。

    SELECT DISTINCT a.TABLE_SCHEMA, a.TABLE_NAME
    FROM information_schema.TABLE_CONSTRAINTS a, information_schema.PARTITIONS b
    WHERE a.CONSTRAINT_TYPE='FOREIGN KEY'
    AND a.TABLE_SCHEMA = b.TABLE_SCHEMA
    AND a.TABLE_NAME = b.TABLE_NAME
    AND (b.PARTITION_NAME IS NOT NULL OR b.SUBPARTITION_NAME IS NOT NULL);
  2. 查詢被其他表外鍵引用的分區表。

    SELECT DISTINCT a.TABLE_SCHEMA, a.TABLE_NAME, a.REFERENCED_TABLE_SCHEMA, a.REFERENCED_TABLE_NAME
    FROM information_schema.KEY_COLUMN_USAGE a, information_schema.PARTITIONS b
    WHERE a.REFERENCED_TABLE_SCHEMA = b.TABLE_SCHEMA
    AND a.REFERENCED_TABLE_NAME = b.TABLE_NAME
    AND (b.PARTITION_NAME IS NOT NULL OR b.SUBPARTITION_NAME IS NOT NULL);

check_column_length

The number of views with column length greater than or equal to 64 is greater than 0.

檢查執行個體中列長度大於或等於64的view數量。

不支援列長度大於或等於64的view數量大於0。

查詢後刪除多餘view或修改對應列長度。

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS) AND CHAR_LENGTH(COLUMN_NAME) >= 64;

check_foreign_key_constraint

The number of tables with foreign key constraint length greater than 64 is greater than 0.

檢查執行個體中外鍵約束長度大於64的表數量。

外鍵約束長度大於64的表數量大於0。

查詢並刪除相關表或者修改外鍵約束長度。

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1) FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE CHAR_LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);

check_dictionary_table

In the MySQL 5.7 system database, there cannot be tables with the same name as those used by the MySQL 8.0 data dictionary.

檢查5.7系統資料庫中的表與8.0資料字典所使用的表是否存在同名。

5.7資料庫中存在與8.0資料字典中相同的表名。

查詢5.7系統資料庫中與8.0資料字典使用的表是否有同名後,刪除或者修改掉相同名稱的表。

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(
TABLE_SCHEMA) = 'mysql' and LOWER(TABLE_NAME) IN
('catalogs', 'character_sets', 'check_constraints', 'collations',
'column_statistics', 'column_type_elements', 'columns',
'dd_properties', 'events', 'foreign_key_column_usage', 'foreign_keys',
'index_column_usage', 'index_partitions', 'index_stats',
'indexes', 'parameter_type_elements', 'parameters', 'resource_groups', 'routines',
'schemata', 'st_spatial_reference_systems',
'table_partition_values', 'table_partitions', 'table_stats', 'tables',
'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage',
'view_table_usage');

check_ins_health

The master node of the instance is not available.

檢驗執行個體是否可用(連通性)。

CPU、磁碟等都已被打滿。

您可通過控制台監控與警示功能查看各項監控指標是否正常。詳情請參見監控與警示

check_read_ins_exists

Instances with read-only do not support this operation.

校正雲端硬碟5.7中是否有隻讀執行個體。

雲端硬碟升級操作,暫不支援主執行個體包含唯讀執行個體。

釋放掉唯讀執行個體,升級成功後再建立。

check_table_index_type

MySQL 8.0 does not support creating BTREE indexes on spatial fields.

RDS MySQL 5.7升級8.0過程中,5.7版本的spatial類型是否包含BTREE索引。

RDS MySQL 8.0不支援spatial類型建立BTREE索引。

需要刪掉或者修改不支援的索引,操作如下:

SELECT DISTINCT s.* FROM INFORMATION_SCHEMA.STATISTICS s
INNER JOIN INFORMATION_SCHEMA.COLUMNS c
ON s.TABLE_SCHEMA = c.TABLE_SCHEMA
AND s.TABLE_NAME = c.TABLE_NAME
AND s.COLUMN_NAME = c.COLUMN_NAME
WHERE s.TABLE_SCHEMA NOT IN ('mysql', 'sys')
AND c.DATA_TYPE IN ('GEOMETRY', 'POINT', 'LINESTRING', 'POLYGON', 'MULTIPOINT', 
'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION')
AND s.INDEX_TYPE = 'BTREE';