Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Référence des vérifications préalables avec description pour Aurora MySQL
Les vérifications préalables de mise à niveau pour Aurora MySQL sont décrites ici en détail.
Table des matières
Erreurs
Les vérifications préalables suivantes génèrent des erreurs lorsque la vérification préalable échoue et que la mise à niveau ne peut pas avoir lieu.
Rubriques
Vérifications préalables de MySQL qui signalent des erreurs
Les vérifications préalables suivantes sont tirées de Community MySQL :
- checkTableMysqlSchema
-
Niveau de vérification préalable : erreur
Problèmes signalés par la commande
check table x for upgradepour le schémamysqlAvant de démarrer la mise à niveau vers Aurora MySQL version 3,
check table for upgradeest exécuté sur chaque table du schémamysqlde l’instance de base de données. La commandecheck table for upgradeexamine les tables pour détecter tout problème potentiel pouvant survenir lors d’une mise à niveau vers une version plus récente de MySQL. L’exécution de cette commande avant de tenter une mise à niveau contribue à identifier et à résoudre les incompatibilités à l’avance, ce qui facilite le processus de mise à niveau réel.Cette commande effectue différentes vérifications sur chaque table, telles que les suivantes :
-
Vérification de la compatibilité de la structure et des métadonnées de la table avec la version MySQL cible
-
Identification des fonctionnalités obsolètes ou supprimées qui sont utilisées par la table
-
Confirmation de la possibilité de mettre à niveau la table sans perte de données
Pour plus d’informations, consultez Instruction CHECK TABLE
dans la documentation MySQL. Exemple de sortie :
{ "id": "checkTableMysqlSchema", "title": "Issues reported by 'check table x for upgrade' command for mysql schema.", "status": "OK", "detectedProblems": [] }Le résultat de cette vérification préalable dépend de l’erreur rencontrée et du moment où elle est détectée, car
check table for upgradeeffectue plusieurs vérifications.Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’AWS Support
pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3. -
- circularDirectoryCheck
-
Niveau de vérification préalable : erreur
Références circulaires à des répertoires dans les chemins de fichiers de données des espaces de table
Depuis MySQL 8.0.17
, la clause CREATE TABLESPACE ... ADD DATAFILEn’autorise plus les références circulaires à des répertoires. Pour éviter les problèmes de mise à niveau, supprimez toutes les références circulaires à des répertoires dans les chemins de fichiers de données des espaces de table avant de passer à Aurora MySQL version 3.Exemple de sortie :
{ "id": "circularDirectory", "title": "Circular directory references in tablespace data file paths", "status": "OK", "description": "Error: Following tablespaces contain circular directory references (e.g. the reference '/../') in data file paths which as of MySQL 8.0.17 are not permitted by the CREATE TABLESPACE ... ADD DATAFILE clause. An exception to the restriction exists on Linux, where a circular directory reference is permitted if the preceding directory is a symbolic link. To avoid upgrade issues, remove any circular directory references from tablespace data file paths before upgrading.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-innodb-changes", "detectedProblems": [ { "level": "Error", "dbObject": "ts2", "description": "circular reference in datafile path: '/home/ec2-user/dbdata/mysql_5_7_44/../ts2.ibd'", "dbObjectType": "Tablespace" } ] }Si vous recevez cette erreur, reconstruisez vos tables à l’aide d’un espace de table de fichier par table
. Utilisez les chemins de fichier par défaut pour tous les espaces de table et toutes les définitions de tables. Note
Aurora MySQL ne prend pas en charge les espaces de table généraux ni les commandes
CREATE TABLESPACE.Avant de reconstruire les espaces de table, consultez Online DDL operations
dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan. Après la reconstruction, la vérification préalable aboutit, ce qui permet à la mise à niveau d’avoir lieu.
{ "id": "circularDirectoryCheck", "title": "Circular directory references in tablespace data file paths", "status": "OK", "detectedProblems": [] }, - columnsWhichCannotHaveDefaultsCheck
-
Niveau de vérification préalable : erreur
Colonnes ne pouvant pas avoir de valeur par défaut
Avant MySQL 8.0.13, les colonnes
BLOB,TEXT,GEOMETRYetJSONne pouvaient pas avoir de valeur par défaut. Supprimez toutes les clauses par défaut sur ces colonnes avant de procéder à la mise à niveau vers Aurora MySQL version 3. Pour plus d’informations sur les modifications apportées à la gestion par défaut de ces types de données, consultez Valeurs par défaut des types de données dans la documentation MySQL. Exemple de sortie :
{ "id": "columnsWhichCannotHaveDefaultsCheck", "title": "Columns which cannot have default values", "status": "OK", "description": "Error: The following columns are defined as either BLOB, TEXT, GEOMETRY or JSON and have a default value set. These data types cannot have default values in MySQL versions prior to 8.0.13, while starting with 8.0.13, the default value must be specified as an expression. In order to fix this issue, please use the ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT statement.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit", "detectedProblems": [ { "level": "Error", "dbObject": "test.test_blob_default.geo_col", "description": "geometry" } ] },La vérification préalable renvoie une erreur, car la colonne
geo_colde la tabletest.test_blob_defaultutilise un type de donnéesBLOB,TEXT,GEOMETRYouJSONavec une valeur par défaut spécifiée.En regardant la définition de la table, nous pouvons voir que la colonne
geo_colest définie commegeo_col geometry NOT NULL default ''.mysql> show create table test_blob_default\G *************************** 1. row *************************** Table: test_blob_default Create Table: CREATE TABLE `test_blob_default` ( `geo_col` geometry NOT NULL DEFAULT '' ) ENGINE=InnoDB DEFAULT CHARSET=latin1Supprimez cette clause par défaut pour permettre à la vérification préalable d’aboutir.
Note
Avant d’exécuter des instructions
ALTER TABLEou de reconstruire des espaces de table, consultez Opérations DDL en lignedans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan. mysql> ALTER TABLE test_blob_default modify COLUMN geo_col geometry NOT NULL; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table test_blob_default\G *************************** 1. row *************************** Table: test_blob_default Create Table: CREATE TABLE `test_blob_default` ( `geo_col` geometry NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)La vérification préalable aboutit. Vous pouvez donc réessayer la mise à niveau.
{ "id": "columnsWhichCannotHaveDefaultsCheck", "title": "Columns which cannot have default values", "status": "OK", "detectedProblems": [] }, - depreciatedSyntaxCheck
-
Niveau de vérification préalable : erreur
Utilisation de mots clés dépréciés dans la définition
MySQL 8.0 a supprimé le cache de requêtes
. Par conséquent, certaines syntaxes SQL spécifiques au cache de requêtes ont été supprimées. Si l’un des objets de votre base de données contient les mots clés QUERY CACHE,SQL_CACHEouSQL_NO_CACHE, une erreur de vérification préalable est renvoyée. Pour résoudre ce problème, recréez ces objets en supprimant les mots clés mentionnés.Exemple de sortie :
{ "id": "depreciatedSyntaxCheck", "title": "Usage of depreciated keywords in definition", "status": "OK", "description": "Error: The following DB objects contain keywords like 'QUERY CACHE', 'SQL_CACHE', 'SQL_NO_CACHE' which are not supported in major version 8.0. It is recommended to drop these DB objects or rebuild without any of the above keywords before upgrade.", "detectedProblems": [ { "level": "Error", "dbObject": "test.no_query_cache_check", "description": "PROCEDURE uses depreciated words in definition" } ] }La vérification préalable indique que la procédure stockée
test.no_query_cache_checkutilise l’un des mots clés supprimés. En regardant la définition de la procédure, nous pouvons voir qu’elle utiliseSQL_NO_CACHE.mysql> show create procedure test.no_query_cache_check\G *************************** 1. row *************************** Procedure: no_query_cache_check sql_mode: Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`() BEGIN SELECT SQL_NO_CACHE k from sbtest1 where id > 10 and id < 20 group by k asc; END character_set_client: utf8mb4 collation_connection: utf8mb4_0900_ai_ci Database Collation: latin1_swedish_ci 1 row in set (0.00 sec)Supprimez le mot clé.
mysql> drop procedure test.no_query_cache_check; Query OK, 0 rows affected (0.01 sec) mysql> delimiter // mysql> CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`() BEGIN SELECT k from sbtest1 where id > 10 and id < 20 group by k asc; END// Query OK, 0 rows affected (0.00 sec) mysql> delimiter ;Une fois le mot clé supprimé, la vérification préalable aboutit.
{ "id": "depreciatedSyntaxCheck", "title": "Usage of depreciated keywords in definition", "status": "OK", "detectedProblems": [] } - engineMixupCheck
-
Niveau de vérification préalable : erreur
Tables reconnues par InnoDB et qui appartiennent à un autre moteur
Semblable à schemaInconsistencyCheck, cette vérification préalable s’assure que les métadonnées des tables dans MySQL sont cohérentes avant de procéder à la mise à niveau.
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’AWS Support
pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3. Exemple de sortie :
{ "id": "engineMixupCheck", "title": "Tables recognized by InnoDB that belong to a different engine", "status": "OK", "description": "Error: Following tables are recognized by InnoDB engine while the SQL layer believes they belong to a different engine. Such situation may happen when one removes InnoDB table files manually from the disk and creates e.g. a MyISAM table with the same name.\n\nA possible way to solve this situation is to e.g. in case of MyISAM table:\n\n1. Rename the MyISAM table to a temporary name (RENAME TABLE).\n2. Create some dummy InnoDB table (its definition does not need to match), then copy (copy, not move) and rename the dummy .frm and .ibd files to the orphan name using OS file commands.\n3. The orphan table can be then dropped (DROP TABLE), as well as the dummy table.\n4. Finally the MyISAM table can be renamed back to its original name.", "detectedProblems": [ { "level": "Error", "dbObject": "mysql.general_log_backup", "description": "recognized by the InnoDB engine but belongs to CSV" } ] } - enumSetElementLengthCheck
-
Niveau de vérification préalable : erreur
Définitions de colonnes
ENUMetSETcontenant des éléments de plus de 255 caractèresLes tables et les procédures stockées ne doivent pas comporter d’éléments de colonne
ENUMouSETde plus de 255 caractères ou 1 020 octets. Avant MySQL 8.0, la longueur combinée maximale était de 64K, mais la version 8.0 limite les éléments individuels à 255 caractères ou 1 020 octets (en prenant en charge les multioctets). En cas d’échec de la vérification préalable pourenumSetElementLengthCheck, modifiez tous les éléments dépassant ces nouvelles limites avant de réessayer la mise à niveau.Exemple de sortie :
{ "id": "enumSetElementLengthCheck", "title": "ENUM/SET column definitions containing elements longer than 255 characters", "status": "OK", "description": "Error: The following columns are defined as either ENUM or SET and contain at least one element longer that 255 characters. They need to be altered so that all elements fit into the 255 characters limit.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html", "detectedProblems": [ { "level": "Error", "dbObject": "test.large_set.s", "description": "SET contains element longer than 255 characters" } ] },La vérification préalable signale une erreur, car la colonne
sdans la tabletest.large_setcontient un élémentSETde plus de 255 caractères.Après avoir réduit la taille
SETde cette colonne, la vérification préalable aboutit, ce qui permet à la mise à niveau d’avoir lieu.{ "id": "enumSetElementLenghtCheck", "title": "ENUM/SET column definitions containing elements longer than 255 characters", "status": "OK", "detectedProblems": [] }, - foreignKeyLengthCheck
-
Niveau de vérification préalable : erreur
Noms de contrainte de clé étrangère dépassant 64 caractères
Dans MySQL, la longueur des identifiants est limitée à 64 caractères, comme indiqué dans la documentation MySQL
. En raison de problèmes identifiés où la longueur des clés étrangères pouvait être égale ou supérieure à cette valeur, entraînant des échecs de mise à niveau, cette vérification préalable a été mise en œuvre. Si vous rencontrez des erreurs lors de cette vérification préalable, vous devez modifier ou renommer votre contrainte afin qu’elle comporte moins de 64 caractères avant de réessayer la mise à niveau. Exemple de sortie :
{ "id": "foreignKeyLength", "title": "Foreign key constraint names longer than 64 characters", "status": "OK", "detectedProblems": [] } - getDuplicateTriggers
-
Niveau de vérification préalable : erreur
Tous les noms de déclencheurs d’une base de données doivent être uniques.
En raison des modifications apportées à l’implémentation du dictionnaire de données, MySQL 8.0 ne prend pas en charge les déclencheurs sensibles à la casse dans une base de données. Cette vérification préalable s’assure que votre cluster de bases de données ne possède pas de bases de données contenant des déclencheurs dupliqués. Pour plus d’informations, consultez Sensibilité à la casse des identifiants
dans la documentation MySQL. Exemple de sortie :
{ "id": "getDuplicateTriggers", "title": "MySQL pre-checks that all trigger names in a database are unique or not.", "status": "OK", "description": "Error: You have one or more database containing duplicate triggers. Mysql 8.0 does not support case sensitive triggers within a database https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html. To upgrade to MySQL 8.0, drop the triggers with case-insensitive duplicate names and recreate with distinct names.", "detectedProblems": [ { "level": "Error", "dbObject": "test", "description": "before_insert_product" }, { "level": "Error", "dbObject": "test", "description": "before_insert_PRODUCT" } ] }La vérification préalable signale une erreur indiquant que le cluster de bases de données a deux déclencheurs portant le même nom, mais dans avec une casse différente :
test.before_insert_productettest.before_insert_PRODUCT.Avant la mise à niveau, renommez les déclencheurs, ou supprimez-les et recréez-les sous un nouveau nom.
Une fois que le nom
test.before_insert_PRODUCTest remplacé partest.before_insert_product_2, la vérification préalable aboutit.{ "id": "getDuplicateTriggers", "title": "MySQL pre-checks that all trigger names in a database are unique or not.", "status": "OK", "detectedProblems": [] } - getEventsWithNullDefiner
-
Niveau de vérification préalable : erreur
La colonne DEFINER pour
mysql.eventne peut pas être nulle ou vide.L’attribut
DEFINERindique le compte MySQL qui possède une définition d’objet stockée, telle qu’un déclencheur, une procédure stockée ou un événement. Cet attribut est particulièrement utile dans les situations où vous souhaitez contrôler le contexte de sécurité dans lequel s’exécute l’objet stocké. Lorsque vous créez un objet stocké, siDEFINERn’est pas spécifié, sa valeur par défaut est l’utilisateur qui a créé l’objet.Lors de la mise à niveau vers MySQL 8.0, vous ne pouvez stocker aucun objet contenant un attribut DEFINER
nullou vide dans le dictionnaire de données MySQL. Si vous avez des objets stockés de ce type, une erreur de vérification préalable sera générée. Vous devrez la corriger avant de pouvoir procéder à la mise à niveau.Exemple d’erreur :
{ "id": "getEventsWithNullDefiner", "title": "The definer column for mysql.event cannot be null or blank.", "status": "OK", "description": "Error: Set definer column in mysql.event to a valid non-null definer.", "detectedProblems": [ { "level": "Error", "dbObject": "test.get_version", "description": "Set definer for event get_version in Schema test" } ] }La vérification préalable renvoie une erreur pour l’événement
test.get_version, car celui-ci possède un attribut DEFINERnull.Pour résoudre ce problème, vous pouvez vérifier la définition de l’événement. Comme vous pouvez le constater, l’attribut DEFINER est
nullou vide.mysql> select db,name,definer from mysql.event where name='get_version'; +------+-------------+---------+ | db | name | definer | +------+-------------+---------+ | test | get_version | | +------+-------------+---------+ 1 row in set (0.00 sec)Supprimez ou recréez l’événement avec un attribut DEFINER valide.
Note
Avant de supprimer ou de redéfinir un
DEFINER, examinez attentivement votre demande et vérifiez les exigences en matière de privilèges. Pour plus d’informations, consultez Stored object access controldans la documentation MySQL. mysql> drop event test.get_version; Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ; mysql> delimiter $$ mysql> CREATE EVENT get_version -> ON SCHEDULE -> EVERY 1 DAY -> DO -> ///DO SOMETHING // -> $$ Query OK, 0 rows affected (0.01 sec) mysql> DELIMITER ; mysql> select db,name,definer from mysql.event where name='get_version'; +------+-------------+------------+ | db | name | definer | +------+-------------+------------+ | test | get_version | reinvent@% | +------+-------------+------------+ 1 row in set (0.00 sec)Maintenant, la vérification préalable aboutit.
{ "id": "getEventsWithNullDefiner", "title": "The definer column for mysql.event cannot be null or blank.", "status": "OK", "detectedProblems": []}, - getMismatchedMetadata
-
Niveau de vérification préalable : erreur
Incompatibilité de définition de colonne entre le dictionnaire de données InnoDB et la définition réelle de la table
Semblable à schemaInconsistencyCheck, cette vérification préalable s’assure que les métadonnées des tables dans MySQL sont cohérentes avant de procéder à la mise à niveau. Dans ce cas, la vérification préalable s’assure que les définitions de colonnes correspondent entre le dictionnaire de données InnoDB et la définition de table MySQL. Si une incompatibilité est détectée, la mise à niveau n’a pas lieu.
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’AWS Support
pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3. Exemple de sortie :
{ "id": "getMismatchedMetadata", "title": "Column definition mismatch between InnoDB Data Dictionary and actual table definition.", "status": "OK", "description": "Error: Your database has mismatched metadata. The upgrade to mysql 8.0 will not succeed until this is fixed.", "detectedProblems": [ { "level": "Error", "dbObject": "test.mismatchTable", "description": "Table `test/mismatchTable` column names mismatch with InnoDb dictionary column names: iD <> id" } ] }La vérification préalable signale une incohérence des métadonnées dans la colonne
idde la tabletest.mismatchTable. Plus précisément, les métadonnées MySQL utilisent le nom de colonneiD, tandis qu’InnoDB utilise le nom de colonneid. - getTriggersWithNullDefiner
-
Niveau de vérification préalable : erreur
La colonne DEFINER pour
information_schema.triggersne peut pas êtrenullou vide.La vérification préalable s’assure que votre base de données ne possède aucun déclencheur défini avec un attribut DEFINER
nullou vide. Pour plus d’informations sur les exigences relatives à l’attribut DEFINER pour les objets stockés, consultez getEventsWithNullDefiner.Exemple de sortie :
{ "id": "getTriggersWithNullDefiner", "title": "The definer column for information_schema.triggers cannot be null or blank.", "status": "OK", "detectedProblems": [ { "level": "Error", "dbObject": "test.example_trigger", "description": "Set definer for trigger example_trigger in Schema test" } ] }La vérification préalable renvoie une erreur, car l’attribut DEFINER du déclencheur
example_triggerdu schématestestnull. Pour corriger ce problème, corrigez cet attribut en recréant le déclencheur avec un utilisateur valide, ou supprimez le déclencheur. Pour plus d’informations, consultez l’exemple dans getEventsWithNullDefiner.Note
Avant de supprimer ou de redéfinir un
DEFINER, examinez attentivement votre demande et vérifiez les exigences en matière de privilèges. Pour plus d’informations, consultez Stored object access controldans la documentation MySQL. - getValueOfVariablelower_case_table_names
-
Niveau de vérification préalable : erreur
Tous les noms de base de données ou de table doivent être en minuscules lorsque le paramètre
lower_case_table_namesest défini sur1.Avant MySQL 8.0, les noms de base de données, les noms de table et les autres objets correspondaient à des fichiers du répertoire de données, tels que des métadonnées basées sur des fichiers (.frm). La variable système lower_case_table_names
permet aux utilisateurs de contrôler la façon dont le serveur gère la sensibilité à la casse des identifiants pour les objets de base de données et le stockage de ces objets de métadonnées. Ce paramètre pouvait être modifié sur un serveur déjà initialisé après un redémarrage. Cependant, dans MySQL 8.0, bien que ce paramètre contrôle toujours la façon dont le serveur gère la sensibilité à la casse, il ne peut pas être modifié une fois le dictionnaire de données initialisé. Lors de la mise à niveau ou de la création d’une base de données MySQL 8.0, la valeur définie pour
lower_case_table_nameslors du premier démarrage du dictionnaire de données sur MySQL est utilisée pendant toute la durée de vie de cette base de données. Cette restriction a été mise en place dans le cadre de l’implémentation de l’Atomic Data Dictionary, où les objets de base de données sont migrés à partir de métadonnées basées sur des fichiers vers des tables InnoDB internes du schéma mysql.Pour plus d’informations, consultez Modifications du dictionnaire de données
dans la documentation MySQL. Pour éviter les problèmes lors de la mise à niveau quand les métadonnées basées sur des fichiers sont migrées vers le nouveau dictionnaire Atomic Data Dictionary, cette vérification préalable permet de s’assurer que toutes les tables sont stockées sur le disque en minuscules quand
lower_case_table_names = 1. Si ce n’est pas le cas, une erreur de vérification préalable est renvoyée et vous devrez corriger les métadonnées avant de procéder à la mise à niveau.Exemple de sortie :
{ "id": "getValueOfVariablelower_case_table_names", "title": "MySQL pre-checks that all database or table names are lowercase when the lower_case_table_names parameter is set to 1.", "status": "OK", "description": "Error: You have one or more databases or tables with uppercase letters in the names, but the lower_case_table_names parameter is set to 1. To upgrade to MySQL 8.0, either change all database or table names to lowercase, or set the parameter to 0.", "detectedProblems": [ { "level": "Error", "dbObject": "test.TEST", "description": "Table test.TEST contains one or more capital letters in name while lower_case_table_names = 1" } ] }Une erreur est renvoyée, car la table
test.TESTcontient des majuscules alors quelower_case_table_namesest défini sur1.Pour résoudre ce problème, vous pouvez modifier le nom de la table pour qu’il soit en minuscules ou modifier le paramètre
lower_case_table_namessur le cluster de bases de données avant de démarrer la mise à niveau.Note
Testez et examinez attentivement la documentation sur la sensibilité à la casse
dans MySQL et sur la manière dont ce type de changements pourrait affecter votre application. Consultez également la documentation de MySQL 8.0 pour déterminer les différences liées à la gestion de lower_case_table_names
dans MySQL 8.0. - groupByAscSyntaxCheck
-
Niveau de vérification préalable : erreur
Utilisation de la syntaxe
GROUP BY ASC/DESCsuppriméeDepuis MySQL 8.0.13, la syntaxe
ASCouDESCobsolète pour les clausesGROUP BYa été supprimée. Les requêtes basées sur le triGROUP BYpeuvent désormais générer des résultats différents. Pour obtenir un ordre de tri spécifique, utilisez plutôt une clauseORDER BY. Si des objets utilisent cette syntaxe dans votre base de données, vous devrez les recréer à l’aide d’une clauseORDER BYavant de réessayer la mise à niveau. Pour plus d’informations, consultez Modifications SQLdans la documentation MySQL. Exemple de sortie :
{ "id": "groupbyAscSyntaxCheck", "title": "Usage of removed GROUP BY ASC/DESC syntax", "status": "OK", "description": "Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause.", "documentationLink": "https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax", "detectedProblems": [ { "level": "Error", "dbObject": "test.groupbyasc", "description": "PROCEDURE uses removed GROUP BY ASC syntax", "dbObjectType": "Routine" } ] } - mysqlEmptyDotTableSyntaxCheck
-
Niveau de vérification préalable : erreur
Rechercher l’utilisation de la syntaxe
.<table>obsolète dans les routines.Dans MySQL 8.0, les routines ne peuvent plus contenir la syntaxe d’identifiant obsolète (
\".<table>\"). Si des routines ou des déclencheurs stockés contiennent ce type d’identifiants, la mise à niveau échouera. Par exemple, la référence.dot_tablesuivante n’est plus autorisée :mysql> show create procedure incorrect_procedure\G *************************** 1. row *************************** Procedure: incorrect_procedure sql_mode: Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `incorrect_procedure`() BEGIN delete FROM .dot_table; select * from .dot_table where 1=1; END character_set_client: utf8mb4 collation_connection: utf8mb4_0900_ai_ci Database Collation: latin1_swedish_ci 1 row in set (0.00 sec)Une fois que vous avez recréé les routines et les déclencheurs afin d’utiliser la syntaxe d’identifiant et les caractères d’échappement corrects, la vérification préalable aboutit et la mise à niveau peut avoir lieu. Pour plus d’informations, consultez Noms des objets de schéma
dans la documentation PostgreSQL. Exemple de sortie :
{ "id": "mysqlEmptyDotTableSyntaxCheck", "title": "Check for deprecated '.<table>' syntax used in routines.", "status": "OK", "description": "Error: The following routines contain identifiers in deprecated identifier syntax (\".<table>\"), and should be corrected before upgrade:\n", "detectedProblems": [ { "level": "Error", "dbObject": "test.incorrect_procedure", "description": " routine body contains deprecated identifiers." } ] }La vérification préalable renvoie une erreur pour la routine
incorrect_procedurede la base de donnéestest, car elle contient une syntaxe obsolète.Une fois que vous avez corrigé la routine, la vérification préalable aboutit et vous pouvez réessayer la mise à niveau.
- mysqlIndexTooLargeCheck
-
Niveau de vérification préalable : erreur
Rechercher les index qui sont trop volumineux pour fonctionner sur les versions de MySQL supérieures à 5.7
Pour les formats de ligne compacts ou redondants, il ne devrait pas être possible de créer un index avec un préfixe supérieur à 767 octets. Cependant, avant la version 5.7.35 de MySQL, cela était possible. Pour plus d’informations, consultez Notes de mise à jour de MySQL 5.7.35
. Tous les index affectés par ce bogue deviendront inaccessibles après la mise à niveau vers MySQL 8.0. Cette vérification préalable identifie les index incriminés qui devront être reconstruits avant que la mise à niveau ne soit autorisée.
{ "id": "mysqlIndexTooLargeCheck", "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7", "status": "OK", "description": "Error: The following indexes ware made too large for their format in an older version of MySQL (older than 5.7.34). Normally those indexes within tables with compact or redundant row formats shouldn't be larger than 767 bytes. To fix this problem those indexes should be dropped before upgrading or those tables will be inaccessible.", "detectedProblems": [ { "level": "Error", "dbObject": "test.table_with_large_idx", "description": "IDX_2" } ] }La vérification préalable renvoie une erreur, car la table
test.table_with_large_idxcontient un index sur une table utilisant un format de ligne compact ou redondant de plus de 767 octets. Ces tables deviendraient inaccessibles après la mise à niveau vers MySQL 8.0. Avant de procéder à la mise à niveau, effectuez l’une des actions suivantes :-
Supprimez l’index mentionné dans la vérification préalable.
-
Ajoutez un index mentionné dans la vérification préalable.
-
Modifiez le format de ligne utilisé par la table.
Dans ce cas, nous reconstruirons la table pour résoudre l’échec de la vérification préalable. Avant de reconstruire la table, assurez-vous qu’innodb_file_format
est défini sur Barracudaet qu’innodb_default_row_formatest défini sur dynamic. Ce sont les valeurs par défaut dans MySQL 5.7. Pour plus d’informations, consultez Formats de ligne InnoDBet Gestion des formats de fichier InnoDB dans la documentation MySQL. Note
Avant de reconstruire les espaces de table, consultez Online DDL operations
dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan. mysql > select @@innodb_file_format,@@innodb_default_row_format; +----------------------+-----------------------------+ | @@innodb_file_format | @@innodb_default_row_format | +----------------------+-----------------------------+ | Barracuda | dynamic | +----------------------+-----------------------------+ 1 row in set (0.00 sec) mysql> optimize table table_with_large_idx; +---------------------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +---------------------------+----------+----------+-------------------------------------------------------------------+ | test.table_with_large_idx | optimize | note | Table does not support optimize, doing recreate + analyze instead | | test.table_with_large_idx | optimize | status | OK | +---------------------------+----------+----------+-------------------------------------------------------------------+ 2 rows in set (0.02 sec) # Verify FILE_FORMAT and ROW_FORMAT mysql> select * from information_schema.innodb_sys_tables where name like 'test/table_with_large_idx'; +----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+ | TABLE_ID | NAME | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE | +----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+ | 43 | test/table_with_large_idx | 33 | 4 | 26 | Barracuda | Dynamic | 0 | Single | +----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+ 1 row in set (0.00 sec)Après avoir reconstruit la table, la vérification préalable aboutit et la mise à niveau peut avoir lieu.
{ "id": "mysqlIndexTooLargeCheck", "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7", "status": "OK", "detectedProblems": [] }, -
- mysqlInvalid57NamesCheck
-
Niveau de vérification préalable : erreur
Rechercher les noms de table et de schéma non valides utilisés dans MySQL 5.7
Après la migration vers le nouveau dictionnaire de données dans MySQL 8.0, votre instance de base de données ne peut plus contenir de schémas ou de tables avec le préfixe
#mysql50#. Si de tels objets existent, la mise à niveau échouera. Pour résoudre ce problème, exécutez mysqlchecksur les schémas et les tables renvoyés. Note
Assurez-vous d’utiliser une version MySQL 5.7
de mysqlcheck, car --fix-db-nameset --fix-table-names ont été supprimés de MySQL 8.0 . Exemple de sortie :
{ "id": "mysqlInvalid57NamesCheck", "title": "Check for invalid table names and schema names used in 5.7", "status": "OK", "description": "The following tables and/or schemas have invalid names. In order to fix them use the mysqlcheck utility as follows:\n\n $ mysqlcheck --check-upgrade --all-databases\n $ mysqlcheck --fix-db-names --fix-table-names --all-databases\n\nOR via mysql client, for eg:\n\n ALTER DATABASE `#mysql50#lost+found` UPGRADE DATA DIRECTORY NAME;", "documentationLink": "https://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html https://dev.mysql.com/doc/refman/5.7/en/alter-database.html https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals", "detectedProblems": [ { "level": "Error", "dbObject": "#mysql50#fix_db_names", "description": "Schema name" } ] }La vérification préalable indique que le schéma
#mysql50#fix_db_namesn’est pas valide.Après avoir corrigé le nom du schéma, la vérification préalable aboutit, ce qui permet à la mise à niveau de se poursuivre.
{ "id": "mysqlInvalid57NamesCheck", "title": "Check for invalid table names and schema names used in 5.7", "status": "OK", "detectedProblems": [] }, - mysqlOrphanedRoutinesCheck
-
Niveau de vérification préalable : erreur
Rechercher les routines orphelines dans la version 5.7
Lors de la migration vers le nouveau dictionnaire de données dans MySQL 8.0, s’il existe des procédures stockées dans la base de données où le schéma n’existe plus, la mise à niveau échoue. Cette vérification préalable s’assure que tous les schémas référencés dans les procédures stockées de votre instance de base de données existent toujours. Pour permettre à la mise à niveau de se poursuivre, supprimez ces procédures stockées.
Exemple de sortie :
{ "id": "mysqlOrphanedRoutinesCheck", "title": "Check for orphaned routines in 5.7", "status": "OK", "description": "Error: The following routines have been orphaned. Schemas that they are referencing no longer exists.\nThey have to be cleaned up or the upgrade will fail.", "detectedProblems": [ { "level": "Error", "dbObject": "dropped_db.get_version", "description": "is orphaned" } ] },La vérification préalable indique que la procédure stockée
get_versiondans la base de donnéesdropped_dbest orpheline.Pour nettoyer cette procédure, vous pouvez recréer le schéma manquant.
mysql> create database dropped_db; Query OK, 1 row affected (0.01 sec)Une fois le schéma recréé, vous pouvez supprimer la procédure pour permettre à la mise à niveau de se poursuivre.
{ "id": "mysqlOrphanedRoutinesCheck", "title": "Check for orphaned routines in 5.7", "status": "OK", "detectedProblems": [] }, - mysqlSchemaCheck
-
Niveau de vérification préalable : erreur
Les noms des tables dans le schéma
mysqlsont en conflit avec les nouvelles tables de MySQL 8.0Le nouveau dictionnaire Atomic Data Dictionary
introduit dans MySQL 8.0 stocke toutes les métadonnées dans un ensemble de tables InnoDB internes du schéma mysql. Au cours de la mise à niveau, les nouvelles tables du dictionnaire de données internesont créées dans le schéma mysql. Pour éviter les conflits de noms, qui pourraient entraîner des échecs de mise à niveau, la vérification préalable examine tous les noms de table du schémamysqlafin de s’assurer qu’aucun des nouveaux noms de table n’est déjà utilisé. Si tel est le cas, une erreur est renvoyée et la mise à niveau n’est pas autorisée à se poursuivre.Exemple de sortie :
{ "id": "mysqlSchema", "title": "Table names in the mysql schema conflicting with new tables in the latest MySQL.", "status": "OK", "description": "Error: The following tables in mysql schema have names that will conflict with the ones introduced in the latest version. They must be renamed or removed before upgrading (use RENAME TABLE command). This may also entail changes to applications that use the affected tables.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrade-before-you-begin.html", "detectedProblems": [ { "level": "Error", "dbObject": "mysql.tablespaces", "description": "Table name used in mysql schema.", "dbObjectType": "Table" } ] }Une erreur est renvoyée, car une table est nommée
tablespacesdans le schémamysql. Il s’agit de l’un des nouveaux noms de tables du dictionnaire de données interne de MySQL 8.0. Vous devrez renommer ou supprimer ces tables avant de procéder à la mise à niveau, à l’aide de la commandeRENAME TABLE. - nonNativePartitioningCheck
-
Niveau de vérification préalable : erreur
Tables partitionnées à l’aide de moteurs avec partitionnement non natif
Selon la documentation MySQL 8.0
, deux moteurs de stockage prennent actuellement en charge le partitionnement natif : InnoDB et NDB . Parmi eux, seul InnoDB est pris en charge dans Aurora MySQL version 3, compatible avec MySQL 8.0. Toute tentative de création de tables partitionnées dans MySQL 8.0 à l’aide d’un autre moteur de stockage échouera. Cette vérification préalable recherche les tables de votre cluster de bases de données qui utilisent un partitionnement non natif. Le cas échéant, vous devrez supprimer le partitionnement ou remplacer le moteur de stockage par InnoDB. Exemple de sortie :
{ "id": "nonNativePartitioning", "title": "Partitioned tables using engines with non native partitioning", "status": "OK", "description": "Error: In the latest MySQL storage engine is responsible for providing its own partitioning handler, and the MySQL server no longer provides generic partitioning support. InnoDB and NDB are the only storage engines that provide a native partitioning handler that is supported in the latest MySQL. A partitioned table using any other storage engine must be altered—either to convert it to InnoDB or NDB, or to remove its partitioning—before upgrading the server, else it cannot be used afterwards.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-configuration-changes", "detectedProblems": [ { "level": "Error", "dbObject": "test.partMyisamTable", "description": "MyISAM engine does not support native partitioning", "dbObjectType": "Table" } ] }Ici, une table MyISAM utilise le partitionnement. Une action est donc nécessaire avant que la mise à niveau puisse commencer.
- oldTemporalCheck
-
Niveau de vérification préalable : erreur
Utilisation du type « anciens temporels »
Les « anciens temporels » font référence aux colonnes de type temporel (comme
TIMESTAMPetDATETIME) créées dans les versions 5.5 et antérieures de MySQL. Dans MySQL 8.0, la prise en charge de ces types de données « anciens temporels » est supprimée, ce qui signifie que les mises à niveau sur place de MySQL 5.7 à 8.0 ne sont pas possibles si la base de données en contient encore. Pour résoudre ce problème, vous devez reconstruiretoutes les tables contenant ces types de données « anciens temporels » avant de procéder à la mise à niveau. Pour plus d’informations sur la dépréciation des types de données « anciens temporels » dans MySQL 5.7, consultez ce blog
. Pour plus d’informations sur la suppression des types de données « anciens temporels » dans MySQL 8.0, consultez ce blog . Note
Avant de reconstruire les espaces de table, consultez Online DDL operations
dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan. Exemple de sortie :
{ "id": "oldTemporalCheck", "title": "Usage of old temporal type", "status": "OK", "description": "Error: Following table columns use a deprecated and no longer supported temporal disk storage format. They must be converted to the new format before upgrading. It can by done by rebuilding the table using 'ALTER TABLE <table_name> FORCE' command", "documentationLink": "https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/", "detectedProblems": [ { "level": "Error", "dbObject": "test.55_temporal_table.timestamp_column", "description": "timestamp /* 5.5 binary format */", "dbObjectType": "Column" } ] },Une erreur est signalée pour la colonne
timestamp_columnde la tabletest.55_temporal_table, car elle utilise un format de stockage sur disque ancien temporel qui n’est plus pris en charge.Pour résoudre ce problème et permettre la mise à niveau, reconstruisez la table pour convertir le format de stockage sur disque ancien temporel vers le nouveau format introduit dans MySQL 5.6. Pour plus d’informations et pour connaître les conditions préalables, consultez Conversion entre les jeux de caractères Unicode à 3 octets et à 4 octets
dans la documentation MySQL. L’exécution de la commande suivante pour reconstruire les tables mentionnées dans cette vérification préalable convertit les types de données « anciens temporels » au nouveau format avec une précision d’une fraction de seconde.
ALTER TABLE ... ENGINE=InnoDB;Pour plus d’informations sur la reconstruction des tables, consultez Instruction ALTER TABLE
dans la documentation MySQL. Après avoir reconstruit la table en question et redémarré la mise à niveau, la vérification de la compatibilité aboutit, ce qui permet à la mise à niveau de se poursuivre.
{ "id": "oldTemporalCheck", "title": "Usage of old temporal type", "status": "OK", "detectedProblems": [] } -
Niveau de vérification préalable : erreur
Utilisation de tables partitionnées dans les espaces de table partagés
Depuis MySQL 8.0.13
, la prise en charge du placement des partitions de table dans les espaces de table partagés est supprimée. Avant la mise à niveau, déplacez ces tables des espaces de table partagés vers des espaces de table de fichier par table. Note
Avant de reconstruire les espaces de table, consultez Partitioning operations
dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan. Exemple de sortie :
{ "id": "partitionedTablesInSharedTablespaceCheck", "title": "Usage of partitioned tables in shared tablespaces", "status": "OK", "description": "Error: The following tables have partitions in shared tablespaces. They need to be moved to file-per-table tablespace before upgrading. You can do this by running query like 'ALTER TABLE table_name REORGANIZE PARTITION X INTO (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);'", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals", "detectedProblems": [ { "level": "Error", "dbObject": "test.partInnoDBTable", "description": "Partition p1 is in shared tablespace innodb", "dbObjectType": "Table" } ] }La vérification préalable échoue, car la partition
p1de la tabletest.partInnoDBTablese trouve dans l’espace de table du système.Pour résoudre ce problème, reconstruisez la table
test.partInnodbTableen plaçant la partitionp1en cause dans un espace de table de fichier par table.mysql > ALTER TABLE partInnodbTable REORGANIZE PARTITION p1 -> INTO (PARTITION p1 VALUES LESS THAN ('2014-01-01') TABLESPACE=innodb_file_per_table); Query OK, 0 rows affected, 1 warning (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0Après cela, la vérification préalable aboutira.
{ "id": "partitionedTablesInSharedTablespaceCheck", "title": "Usage of partitioned tables in shared tablespaces", "status": "OK", "detectedProblems": [] } - removedFunctionsCheck
-
Niveau de vérification préalable : erreur
Utilisation de fonctions supprimées de la dernière version de MySQL
Dans MySQL 8.0, plusieurs fonctions intégrées ont été supprimées. Cette vérification préalable examine votre base de données à la recherche d’objets susceptibles d’utiliser ces fonctions. Si elle en trouve, une erreur est renvoyée. Vous devrez résoudre ces problèmes avant de réessayer la mise à niveau.
La majorité des fonctions supprimées sont des fonctions spatiales
, qui ont été remplacées par des fonctions ST_*équivalentes. Dans ce cas, modifiez les objets de base de données pour qu’ils utilisent le nom de la nouvelle procédure. Pour plus d’informations, consultez Fonctionnalités supprimées dans MySQL 8.0dans la documentation MySQL. Exemple de sortie :
{ "id": "removedFunctionsCheck", "title": "Usage of removed functions", "status": "OK", "description": "Error: The following DB objects use functions that were removed in the latest MySQL version. Please make sure to update them to use supported alternatives before upgrade.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals", "detectedProblems": [ { "level": "Error", "dbObject": "test.GetLocationsInPolygon", "description": "PROCEDURE uses removed function POLYGONFROMTEXT (consider using ST_POLYGONFROMTEXT instead)", "dbObjectType": "Routine" }, { "level": "Error", "dbObject": "test.InsertLocation", "description": "PROCEDURE uses removed function POINTFROMTEXT (consider using ST_POINTFROMTEXT instead)", "dbObjectType": "Routine" } ] },La vérification préalable indique que la procédure stockée
test.GetLocationsInPolygonutilise deux fonctions supprimées : POLYGONFROMTEXTet POINTFROMTEXT . Elle suggère également d’utiliser les nouvelles fonctions ST_POLYGONFROMTEXT et ST_POINTFROMTEXT à la place. Après avoir recréé la procédure à l’aide des suggestions, la vérification préalable aboutit. { "id": "removedFunctionsCheck", "title": "Usage of removed functions", "status": "OK", "detectedProblems": [] },Note
Bien que, dans la plupart des cas, les fonctions obsolètes soient directement remplacées, assurez-vous de tester votre application et de consulter la documentation pour détecter tout changement de comportement résultant de ce changement.
- routineSyntaxCheck
-
Niveau de vérification préalable : erreur
Recherche d’objets de type routine dans la syntaxe MySQL
MySQL 8.0 a introduit des mots clés réservés
qui ne l’étaient pas auparavant. La vérification préalable à la mise à niveau évalue l’utilisation des mots clés réservés dans les noms des objets de base de données, dans leurs définitions et dans leur corps. Si elle détecte des mots clés réservés utilisés dans des objets de base de données, tels que des procédures stockées, des fonctions, des événements et des déclencheurs, la mise à niveau échoue et une erreur est publiée dans le fichier upgrade-prechecks.log. Pour résoudre ce problème, vous devez mettre à jour ces définitions d’objets et placer ces références entre guillemets simples (’) avant de procéder à la mise à niveau. Pour plus d’informations sur l’échappement des mots réservés dans MySQL, consultez Littéraux de chaînedans la documentation MySQL. Vous pouvez également remplacer le nom par un autre, ce qui peut impliquer des modifications de l’application.
Exemple de sortie :
{ "id": "routineSyntaxCheck", "title": "MySQL syntax check for routine-like objects", "status": "OK", "description": "The following objects did not pass a syntax check with the latest MySQL grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.", "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html", "detectedProblems": [ { "level": "Error", "dbObject": "test.select_res_word", "description": "at line 2,18: unexpected token 'except'", "dbObjectType": "Routine" } ] }Pour résoudre ce problème, vérifiez la définition de la routine.
SHOW CREATE PROCEDURE test.select_res_word\G *************************** 1. row *************************** Procedure: select_res_word sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Create Procedure: CREATE PROCEDURE 'select_res_word'() BEGIN SELECT * FROM except; END character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci 1 row in set (0.00 sec)La procédure utilise une table nommée
except, qui est un nouveau mot clé dans MySQL 8.0. Recréez la procédure en échappant le littéral de la chaîne.> drop procedure if exists select_res_word; Query OK, 0 rows affected (0.00 sec) > DELIMITER $$ > CREATE PROCEDURE select_res_word() -> BEGIN -> SELECT * FROM 'except'; -> END$$ Query OK, 0 rows affected (0.00 sec) > DELIMITER ;Désormais, la vérification préalable aboutit.
{ "id": "routineSyntaxCheck", "title": "MySQL syntax check for routine-like objects", "status": "OK", "detectedProblems": [] } - schemaInconsistencyCheck
-
Niveau de vérification préalable : erreur
Incohérences de schéma résultant de la suppression ou de l’endommagement de fichiers
Comme décrit précédemment, MySQL 8.0 a introduit l’Atomic Data Dictionary
, qui stocke toutes les métadonnées dans un ensemble de tables InnoDB internes du schéma mysql. Cette nouvelle architecture fournit une méthode transactionnelle conforme à l’ACIDpour gérer les métadonnées des bases de données, résolvant ainsi le problème de « DDL atomique » rencontré par l’ancienne approche basée sur les fichiers. Avant MySQL 8.0, les objets de schéma pouvaient devenir orphelins en cas d’interruption inattendue d’une opération DDL. La migration des métadonnées basées sur des fichiers vers les nouvelles tables de l’Atomic Data Dictionary lors de la mise à niveau garantit l’absence d’objets de schéma orphelins de ce type dans l’instance de base de données. Si des objets orphelins sont détectés, la mise à niveau échoue. Pour aider à détecter ces objets orphelins avant de lancer la mise à niveau, la vérification préalable
schemaInconsistencyCheckest exécutée pour s’assurer que tous les objets de métadonnées du dictionnaire de données sont synchronisés. Si des objets de métadonnées orphelins sont détectés, la mise à niveau ne se poursuit pas. Pour procéder à la mise à niveau, nettoyez ces objets de métadonnées orphelins.Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’AWS Support
pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3. Exemple de sortie :
{ "id": "schemaInconsistencyCheck", "title": "Schema inconsistencies resulting from file removal or corruption", "status": "OK", "description": "Error: Following tables show signs that either table datadir directory or frm file was removed/corrupted. Please check server logs, examine datadir to detect the issue and fix it before upgrade", "detectedProblems": [ { "level": "Error", "dbObject": "test.schemaInconsistencyCheck_failure", "description": "present in INFORMATION_SCHEMA's INNODB_SYS_TABLES table but missing from TABLES table" } ] }La vérification préalable indique que les métadonnées de la table
test.schemaInconsistencyCheck_failurene sont pas cohérentes. Dans ce cas, la table existe dans les métadonnées du moteur de stockage InnoDB (information_schema.INNODB_SYS_TABLES), mais pas dans les métadonnées MySQL (information_schema.TABLES).
Vérifications préalables d’Aurora MySQL qui signalent des erreurs
Les vérifications préalables suivantes sont spécifiques à Aurora MySQL :
- auroraCheckDDLRecovery
-
Niveau de vérification préalable : erreur
Rechercher la présence d’artefacts liés à la fonctionnalité de restauration DDL d’Aurora
Dans le cadre de l’implémentation de la restauration DDL (Data Definition Language) dans Aurora MySQL, les métadonnées des instructions DDL en transit sont conservées dans les tables
ddl_log_md_tableetddl_log_tabledu schémamysql. L’implémentation de la restauration DDL par Aurora n’est pas prise en charge à partir de la version 3, car cette fonctionnalité fait partie de l’implémentation du nouvel Atomic Data Dictionarydans MySQL 8.0. Si des instructions DDL sont en cours d’exécution pendant les vérifications de la compatibilité, cette vérification préalable risque d’échouer. Nous vous recommandons d’essayer la mise à niveau quand aucune instruction DDL n’est en cours d’exécution. Si cette vérification préalable échoue sans qu’aucune instruction DDL ne soit exécutée, ouvrez une demande d’assistance auprès d’AWS Support
pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3. Si des instructions DDL sont en cours d’exécution, la sortie de la vérification préalable affiche le message suivant :
“There are DDL statements in process. Please allow DDL statements to finish before upgrading.”Exemple de sortie :
{ "id": "auroraCheckDDLRecovery", "title": "Check for artifacts related to Aurora DDL recovery feature", "status": "OK", "description": "Aurora implementation of DDL recovery is not supported from 3.x onwards. This check verifies that the database do not have artifacts realted to the feature", "detectedProblems": [ { "level": "Error", "dbObject": "mysql.ddl_log_md_table", "description": "Table mysql.ddl_log_md_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance." }, { "level": "Error", "dbObject": "mysql.ddl_log_table", "description": "Table mysql.ddl_log_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance." }, { "level": "Error", "dbObject": "information_schema.processlist", "description": "There are DDL statements in process. Please allow DDL statements to finish before upgrading." } ] }La vérification préalable a renvoyé une erreur en raison d’une instruction DDL en transit exécutée en même temps que les vérifications de la compatibilité. Nous vous recommandons de réessayer la mise à niveau sans qu’aucune instruction DDL ne soit active.
- auroraCheckRdsUpgradePrechecksTable
-
Niveau de vérification préalable : erreur
Vérifier l’existence de la table
mysql.rds_upgrade_prechecksIl s’agit d’une vérification préalable interne, qui est effectuée par le service RDS. Toutes les erreurs seront traitées automatiquement lors de la mise à niveau et peuvent être ignorées sans risque.
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’AWS Support
pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3. { "id": "auroraCheckRdsUpgradePrechecksTable", "title": "Check existence of mysql.rds_upgrade_prechecks table", "status": "OK", "detectedProblems": [] } - auroraFODUpgradeCheck
-
Niveau de vérification préalable : erreur
Rechercher la présence d’artefacts liés à la fonctionnalité DDL rapide d’Aurora
L’optimisation Fast DDL a été introduite en mode Lab sur Aurora MySQL version 2 pour améliorer l’efficacité de certaines opérations DDL. Dans la version 3 d’Aurora MySQL, le mode lab a été supprimé, et l’implémentation de Fast DDL a été remplacée par la fonctionnalité de MySQL 8.0 appelée Instant DDL
. Avant la mise à niveau vers Aurora MySQL version 3, toutes les tables utilisant Fast DDL en mode Lab doivent être reconstruites en exécutant la commande
OPTIMIZE TABLEouALTER TABLE ... ENGINE=InnoDBpour assurer la compatibilité avec Aurora MySQL version 3.Cette vérification préalable renvoie la liste de ces tables. Une fois que les tables renvoyées ont été reconstruites, vous pouvez réessayer la mise à niveau.
Exemple de sortie :
{ "id": "auroraFODUpgradeCheck", "title": "Check for artifacts related to Aurora fast DDL feature", "status": "OK", "description": "Aurora fast DDL is not supported from 3.x onwards. This check verifies that the database does not have artifacts related to the feature", "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.Managing.FastDDL-v2", "detectedProblems": [ { "level": "Error", "dbObject": "test.test", "description": "Your table has pending Aurora fast DDL operations. Run 'OPTIMIZE TABLE <table name>' for the table to apply all the pending DDL updates. Then try the upgrade again." } ] }La vérification préalable indique que la table
test.testcontient des opérations Fast DDL en attente.Pour permettre la mise à niveau, vous pouvez reconstruire la table, puis réessayer la mise à niveau.
Note
Avant de reconstruire les espaces de table, consultez Online DDL operations
dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan. mysql> optimize table test.test; +-----------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------+----------+----------+-------------------------------------------------------------------+ | test.test | optimize | note | Table does not support optimize, doing recreate + analyze instead | | test.test | optimize | status | OK | +-----------+----------+----------+-------------------------------------------------------------------+ 2 rows in set (0.04 sec)Après avoir reconstruit la table, la vérification préalable aboutit.
{ "id": "auroraFODUpgradeCheck", "title": "Check for artifacts related to Aurora fast DDL feature", "status": "OK", "detectedProblems": [] } - auroraGetDanglingFulltextIndex
-
Niveau de vérification préalable : erreur
Tables avec référence d’index
FULLTEXTsuspendueAvant MySQL 5.6.26, il était possible qu’après la suppression d’un index de recherche en texte intégral, les colonnes
FTS_DOC_IDetFTS_DOC_ID_INDEXmasquées deviennent orphelines. Pour plus d’informations, consultez le bogue n° 76 012. Si cela s’est produit dans des tables créées sur des versions antérieures de MySQL, les mises à niveau vers la version 3 d’Aurora MySQL peuvent échouer. Cette vérification préalable s’assure qu’aucun index de texte intégral orphelin ou « suspendu » n’existe sur votre cluster de bases de données avant la mise à niveau vers MySQL 8.0. Si cette vérification préalable échoue, reconstruisez toutes les tables contenant des index de texte intégral suspendus.
Exemple de sortie :
{ "id": "auroraGetDanglingFulltextIndex", "title": "Tables with dangling FULLTEXT index reference", "status": "OK", "description": "Error: The following tables contain dangling FULLTEXT index which is not supported. It is recommended to rebuild the table before upgrade.", "detectedProblems": [ { "level": "Error", "dbObject": "test.table_with_fts_index", "description": "Table `test.table_with_fts_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade." } ] },La vérification préalable signale une erreur pour la table
test.table_with_fts_index, car elle contient un index de texte intégral suspendu. Pour permettre la mise à niveau, reconstruisez la table pour nettoyer les tables auxiliaires d’index de texte intégral. UtiliserOPTIMIZE TABLE test.table_with_fts_indexouALTER TABLE test.table_with_fts_index, ENGINE=INNODB.Après avoir reconstruit la table, la vérification préalable aboutit.
{ "id": "auroraGetDanglingFulltextIndex", "title": "Tables with dangling FULLTEXT index reference", "status": "OK", "detectedProblems": [] }, - auroraUpgradeCheckForDatafilePathInconsistency
-
Niveau de vérification préalable : erreur
Rechercher les incohérences liées au chemin du fichier
ibdCette vérification préalable ne s’applique qu’à Aurora MySQL 3.03.0 ou version antérieure. Si vous rencontrez une erreur lors de cette vérification préalable, procédez à une mise à niveau vers Aurora MySQL 3.04 ou version ultérieure.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForDatafilePathInconsistency", "title": "Check for inconsistency related to ibd file path.", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForFtsSpaceIdZero
-
Niveau de vérification préalable : erreur
Rechercher l’index de texte intégral avec un identifiant d’espace égal à zéro
Dans MySQL, lorsque vous ajoutez un index de texte intégral
à une table InnoDB, plusieurs espaces de table d’index auxiliaires sont créés. En raison d’un bogue dans les versions antérieures de MySQL, corrigé dans la version 5.6.20, il était possible que ces tables d’index auxiliaires soient créées dans l’espace de table du système , plutôt que dans leur propre espace de table InnoDB. S’il existe de tels espaces de table auxiliaires, la mise à niveau échouera. Recréez les index de texte intégral mentionnés dans l’erreur générée par la vérification préalable, puis réessayez la mise à niveau.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForFtsSpaceIdZero", "title": "Check for fulltext index with space id as zero", "status": "OK", "description": "The auxiliary tables of FTS indexes on the table are created in system table-space. Due to this DDL queries executed on MySQL8.0 shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade.", "detectedProblems": [ { "level": "Error", "dbObject": "test.fts_space_zero_check", "description": " The auxiliary tables of FTS indexes on the table 'test.fts_space_zero_check' are created in system table-space due to https://bugs.mysql.com/bug.php?id=72132. In MySQL8.0, DDL queries executed on this table shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade." } ] },La vérification préalable signale une erreur pour la table
test.fts_space_zero_check, car elle contient des tables auxiliaires de recherche de texte intégral (FTS) dans l’espace de table du système.Une fois que vous avez supprimé et recréé les index FTS associés à cette table, la vérification préalable aboutit.
Note
Avant de reconstruire les espaces de table, consultez Partitioning operations
dans la documentation MySQL pour comprendre les effets du verrouillage et du déplacement des données sur les transactions de premier plan. { "id": "auroraUpgradeCheckForFtsSpaceIdZero", "title": "Check for fulltext index with space id as zero", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForIncompleteXATransactions
-
Niveau de vérification préalable : erreur
Rechercher les transactions XA à l’état préparé
Lors de l’exécution du processus de mise à niveau de la version majeure, il est essentiel que l’instance de base de données Aurora MySQL version 2 soit complètement arrêtée
. Cela garantit que toutes les transactions sont validées ou annulées, et qu’InnoDB a purgé tous les enregistrements du journal d’annulation. L’annulation des transactions étant nécessaire, si votre base de données contient des transactions XA à l’état préparé, cela peut empêcher l’arrêt complet d’avoir lieu. Pour cette raison, si des transactions XA préparées sont détectées, la mise à niveau ne pourra pas avoir lieu tant que vous n’aurez pas pris les mesures nécessaires pour les valider ou les annuler. Pour plus d’informations sur la recherche des transactions XA à l’état préparé à l’aide de
XA RECOVER, consultez Instructions SQL des transactions XAdans la documentation MySQL. Pour plus d’informations, consultez États des transactions XA dans la documentation MySQL. Exemple de sortie :
{ "id": "auroraUpgradeCheckForIncompleteXATransactions", "title": "Pre-checks for XA Transactions in prepared state.", "status": "OK", "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions.", "detectedProblems": [ { "level": "Error", "dbObject": "all", "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions." } ] }Cette vérification préalable signale une erreur, car certaines transactions préparées doivent être validées ou annulées.
Une fois connecté à la base de données, vous pouvez consulter la table information_schema.innodb_trx
et la sortie XA RECOVERpour plus d’informations.Important
Avant de valider ou d’annuler une transaction, nous vous recommandons de vérifier la documentation MySQL
et les exigences de votre application. mysql> select trx_started, trx_mysql_thread_id, trx_id,trx_state, trx_operation_state, trx_rows_modified, trx_rows_locked from information_schema.innodb_trx; +---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+ | trx_started | trx_mysql_thread_id | trx_id | trx_state | trx_operation_state | trx_rows_modified | trx_rows_locked | +---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+ | 2024-08-12 01:09:39 | 0 | 2849470 | RUNNING | NULL | 1 | 0 | +---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+ 1 row in set (0.00 sec) mysql> xa recover; +----------+--------------+--------------+--------+ | formatID | gtrid_length | bqual_length | data | +----------+--------------+--------------+--------+ | 1 | 6 | 0 | xatest | +----------+--------------+--------------+--------+ 1 row in set (0.00 sec)Dans ce cas, nous annulons la transaction préparée.
mysql> XA ROLLBACK 'xatest'; Query OK, 0 rows affected (0.00 sec) v mysql> xa recover; Empty set (0.00 sec)Une fois que la transaction XA est annulée, la vérification préalable aboutit.
{ "id": "auroraUpgradeCheckForIncompleteXATransactions", "title": "Pre-checks for XA Transactions in prepared state.", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForInstanceLimit
-
Niveau de vérification préalable : erreur
Vérifier si la mise à niveau est prise en charge sur la classe d’instance actuelle
L’exécution d’une mise à niveau sur place à partir d’Aurora MySQL version 2.12.0 ou 2.12.1, où la classe d’instance de base de données d’enregistreur est db.r6i.32xlarge, n’est actuellement pas prise en charge. Dans ce cas, la vérification préalable renvoie une erreur. Pour autoriser la mise à niveau, vous pouvez remplacer votre classe d’instance de base de données par db.r6i.24xlarge ou par une classe inférieure. Vous pouvez également effectuer une mise à niveau vers Aurora MySQL version 2.12.2 ou supérieure, où la mise à niveau sur place vers Aurora MySQL version 3 est prise en charge sur db.r6i.32xlarge.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForInstanceLimit", "title": "Checks if upgrade is supported on the current instance class", "status": "OK", "description": "Upgrade from Aurora Version 2.12.0 and 2.12.1 may fail for 32.xl and above instance class.", "detectedProblems": [ { "level": "Error", "dbObject": "all", "description": "Upgrade is not supported on this instance size for Aurora MySql Version 2.12.1. Before upgrading to Aurora MySql 3, please consider either: 1. Changing the instance class to 24.xl or lower. -or- 2. Upgrading to patch version 2.12.2 or higher." } ] },La vérification préalable renvoie une erreur, car l’instance de base de données d’enregistreur utilise la classe d’instance db.r6i.32xlarge et s’exécute sur Aurora MySQL version 2.12.1.
- auroraUpgradeCheckForInternalUsers
-
Niveau de vérification préalable : erreur
Rechercher les utilisateurs internes de la version 8.0
Cette vérification préalable ne s’applique qu’à Aurora MySQL 3.03.0 ou version antérieure. Si vous rencontrez une erreur lors de cette vérification préalable, procédez à une mise à niveau vers Aurora MySQL 3.04 ou version ultérieure.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForInternalUsers", "title": "Check for 8.0 internal users.", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews
-
Niveau de vérification préalable : erreur
Rechercher la présence de caractères utf8mb3 non valides dans la définition de la vue
Cette vérification préalable identifie les vues contenant des commentaires dont l’encodage de caractères
utf8mb3n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires de vue. Si une définition de vue contient des caractères non valides dans le jeu de caractèresutf8mb3, la mise à niveau échoue.Pour résoudre ce problème, modifiez la définition de la vue afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews", "title": "Check for invalid utf8mb3 character string.", "status": "OK", "description": "Definition of following view(s) has/have invalid utf8mb3 character string.", "detectedProblems": [ { "level": "Error", "dbObject": "precheck.utf8mb3_invalid_char_view", "description": "Definition of view precheck.utf8mb3_invalid_char_view contains an invalid utf8mb3 character string. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify the view definition to not use non-BMP characters and try the upgrade again." } ] },La vérification préalable indique que la définition de la vue
utf8mb3_invalid_char_viewcontient des caractèresutf8mb3non valides dans sa définition.Pour résoudre ce problème, identifiez la vue contenant les caractères non pris en charge et mettez à jour les commentaires. Tout d’abord, examinez la structure de la vue et identifiez les commentaires.
MySQL> SHOW CREATE VIEW precheck.utf8mb3_invalid_char_view\G *************************** 1. row *************************** View: utf8mb3_invalid_char_view Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`admin`@`%` SQL SECURITY DEFINER VIEW `utf8mb3_invalid_char_view` AS select 'This row contains a dolphin 🐬' AS `message` character_set_client: utf8 collation_connection: utf8_general_ci 1 row in set, 1 warning (0.00 sec)Une fois que vous avez identifié la vue contenant l’erreur, remplacez-la par l’instruction
CREATE OR REPLACE VIEW.MySQL> CREATE OR REPLACE VIEW precheck.utf8mb3_invalid_char_view AS select 'This view definition to not use non-BMP characters' AS message;Après avoir mis à jour toutes les définitions de vue contenant des caractères non pris en charge, la vérification préalable aboutit et la mise à niveau peut avoir lieu.
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments", "title": "Check for invalid utf8mb3 column comments.", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForInvalidUtf8mb3ColumnComments
-
Niveau de vérification préalable : erreur
Rechercher la présence de commentaires de colonne utf8mb3 non valides
Cette vérification préalable identifie les tables contenant des commentaires de colonne dont l’encodage de caractères
utf8mb3n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires de colonne. Si des commentaires de colonne contiennent des caractères non valides dans le jeu de caractères utf8mb3, la mise à niveau échouera.Pour résoudre ce problème, vous devez modifier les commentaires de ces colonnes afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau. Vous pouvez utiliser l’instruction
ALTER TABLEpour mettre à jour les commentaires des colonnes.Exemple de sortie :
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments", "title": "Check for invalid utf8mb3 column comments.", "status": "OK", "description": "Following table(s) has/have invalid utf8mb3 comments on the column/columns.", "detectedProblems": [ { "level": "Error", "dbObject": "test.t2", "description": "Table test.t2 has invalid utf8mb3 comments in it's column/columns. This is due to non-BMP characters in the comment field. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again." } ] }La vérification préalable indique que le tableau
test.t2contient des caractèresutf8mb3non valides dans un ou plusieurs commentaires de colonne, notamment en raison de la présence de caractères non BMP.Pour résoudre ce problème, vous pouvez identifier les colonnes problématiques et mettre à jour leurs commentaires. Tout d’abord, examinez la structure de la table pour identifier les colonnes contenant des commentaires :
mysql> SHOW CREATE TABLE test.t2\GUne fois que vous avez identifié les colonnes contenant des commentaires problématiques, mettez-les à jour à l’aide de l’instruction
ALTER TABLE. Exemples :mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT 'Updated comment without non-BMP characters';Vous pouvez également supprimer complètement le commentaire :
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT '';Après que vous avez mis à jour tous les commentaires de colonne problématiques, la vérification préalable aboutit et la mise à niveau peut avoir lieu :
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments", "title": "Check for invalid utf8mb3 column comments.", "status": "OK", "detectedProblems": [] }Note
Avant de modifier les commentaires de colonne, assurez-vous que tout code d’application ou toute documentation reposant sur ces commentaires est mis à jour en conséquence. Envisagez d’adopter le jeu de caractères utf8mb4 pour une meilleure prise en charge Unicode si votre application nécessite des caractères non BMP.
- auroraUpgradeCheckForInvalidUtf8mb3IndexComments
-
Niveau de vérification préalable : erreur
Rechercher la présence de commentaires d’index utf8mb3 non valides
Cette vérification préalable identifie les tables contenant des commentaires d’index dont l’encodage de caractères
utf8mb3n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires d’index. Si des commentaires d’index contiennent des caractères non valides dans le jeu de caractèresutf8mb3, la mise à niveau échoue.Pour résoudre ce problème, vous devez modifier ces commentaires d’index afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3IndexComments", "title": "Check for invalid utf8mb3 index comments.", "status": "OK", "description": "Following table(s) has/have invalid utf8mb3 comments on the index.", "detectedProblems": [ { "level": "Error", "dbObject": "precheck.utf8mb3_tab_index_comment", "description": "Table precheck.utf8mb3_tab_index_comment has invalid utf8mb3 comments in it's index. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again." } ] },La vérification préalable indique que le tableau
utf8mb3_tab_index_commentcontient des caractèresutf8mb3non valides dans un ou plusieurs commentaires de colonne, notamment en raison de la présence de caractères non BMP.Pour résoudre ce problème, examinez d’abord la structure de la table afin d’identifier l’index contenant des commentaires problématiques.
MySQL> SHOW CREATE TABLE precheck.utf8mb3_tab_index_comment\G *************************** 1. row *************************** Table: utf8mb3_tab_index_comment Create Table: CREATE TABLE `utf8mb3_tab_index_comment` ( `id` int(11) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, KEY `idx_name` (`name`) COMMENT 'Name index 🐬' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.01 sec)Une fois que vous avez identifié l’index contenant des commentaires utilisant des caractères non pris en charge, supprimez-le et recréez-le.
Note
La suppression et la recréation d’un index de table peuvent entraîner une durée d’indisponibilité. Nous vous recommandons de planifier cette opération pendant la maintenance.
MySQL> ALTER TABLE precheck.utf8mb3_tab_index_comment DROP INDEX idx_name; MySQL> ALTER TABLE precheck.utf8mb3_tab_index_comment ADD INDEX idx_name(name);L’exemple suivant présente une autre façon de recréer l’index.
MySQL> ALTER TABLE utf8mb3_tab_index_comment DROP INDEX idx_name, ADD INDEX idx_name (name) COMMENT 'Updated comment without non-BMP characters';Une fois que vous avez supprimé ou mis à jour tous les commentaires d’index non pris en charge, la vérification préalable aboutit et la mise à niveau peut avoir lieu.
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3IndexComments", "title": "Check for invalid utf8mb3 index comments.", "status": "OK", "detectedProblems": [] }, - auroraUpgradeCheckForInvalidUtf8mb3TableComments
-
Niveau de vérification préalable : erreur
Rechercher la présence de caractères utf8mb3 non valides dans la définition de la table
Cette vérification préalable identifie les tables contenant des commentaires dont l’encodage de caractères
utf8mb3n’est pas valide. Dans MySQL 8.0, une validation plus stricte est appliquée à l’encodage des caractères dans les métadonnées, y compris les commentaires des tables. Si des commentaires de table contiennent des caractères non valides dans le jeu de caractèresutf8mb3, la mise à niveau échoue.Pour résoudre ce problème, vous devez modifier ces commentaires de table afin de supprimer ou de remplacer tout caractère non BMP avant de tenter la mise à niveau.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3TableComments", "title": "Check for invalid utf8mb3 table comments.", "status": "OK", "description": "Following table(s) has/have invalid utf8mb3 comments.", "detectedProblems": [ { "level": "Error", "dbObject": "precheck.utf8mb3_table_with_comment", "description": "Table precheck.utf8mb3_table_with_comment has invalid utf8mb3 comments. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again." } ] },La vérification préalable signale des commentaires
utf8mb3non valides définis pour les tablesutf8mb3_table_with_commentdans la base de données de test.Pour résoudre ce problème, identifiez la table contenant les caractères non pris en charge et mettez à jour les commentaires. Tout d’abord, examinez la structure de la table et identifiez les commentaires.
MySQL> SHOW CREATE TABLE precheck.utf8mb3_table_with_comment\G *************************** 1. row *************************** Table: utf8mb3_table_with_comment Create Table: CREATE TABLE `utf8mb3_table_with_comment` ( `id` int(11) NOT NULL, `name` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='This table comment contains flag 🏳️' 1 row in set (0.00 sec)Une fois que vous avez identifié les commentaires de table contenant des caractères non pris en charge, mettez-les à jour avec l’instruction
ALTER TABLE.MySQL> ALTER TABLE precheck.utf8mb3_table_with_comment COMMENT='Updated comment without non-BMP characters';Vous pouvez également supprimer le commentaire.
MySQL> ALTER TABLE precheck.utf8mb3_table_with_comment COMMENT='';Une fois que vous avez supprimé tous les caractères non pris en charge de tous les commentaires de table, la vérification préalable aboutit.
{ "id": "auroraUpgradeCheckForInvalidUtf8mb3TableComments", "title": "Check for invalid utf8mb3 table comments.", "status": "OK", "detectedProblems": [] }, - auroraUpgradeCheckForMasterUser
-
Niveau de vérification préalable : erreur
Vérifier si l’utilisateur principal RDS existe
MySQL 8 a ajouté un nouveau modèle de privilèges prenant en charge les rôles
et les privilèges dynamiques afin de rendre la gestion des privilèges plus facile et plus précise. Dans le cadre de cette modification, Aurora MySQL a introduit le nouveau rôle rds_superuser_role, qui est automatiquement accordé à l’utilisateur principal de la base de données lors de la mise à niveau d’Aurora MySQL version 2 vers la version 3.Pour plus d’informations sur les rôles et privilèges attribués à l’utilisateur principal dans Aurora MySQL, consultez Privilèges du compte utilisateur principal. Pour plus d’informations sur le modèle de privilèges basé sur les rôles dans Aurora MySQL version 3, consultez Modèle de privilège basé sur les rôles.
Cette vérification préalable s’assure que l’utilisateur principal se trouve dans la base de données. Si l’utilisateur principal n’y est pas, la vérification préalable échoue. Pour autoriser la mise à niveau, recréez l’utilisateur principal en réinitialisant son mot de passe ou en créant manuellement l’utilisateur. Réessayez ensuite la mise à niveau. Pour plus d’informations sur la réinitialisation du mot de passe de l’utilisateur principal, consultez Modification du mot de passe de l’utilisateur principal de la base de données..
Exemple de sortie :
{ "id": "auroraUpgradeCheckForMasterUser", "title": "Check if master user exists", "status": "OK", "description": "Throws error if master user has been dropped!", "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.MasterAccounts.html", "detectedProblems": [ { "level": "Error", "dbObject": "all", "description": "Your Master User on host '%' has been dropped. To proceed with the upgrade, recreate the master user `reinvent` on default host '%'" } ] }Une fois que vous avez réinitialisé le mot de passe de l’utilisateur principal, la vérification préalable aboutit et vous pouvez réessayer la mise à niveau.
L’exemple suivant utilise l’AWS CLI pour réinitialiser le mot de passe. Les modifications de mot de passe sont appliquées immédiatement.
aws rds modify-db-cluster \ --db-cluster-identifiermy-db-cluster\ --master-user-passwordmy-new-passwordEnsuite, la vérification préalable aboutit.
{ "id": "auroraUpgradeCheckForMasterUser", title": "Check if master user exists", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForPrefixIndexOnGeometryColumns
-
Niveau de vérification préalable : erreur
Recherche la présence de colonnes de géométrie sur les index à préfixe
Depuis MySQL 8.0.12
, il n’est plus possible de créer un index avec préfixe sur une colonne avec le type de données GEOMETRY . Pour plus d’informations, consultez WL#11808 . Si de tels index existent, la mise à niveau échouera. Pour résoudre le problème, supprimez les index
GEOMETRYà préfixe dans les tables mentionnées lors de l’échec de la vérification préalable.Exemple de sortie :
{ "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns", "title": "Check for geometry columns on prefix indexs", "status": "OK", "description": "Consider dropping the prefix Indexes of geometry columns and restart the upgrade.", "detectedProblems": [ { "level": "Error", "dbObject": "test.geom_index_prefix", "description": "Table `test`.`geom_index_prefix` has an index `LatLon` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `LatLon` ON `test`.`geom_index_prefix`;" } ] }La vérification préalable signale une erreur, car la table
test.geom_index_prefixcontient un index avec un préfixe dans une colonneGEOMETRY.Une fois que vous supprimez cet index, la vérification préalable aboutit.
{ "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns", "title": "Check for geometry columns on prefix indexs", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForSpecialCharactersInProcedures
-
Niveau de vérification préalable : erreur
Rechercher les incohérences liées aux caractères spéciaux dans les procédures stockées
Avant MySQL 8.0, les noms de base de données, les noms de tables et les autres objets correspondaient à des fichiers du répertoire de données, c’est-à-dire à des métadonnées basées sur des fichiers. Dans le cadre de la mise à niveau vers MySQL 8.0, tous les objets de base de données sont migrés vers les nouvelles tables du dictionnaire de données internes qui sont stockées dans le schéma
mysqlafin de prendre en charge l’Atomic Data Dictionaryrécemment implémenté. Dans le cadre de la migration des procédures stockées, la définition et le corps de chaque procédure sont validés lors de leur ingestion dans le nouveau dictionnaire de données. Avant MySQL 8, dans certains cas, il était possible de créer des routines stockées ou d’insérer directement dans la table
mysql.procdes procédures contenant des caractères spéciaux. Par exemple, vous pouviez créer une procédure stockée avec un commentaire contenant un espace incassablenon conforme, \xa0. Si de telles procédures sont identifiées, la mise à niveau échouera.Cette vérification préalable s’assure que les corps et les définitions de vos procédures stockées ne contiennent pas ces caractères. Pour permettre la mise à niveau, recréez ces procédures stockées sans aucun caractère masqué ou spécial.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForSpecialCharactersInProcedures", "title": "Check for inconsistency related to special characters in stored procedures.", "status": "OK", "description": "Following procedure(s) has special characters inconsistency.", "detectedProblems": [ { "level": "Error", "dbObject": "information_schema.routines", "description": "Data Dictionary Metadata is inconsistent for the procedure `get_version_proc` in the database `test` due to usage of special characters in procedure body. To avoid that, drop and recreate the procedure without any special characters before proceeding with the Upgrade." } ] }La vérification préalable indique que le cluster de bases de données contient une procédure appelée
get_version_procdans la base de donnéestestdont le corps de la procédure contient des caractères spéciaux.Après avoir supprimé et recréé la procédure stockée, la vérification préalable aboutit, permettant ainsi à la mise à niveau de se poursuivre.
{ "id": "auroraUpgradeCheckForSpecialCharactersInProcedures", "title": "Check for inconsistency related to special characters in stored procedures.", "status": "OK", "detectedProblems": [] }, - auroraUpgradeCheckForSysSchemaObjectTypeMismatch
-
Niveau de vérification préalable : erreur
Vérifier les incohérences de type d’objet par rapport au schéma
sysLe schéma sys
est un ensemble d’objets et de vues d’une base de données MySQL, qui aident les utilisateurs à dépanner, optimiser et surveiller leurs instances de base de données. Lorsque vous effectuez une mise à niveau d’une version majeure d’Aurora MySQL version 2 vers Aurora MySQL version 3, les vues du schéma syssont recréées et mises à jour selon les nouvelles définitions d’Aurora MySQL version 3.Dans le cadre de la mise à niveau, si des objets du schéma
syssont définis à l’aide de moteurs de stockage (sys_config/BASE TABLEdans INFORMATION_SCHEMA.TABLES) au lieu de vues, la mise à niveau échouera. Ces tables se trouvent dans information_schema.tables. Ce comportement n’est pas attendu, mais dans certains cas, il peut se produire en raison d’une erreur de l’utilisateur.Cette vérification préalable valide tous les objets de schéma
syspour s’assurer qu’ils utilisent les définitions de table correctes et que les vues ne sont pas définies par erreur comme des tables InnoDB ou MyISAM. Pour résoudre le problème, corrigez manuellement les objets renvoyés en les renommant ou en les supprimant. Réessayez ensuite la mise à niveau.Exemple de sortie :
{ "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch", "title": "Check object type mismatch for sys schema.", "status": "OK", "description": "Database contains objects with type mismatch for sys schema.", "detectedProblems": [ { "level": "Error", "dbObject": "sys.waits_global_by_latency", "description": "Your object sys.waits_global_by_latency has a type mismatch. To fix the inconsistency we recommend to rename or remove the object before upgrading (use RENAME TABLE command). " } ] }La vérification préalable indique que la vue sys.waits_global_by_latency
du schéma sysprésente une incompatibilité de type qui empêche la mise à niveau d’avoir lieu.Une fois connecté à l’instance de base de données, vous pouvez voir que cet objet est défini comme une table InnoDB, alors qu’il devrait s’agir d’une vue.
mysql> show create table sys.waits_global_by_latency\G *************************** 1. row *************************** Table: waits_global_by_latency Create Table: CREATE TABLE `waits_global_by_latency` ( `events` varchar(128) DEFAULT NULL, `total` bigint(20) unsigned DEFAULT NULL, `total_latency` text, `avg_latency` text, `max_latency` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)Pour résoudre ce problème, nous pouvons soit supprimer et recréer la vue avec la définition appropriée
, soit la renommer. Au cours du processus de mise à niveau, l’objet sera automatiquement créé avec la définition de table appropriée. mysql> RENAME TABLE sys.waits_global_by_latency to sys.waits_global_by_latency_old; Query OK, 0 rows affected (0.01 sec)Après cela, la vérification préalable aboutira.
{ "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch", "title": "Check object type mismatch for sys schema.", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckForViewColumnNameLength
-
Niveau de vérification préalable : erreur
Vérifier la limite supérieure du nom de colonne dans la vue
La longueur maximale autorisée d’un nom de colonne
dans MySQL est de 64 caractères. Avant MySQL 8.0, dans certains cas, il était possible de créer une vue avec un nom de colonne supérieur à 64 caractères. Si des vues de ce type existent sur votre instance de base de données, une erreur est générée par la vérification préalable et la mise à niveau échoue. Pour permettre la mise à niveau, vous devez recréer les vues en question, en vous assurant que la longueur de leurs colonnes est inférieure à 64 caractères. Réessayez ensuite la mise à niveau. Exemple de sortie :
{ "id": "auroraUpgradeCheckForViewColumnNameLength", "title": "Check for upperbound limit related to column name in view.", "status": "OK", "description": "Following view(s) has column(s) with length greater than 64.", "detectedProblems": [ { "level": "Error", "dbObject": "test.colname_view_test.col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad", "description": "View `test`.`colname_view_test`has column `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` with invalid column name length. To avoid Upgrade errors, view should be altered by renaming the column name so that its length is not 0 and doesn't exceed 64." } ] }La vérification préalable indique que la vue
test.colname_view_testcontient une colonnecol2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_paddont la longueur dépasse la longueur maximale autorisée de 64 caractères.En examinant la définition de la vue, nous pouvons voir la colonne incriminée.
mysql> desc `test`.`colname_view_test`; +------------------------------------------------------------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------------------------------------------------------+-------------+------+-----+---------+-------+ | col1 | varchar(20) | YES | | NULL | | | col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad | int(11) | YES | | NULL | | +------------------------------------------------------------------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)Pour permettre la mise à niveau, recréez la vue en vous assurant que la longueur de la colonne ne dépasse pas 64 caractères.
mysql> drop view `test`.`colname_view_test`; Query OK, 0 rows affected (0.01 sec) mysql> create view `test`.`colname_view_test`(col1, col2_nopad) as select inf, fodcol from test; Query OK, 0 rows affected (0.01 sec) mysql> desc `test`.`colname_view_test`; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | col1 | varchar(20) | YES | | NULL | | | col2_nopad | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)Après cela, la vérification préalable aboutira.
{ "id": "auroraUpgradeCheckForViewColumnNameLength", "title": "Check for upperbound limit related to column name in view.", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckIndexLengthLimitOnTinyColumns
-
Niveau de vérification préalable : erreur
Rechercher les tables dont les index sont définis avec une longueur de préfixe supérieure à 255 octets dans les petites colonnes
Lorsque vous créez un index dans une colonne à l’aide d’un type de données binaire
dans MySQL, vous devez ajouter une longueur de préfixe dans la définition de l’index. Avant MySQL 8.0, dans certains cas, il était possible de spécifier une longueur de préfixe supérieure à la taille maximale autorisée pour ces types de données. Prenons l’exemple des colonnes TINYTEXTetTINYBLOB, où la taille de données maximale autorisée est de 255 octets, mais où des préfixes d’index ont une taille supérieure. Pour plus d’informations, consultez Limites InnoDBdans la documentation MySQL. Si cette vérification préalable échoue, supprimez l’index incriminé ou réduisez la longueur du préfixe des colonnes
TINYTEXTetTINYBLOBde l’index pour qu’elle ne dépasse pas 255 octets. Réessayez ensuite la mise à niveau.Exemple de sortie :
{ "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns", "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns", "status": "OK", "description": "Prefix length of the indexes defined on tiny columns cannot exceed 255 bytes. With utf8mb4 char set, this limits the prefix length supported upto 63 characters only. A larger prefix length was allowed in MySQL5.7 using innodb_large_prefix parameter. This parameter is deprecated in MySQL 8.0.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html, https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html", "detectedProblems": [ { "level": "Error", "dbObject": "test.tintxt_prefixed_index.col1", "description": "Index 'PRIMARY' on tinytext/tinyblob column `col1` of table `test.tintxt_prefixed_index` is defined with prefix length exceeding 255 bytes. Reduce the prefix length to <=255 bytes depending on character set used. For utf8mb4, it should be <=63." } ] }La vérification préalable signale une erreur pour la table
test.tintxt_prefixed_index, car elle contient un indexPRIMARYdont le préfixe est supérieur à 255 octets sur une colonne TINYTEXT ou TINYBLOB.En examinant la définition de cette table, nous pouvons voir que la clé primaire a le préfixe 65 sur la colonne
TINYTEXTcol1. Comme la table est définie à l’aide du jeu de caractèresutf8mb4, qui stocke 4 octets par caractère, le préfixe dépasse la limite de 255 octets.mysql> show create table `test`.`tintxt_prefixed_index`\G *************************** 1. row *************************** Table: tintxt_prefixed_index Create Table: CREATE TABLE `tintxt_prefixed_index` ( `col1` tinytext NOT NULL, `col2` tinytext, `col_id` tinytext, PRIMARY KEY (`col1`(65)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC 1 row in set (0.00 sec)Le remplacement du préfixe d’index par 63 lors de l’utilisation du jeu de caractères
utf8mb4permettra à la mise à niveau d’avoir lieu.mysql> alter table `test`.`tintxt_prefixed_index` drop PRIMARY KEY, ADD PRIMARY KEY (`col1`(63)); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0Après cela, la vérification préalable aboutira.
{ "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns", "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns", "status": "OK", "detectedProblems": [] } - auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable
-
Niveau de vérification préalable : erreur
Rechercher toute incohérence des métadonnées InnoDB pour la table
mysql.hostIl s’agit d’une vérification préalable interne, qui est effectuée par le service RDS. Toutes les erreurs seront traitées automatiquement lors de la mise à niveau et peuvent être ignorées sans risque.
Si vous rencontrez des erreurs lors de cette vérification préalable, ouvrez une demande d’assistance auprès d’AWS Support
pour que l’incohérence des métadonnées soit résolue. Vous pouvez également réessayer la mise à niveau en procédant à un vidage logique, puis en effectuant une restauration sur un nouveau cluster de bases de données Aurora MySQL version 3.
Avertissements
Les vérifications préalables suivantes génèrent des avertissements en cas d’échec, mais la mise à niveau peut tout de même avoir lieu.
Rubriques
Vérifications préalables de MySQL qui signalent des avertissements
Les vérifications préalables suivantes sont tirées de Community MySQL :
- defaultAuthenticationPlugin
-
Niveau de vérification préalable : avertissement
Considérations relatives au nouveau plug+in d’authentification par défaut
Dans MySQL 8.0, le plug-in d’authentification
caching_sha2_passworda été introduit afin de fournir un chiffrement des mots de passe plus sécurisé et de meilleures performances que le plug-inmysql_native_passwordobsolète. Pour Aurora MySQL version 3, le plug-in d’authentification par défaut utilisé par les utilisateurs de base de données est le plug-inmysql_native_password.Cette vérification préalable indique que ce plug-in sera supprimé et sera remplacé dans une future version majeure. Pensez à évaluer la compatibilité des clients et des utilisateurs de votre application avant cette modification.
Pour plus d’informations, consultez Problèmes de compatibilité avec caching_sha2_password et solutions
dans la documentation MySQL. Exemple de sortie :
{ "id": "defaultAuthenticationPlugin", "title": "New default authentication plugin considerations", "description": "Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password' (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file:\n\n[mysqld]\ndefault_authentication_plugin=mysql_native_password\n\nHowever, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security.\nIf you are using replication please take time to understand how the authentication plugin changes may impact you.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues\nhttps://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication" }, - maxdbFlagCheck
-
Niveau de vérification préalable : avertissement
Utilisation d’un indicateur
MAXDBsql_modeobsolèteDans MySQL 8.0, plusieurs options de variables système sql_mode
obsolètes ont été supprimées , y compris MAXDB. Cette vérification préalable examine toutes les sessions actuellement connectées, ainsi que les routines et les déclencheurs, pour s’assurer quesql_moden’est défini sur aucune combinaison incluantMAXDBpour aucune session, aucune routine ni aucun déclencheur.Exemple de sortie :
{ "id": "maxdbFlagCheck", "title": "Usage of obsolete MAXDB sql_mode flag", "status": "OK", "description": "Warning: The following DB objects have the obsolete MAXDB option persisted for sql_mode, which will be cleared during the upgrade. It can potentially change the datatype DATETIME into TIMESTAMP if it is used inside object's definition, and this in turn can change the behavior in case of dates earlier than 1970 or later than 2037. If this is a concern, please redefine these objects so that they do not rely on the MAXDB flag before running the upgrade.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals", "detectedProblems": [ { "level": "Warning", "dbObject": "test.maxdb_stored_routine", "description": "PROCEDURE uses obsolete MAXDB sql_mode", "dbObjectType": "Routine" } ] }La vérification préalable indique que la routine
test.maxdb_stored_routinecontient une optionsql_modenon prise en charge.Une fois connecté à la base de données, vous pouvez voir dans la définition de routine que
sql_modecontientMAXDB.> SHOW CREATE PROCEDURE test.maxdb_stored_routine\G *************************** 1. row *************************** Procedure: maxdb_stored_routine sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"() BEGIN SELECT * FROM test; END character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci 1 row in set (0.00 sec)Pour résoudre le problème, recréez la procédure après avoir défini la configuration
sql_modeappropriée sur le client.Note
Selon la documentation MySQL
, MySQL stocke le paramètre sql_modeen vigueur lorsqu’une routine est créée ou modifiée. Il exécute toujours la routine avec ce paramètre, quel que soit le paramètresql_modeau moment où la routine démarre.Avant de modifier
sql_mode, consultez Modes SQL Serverdans la documentation MySQL. Évaluez soigneusement tout impact potentiel de cette action sur votre application. Recréez la procédure sans l’élément
sql_modenon pris en charge.mysql > set sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql > DROP PROCEDURE test.maxdb_stored_routine\G Query OK, 0 rows affected (0.00 sec) mysql > mysql > DELIMITER $$ mysql > mysql > CREATE PROCEDURE test.maxdb_stored_routine() -> SQL SECURITY DEFINER -> BEGIN -> SELECT * FROM test; -> END$$ Query OK, 0 rows affected (0.00 sec) mysql > mysql > DELIMITER ; mysql > show create procedure test.maxdb_stored_routine\G *************************** 1. row *************************** Procedure: maxdb_stored_routine sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"() BEGIN SELECT * FROM test; END character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci 1 row in set (0.00 sec)La vérification préalable aboutit.
{ "id": "maxdbFlagCheck", "title": "Usage of obsolete MAXDB sql_mode flag", "status": "OK", "detectedProblems": [] } - mysqlDollarSignNameCheck
-
Niveau de vérification préalable : avertissement
Rechercher l’utilisation obsolète du signe dollar dans les noms d’objets
Depuis MySQL 8.0.32
, l’utilisation du signe dollar ( $) comme premier caractère d’un identifiant sans guillemets est obsolète. Si vous avez des schémas, des tables, des vues, des colonnes ou des routines utilisant$comme premier caractère, cette vérification préalable renvoie un avertissement. Bien que cet avertissement n’empêche pas la mise à niveau d’avoir lieu, nous vous recommandons de prendre rapidement des mesures pour résoudre ce problème. À partir de MySQL 8.4, tout identifiant de ce type renverra une erreur de syntaxe plutôt qu’un avertissement. Exemple de sortie :
{ "id": "mysqlDollarSignNameCheck", "title": "Check for deprecated usage of single dollar signs in object names", "status": "OK", "description": "Warning: The following objects have names with deprecated usage of dollar sign ($) at the begining of the identifier. To correct this warning, ensure, that names starting with dollar sign, also end with it, similary to quotes ($example$). ", "detectedProblems": [ { "level": "Warning", "dbObject": "test.$deprecated_syntx", "description": " name starts with $ sign." } ] },La vérification préalable signale un avertissement, car la table
$deprecated_syntxdu schématestcontient un$comme premier caractère. - reservedKeywordsCheck
-
Niveau de vérification préalable : avertissement
Utilisation d’objets de base de données dont les noms sont en conflit avec les nouveaux mots clés réservés
Cette vérification est similaire à routineSyntaxCheck, dans la mesure où il recherche l’utilisation d’objets de base de données dont les noms sont en conflit avec les nouveaux mots clés réservés. Bien que les avertissements ne bloquent pas les mises à niveau, vous devez les évaluer attentivement.
Exemple de sortie :
En utilisant l’exemple précédent avec la table nommée
except, la vérification préalable renvoie un avertissement :{ "id": "reservedKeywordsCheck", "title": "Usage of db objects with names conflicting with new reserved keywords", "status": "OK", "description": "Warning: The following objects have names that conflict with new reserved keywords. Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors.", "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html", "detectedProblems": [ { "level": "Warning", "dbObject": "test.except", "description": "Table name", "dbObjectType": "Table" } ] }Cet avertissement vous indique que vous pouvez avoir à vérifier certaines requêtes d’application. Si vos requêtes d’application n’échappent pas correctement les littéraux de chaîne
, elles risquent de rencontrer des erreurs après la mise à niveau vers MySQL 8.0. Vérifiez vos applications pour confirmer ce comportement, en les testant par rapport à un clone ou à un instantané de votre cluster de bases de données Aurora MySQL exécuté sur la version 3. Exemple de requête d’application non échappée qui échouera après la mise à niveau :
SELECT * FROM escape;Exemple de requête d’application correctement échappée qui aboutira après la mise à niveau :
SELECT * FROM 'escape'; - utf8mb3Check
-
Niveau de vérification préalable : avertissement
Utilisation du jeu de caractères
utf8mb3Dans MySQL 8.0, le jeu de caractères
utf8mb3est obsolète et sera supprimé dans une future version majeure de MySQL. Cette vérification préalable est mise en œuvre pour émettre un avertissement si des objets de base de données utilisant ce jeu de caractères sont détectés. Cela n’empêchera pas la mise à niveau d’avoir lieu, mais nous vous recommandons vivement de penser à migrer les tables vers le jeu de caractèresutf8mb4, qui est le jeu de caractères par défaut à partir de MySQL 8.0. Pour plus d’informations sur utf8mb3et utf8mb4 , consultez Conversion entre les jeux de caractères Unicode à 3 octets et à 4 octets dans la documentation MySQL. Exemple de sortie :
{ "id": "utf8mb3", "title": "Usage of utf8mb3 charset", "status": "OK", "description": "Warning: The following objects use the deprecated utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. The utf8mb3 character is subject to removal in the future.", "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html", "detectedProblems": [ { "level": "Warning", "dbObject": "test.t1.col1", "description": "column's default character set: utf8", "dbObjectType": "Column" }, { "level": "Warning", "dbObject": "test.t1.col2", "description": "column's default character set: utf8", "dbObjectType": "Column" } ] }Pour résoudre ce problème, vous devez reconstruire les objets et les tables référencés. Pour plus d’informations et pour connaître les conditions préalables, consultez Conversion entre les jeux de caractères Unicode à 3 octets et à 4 octets
dans la documentation MySQL. - zeroDatesCheck
-
Niveau de vérification préalable : avertissement
Aucune valeur de date, de date/heure ni d’horodatage
MySQL applique désormais des règles plus strictes concernant l’utilisation de valeurs nulles dans les colonnes date, datetime et timestamp. Nous vous recommandons d’utiliser les modes
NO_ZERO_IN_DATEetNO_ZERO_DATE SQLconjointement avec le modestrict, car ils seront fusionnés avec le modestrictdans une future version de MySQL.Si le paramètre
sql_modede l’une de vos connexions à la base de données, au moment de l’exécution de la vérification préalable, n’inclut pas ces modes, un avertissement sera émis lors de la vérification préalable. Il est possible que les utilisateurs puissent toujours insérer des valeurs nulles pour la date, les date et heure ou l’horodatage. Cependant, nous vous conseillons vivement de remplacer les valeurs nulles par des valeurs valides, car leur comportement pourrait changer à l’avenir et elles pourraient cesser de fonctionner correctement. Comme il s’agit d’un avertissement, la mises à niveau ne sera pas bloquée, mais nous vous recommandons de commencer à planifier d’apporter les modifications nécessaires.Exemple de sortie :
{ "id": "zeroDatesCheck", "title": "Zero Date, Datetime, and Timestamp values", "status": "OK", "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.", "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/", "detectedProblems": [ { "level": "Warning", "dbObject": "global.sql_mode", "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates" }, { "level": "Warning", "dbObject": "session.sql_mode", "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates" } ] }
Vérifications préalables d’Aurora MySQL qui signalent des avertissements
Les vérifications préalables suivantes sont spécifiques à Aurora MySQL :
- auroraUpgradeCheckForRollbackSegmentHistoryLength
-
Niveau de vérification préalable : avertissement
Vérifie si la longueur de la liste d’historique des segments de restauration pour le cluster est élevée
Comme indiqué dans auroraUpgradeCheckForIncompleteXATransactions, lors de l’exécution du processus de mise à niveau de version majeure, il est essentiel que l’instance de base de données Aurora MySQL version 2 soit complètement arrêtée
. Cela garantit que toutes les transactions sont validées ou annulées, et qu’InnoDB a purgé tous les enregistrements du journal d’annulation. Si la longueur de la liste d’historique des segments de restauration de votre cluster de bases de données est élevée, cela peut prolonger le temps nécessaire à InnoDB pour purger les enregistrements du journal d’annulation. Cela peut entraîner une durée d’indisponibilité prolongée pendant le processus de mise à niveau de la version majeure. Si la vérification préalable détecte que la longueur de cette liste sur votre cluster de bases de données est élevé, elle émet un avertissement. Bien que cet avertissement n’empêche pas la mise à niveau d’avoir lieu, nous vous recommandons de surveiller de près la longueur de cette liste sur votre cluster de bases de données. Une longueur de liste d’historique faible réduit la durée d’indisponibilité requise pendant une mise à niveau de version majeure. Pour plus d’informations sur la surveillance de la longueur de la liste d’historique, consultez La longueur de la liste d’historique InnoDB a considérablement augmenté.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForRollbackSegmentHistoryLength", "title": "Checks if the rollback segment history length for the cluster is high", "status": "OK", "description": "Rollback Segment History length is greater than 1M. Upgrade may take longer time.", "detectedProblems": [ { "level": "Warning", "dbObject": "information_schema.innodb_metrics", "description": "The InnoDB undo history list length('trx_rseg_history_len') is 82989114. Upgrade may take longer due to purging of undo information for old row versions." } ] }La vérification préalable renvoie un avertissement, car elle a détecté que la longueur de la liste d’historique d’annulation d’InnoDB était élevée sur le cluster de bases de données (82989114). Bien que la mise à niveau se poursuive, en fonction du nombre d’annulations à purger, elle peut prolonger la durée d’indisponibilité requise pendant le processus de mise à niveau.
Nous vous recommandons d’examiner les transactions en cours sur votre cluster de bases de données avant d’exécuter la mise à niveau en production, afin de vous assurer que la longueur de votre liste d’historique reste à une taille gérable.
- auroraUpgradeCheckForUncommittedRowModifications
-
Niveau de vérification préalable : avertissement
Vérifie s’il existe de nombreuses modifications de ligne non validées
Comme indiqué dans auroraUpgradeCheckForIncompleteXATransactions, lors de l’exécution du processus de mise à niveau de version majeure, il est essentiel que l’instance de base de données Aurora MySQL version 2 soit complètement arrêtée
. Cela garantit que toutes les transactions sont validées ou annulées, et qu’InnoDB a purgé tous les enregistrements du journal d’annulation. Si votre cluster de bases de données contient des transactions qui ont modifié un grand nombre de lignes, cela peut prolonger le temps nécessaire à InnoDB pour annuler cette transaction dans le cadre du processus d’arrêt complet. Si la vérification préalable détecte des transactions de longue durée comportant un grand nombre de lignes modifiées sur votre cluster de bases de données, un avertissement s’affiche. Bien que cet avertissement n’empêche pas la mise à niveau d’avoir lieu, nous vous recommandons de surveiller de près la taille des transactions actives sur votre cluster de bases de données. Une longueur de liste d’historique faible réduit la durée d’indisponibilité requise pendant une mise à niveau de version majeure.
Exemple de sortie :
{ "id": "auroraUpgradeCheckForUncommittedRowModifications", "title": "Checks if there are many uncommitted modifications to rows", "status": "OK", "description": "Database contains uncommitted row changes greater than 10M. Upgrade may take longer time.", "detectedProblems": [ { "level": "Warning", "dbObject": "information_schema.innodb_trx", "description": "The database contains 11000000 uncommitted row change(s) in 1 transaction(s). Upgrade may take longer due to transaction rollback." } ] },La vérification préalable indique que le cluster de bases de données contient une transaction avec 11 000 000 modifications de lignes non validées qui devront être annulées pendant le processus d’arrêt complet. La mise à niveau aura lieu, mais pour réduire la durée d’indisponibilité pendant le processus de mise à niveau, nous vous recommandons de surveiller et d’étudier ce cas avant d’exécuter la mise à niveau sur vos clusters de production.
Pour consulter les transactions actives sur votre instance de base de données d’enregistreur, vous pouvez utiliser la table information_schema.innodb_trx
. La requête suivante sur l’instance de base de données d’enregistreur indique les transactions en cours, la durée d’exécution, l’état et les lignes modifiées pour le cluster de bases de données. # Example of uncommitted transaction mysql> SELECT trx_started, TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running, trx_mysql_thread_id AS show_processlist_connection_id, trx_id, trx_state, trx_rows_modified AS rows_modified FROM information_schema.innodb_trx; +---------------------+------------------------------+--------------------------------+----------+-----------+---------------+ | trx_started | seconds_trx_has_been_running | show_processlist_connection_id | trx_id | trx_state | rows_modified | +---------------------+------------------------------+--------------------------------+----------+-----------+---------------+ | 2024-08-12 18:32:52 | 1592 | 20041 | 52866130 | RUNNING | 11000000 | +---------------------+------------------------------+--------------------------------+----------+-----------+---------------+ 1 row in set (0.01 sec) # Example of transaction rolling back mysql> SELECT trx_started, TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running, trx_mysql_thread_id AS show_processlist_connection_id, trx_id, trx_state, trx_rows_modified AS rows_modified FROM information_schema.innodb_trx; +---------------------+------------------------------+--------------------------------+----------+--------------+---------------+ | trx_started | seconds_trx_has_been_running | show_processlist_connection_id | trx_id | trx_state | rows_modified | +---------------------+------------------------------+--------------------------------+----------+--------------+---------------+ | 2024-08-12 18:32:52 | 1719 | 20041 | 52866130 | ROLLING BACK | 10680479 | +---------------------+------------------------------+--------------------------------+----------+--------------+---------------+ 1 row in set (0.01 sec)Une fois la transaction validée ou annulée, la vérification préalable ne renvoie plus d’avertissement. Consultez la documentation MySQL et faites appel l’équipe chargée de votre application avant d’annuler des transactions importantes, car la restauration peut prendre un certain temps, en fonction de la taille des transactions.
{ "id": "auroraUpgradeCheckForUncommittedRowModifications", "title": "Checks if there are many uncommitted modifications to rows", "status": "OK", "detectedProblems": [] },Pour plus d’informations sur l’optimisation de la gestion des transactions InnoDB et sur l’impact potentiel de l’exécution et de l’annulation de transactions importantes sur les instances de base de données MySQL, consultez Optimisation de la gestion des transactions InnoDB
dans la documentation MySQL.
Notifications
La vérification préalable suivante génère une notification en cas d’échec, mais la mise à niveau peut tout de même avoir lieu.
- sqlModeFlagCheck
-
Niveau de vérification préalable : notification
Utilisation d’indicateurs
sql_modeobsolètesOutre
MAXDB, plusieurs autres optionssql_modeont été supprimées: DB2,MSSQL,MYSQL323,MYSQL40,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS,NO_KEY_OPTIONSetNO_TABLE_OPTIONS. Depuis MySQL 8.0, aucune de ces valeurs ne peut être affectée à la variable systèmesql_mode. Si cette vérification préalable détecte des sessions en cours utilisant ces paramètressql_mode, assurez-vous que les groupes de paramètres de votre instance de base de données et de cluster de bases de données, ainsi que les applications et les configurations clientes, sont mis à jour pour les désactiver. Pour plus d’informations, consultez la documentation MySQL. Exemple de sortie :
{ "id": "sqlModeFlagCheck", "title": "Usage of obsolete sql_mode flags", "status": "OK", "detectedProblems": [] }Pour résoudre l’un de ces échecs de vérification préalable, consultez maxdbFlagCheck.
Erreurs, avertissements ou notifications
La vérification préalable suivante peut renvoyer une erreur, un avertissement ou une notification en fonction de sa sortie.
- checkTableOutput
-
Niveau de vérification préalable : erreur, avertissement ou notification
Problèmes signalés par la commande
check table x for upgradeAvant de commencer la mise à niveau vers Aurora MySQL version 3,
check table for upgradeest exécuté sur chaque table dans les schémas utilisateur de votre cluster de bases de données. Cette vérification préalable n’est la même que checkTableMysqlSchema.La commande
check table for upgradeexamine les tables pour détecter tout problème potentiel pouvant survenir lors d’une mise à niveau vers une version plus récente de MySQL. L’exécution de cette commande avant de tenter une mise à niveau contribue à identifier et à résoudre les incompatibilités à l’avance, ce qui facilite le processus de mise à niveau réel.Cette commande effectue différentes vérifications sur chaque table, telles que les suivantes :
-
Vérification de la compatibilité de la structure et des métadonnées de la table avec la version MySQL cible
-
Identification des fonctionnalités obsolètes ou supprimées qui sont utilisées par la table
-
Confirmation de la possibilité de mettre à niveau la table sans perte de données
Contrairement aux autres vérifications préalables, celle-ci peut renvoyer une erreur, un avertissement ou une notification en fonction de la sortie
check table. Si cette vérification préalable renvoie des tables, examinez-les attentivement, ainsi que le code de retour et le message, avant de lancer la mise à niveau. Pour plus d’informations, consultez Instruction CHECK TABLEdans la documentation MySQL. Nous fournissons ci-dessous un exemple d’erreur et un exemple d’avertissement.
Exemple d’erreur :
{ "id": "checkTableOutput", "title": "Issues reported by 'check table x for upgrade' command", "status": "OK", "detectedProblems": [ { "level": "Error", "dbObject": "test.parent", "description": "Table 'test.parent' doesn't exist" } ] },La vérification préalable signale une erreur indiquant que la table
test.parentn’existe pas.Le fichier
mysql-error.logde l’instance de base de données d’enregistreur indique qu’il existe une erreur de clé étrangère.2024-08-13T15:32:10.676893Z 62 [Warning] InnoDB: Load table `test`.`parent` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again. 2024-08-13T15:32:10.676905Z 62 [Warning] InnoDB: Cannot open table test/parent from the internal data dictionary of InnoDB though the .frm file for the table exists. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.Connectez-vous à l’instance de base de données d’enregistreur et exécutez
show engine innodb status\Gpour obtenir plus d’informations sur l’erreur de clé étrangère.mysql> show engine innodb status\G *************************** 1. row *************************** Type: InnoDB Name: Status: ===================================== 2024-08-13 15:33:33 0x14ef7b8a1700 INNODB MONITOR OUTPUT ===================================== . . . ------------------------ LATEST FOREIGN KEY ERROR ------------------------ 2024-08-13 15:32:10 0x14ef6dbbb700 Error in foreign key constraint of table test/child: there is no index in referenced table which would contain the columns as the first columns, or the data types in the referenced table do not match the ones in table. Constraint: , CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`) The index in the foreign key in table is p_name_idx Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition. . .Le message
LATEST FOREIGN KEY ERRORindique que la contrainte de clé étrangèrefk_pnamedans la tabletest.child, qui référence la tabletest.parent, présente un problème d’index manquant ou d’incompatibilité du type de données. La documentation MySQL sur les contraintes liées aux clés étrangèresindique que les colonnes référencées dans une clé étrangère doivent avoir un index associé et que les colonnes parent/enfant doivent utiliser le même type de données. Pour vérifier si le problème est lié à un index manquant ou à une incompatibilité du type de données, connectez-vous à la base de données et vérifiez les définitions de table en désactivant temporairement la variable de session foreign_key_checks
. Nous pouvons maintenant voir que la contrainte enfant en question ( fk_pname) utilisep_name varchar(20) CHARACTER SET latin1 DEFAULT NULLpour référencer la table parentname varchar(20) NOT NULL. La table parent utiliseDEFAULT CHARSET=utf8, mais la colonnep_namede la table enfant utiliselatin1, de sorte que l’erreur d’incompatibilité du type de données est renvoyée.mysql> show create table parent\G ERROR 1146 (42S02): Table 'test.parent' doesn't exist mysql> show create table child\G *************************** 1. row *************************** Table: child Create Table: CREATE TABLE `child` ( `id` int(11) NOT NULL, `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL, PRIMARY KEY (`id`), KEY `p_name_idx` (`p_name`), CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> set foreign_key_checks=0; Query OK, 0 rows affected (0.00 sec) mysql> show create table parent\G *************************** 1. row *************************** Table: parent Create Table: CREATE TABLE `parent` ( `name` varchar(20) NOT NULL, PRIMARY KEY (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> show create table child\G *************************** 1. row *************************** Table: child Create Table: CREATE TABLE `child` ( `id` int(11) NOT NULL, `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL, PRIMARY KEY (`id`), KEY `p_name_idx` (`p_name`), CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)Pour résoudre ce problème, nous pouvons soit modifier la table enfant pour qu’elle utilise le même jeu de caractères que la table parent, soit modifier la table parent pour qu’elle utilise le même jeu de caractères que la table enfant. Ici, comme la table enfant utilise explicitement
latin1dans la définition de colonnep_name, nous exécutonsALTER TABLEpour modifier le jeu de caractères surutf8.mysql> alter table child modify p_name varchar(20) character set utf8 DEFAULT NULL; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> flush tables; Query OK, 0 rows affected (0.01 sec)Après cela, la vérification préalable aboutira et la mise à niveau pourra avoir lieu.
Exemple d’avertissement :
{ "id": "checkTableOutput", "title": "Issues reported by 'check table x for upgrade' command", "status": "OK", "detectedProblems": [ { "level": "Warning", "dbObject": "test.orders", "description": "Trigger test.orders.delete_audit_trigg does not have CREATED attribute." } ] }La vérification préalable signale un avertissement concernant le déclencheur
delete_audit_triggsur la tabletest.orders, car celui-ci ne possède pas d’attributCREATED. Selon la section Vérification de la compatibilité des versionsde la documentation MySQL, ce message est informatif et s’affiche pour les déclencheurs créés avant MySQL 5.7.2. Comme il s’agit d’un avertissement, il n’empêche pas la mise à niveau d’avoir lieu. Toutefois, si vous souhaitez résoudre le problème, vous pouvez recréer le déclencheur en question pour que la vérification préalable aboutisse sans avertissement.
{ "id": "checkTableOutput", "title": "Issues reported by 'check table x for upgrade' command", "status": "OK", "detectedProblems": [] }, -