Comment résoudre un problème d'échec de vérification préalable à la mise à niveau dans Amazon RDS pour MySQL ?

Lecture de 5 minute(s)
0

La vérification préalable à la mise à niveau échoue lorsque j'essaie de passer d'Amazon Relational Database Service (Amazon RDS) pour MySQL 5.7 à MySQL 8.0.

Brève description

En cas d'échec de vérification avant la mise à niveau sur votre instance de base de données, la mise à niveau de la version Amazon RDS pour MySQL s'arrête. Lorsque Amazon RDS détecte des incompatibilités, il fournit un fichier journal vous permettant de consulter les détails de l'échec de la vérification préalable.

Remarque : Un certain nombre de vérifications préalables différentes sont intégrées à la fois dans la base de données MySQL et dans Amazon RDS. Les vérifications préalables ne sont pas exécutées pour les mises à niveau sur les versions inférieures à MySQL 5.7. Pour les mises à niveau de MySQL 5.6 vers MySQL 5.7, les vérifications préalables se limitent à détecter les tables orphelines et les espaces de stockage suffisants pour recréer les tables.

Lorsque vous effectuez une mise à niveau de MySQL 5.7.x vers MySQL 8.0.x, Amazon RDS et Amazon Aurora MySQL-Compatible Edition exécutent automatiquement des vérifications préalables. Les vérifications préalables détectent les incompatibilités de données susceptibles d'affecter votre mise à niveau. Les vérifications préalables sont conçues pour minimaliser les temps d'arrêt imprévus lors d'une mise à niveau de version.

Si vous rencontrez un échec de vérification préalable à la mise à niveau lors de l'une de ces mises à niveau de version, consultez le fichier journal PrePatchCompatibility généré par Amazon RDS. Vous pouvez consulter le fichier journal de PrePatchCompatibility sous Journaux et événements dans la console Amazon RDS. Passez ensuite en revue les détails du problème d'incompatibilité répertorié et corrigez-le. Dans la plupart des cas, l'entrée du journal inclut un lien vers la documentation Amazon RDS pour MySQL expliquant comment corriger l'incompatibilité.

Résolution

Remarque : Si vous recevez des messages d'erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous que vous utilisez la version la plus récente de l'interface de ligne de commande AWS.

Consultez le message d'échec de la vérification préalable à la mise à niveau pour savoir pourquoi la mise à niveau a échoué. Reportez-vous à l'exemple suivant :

Executing Compatibility Checks for the MySQL server at localhost:3306.
Source Version: 5.7.40-log - Source distribution, Target Version: 8.0.32.

1) Usage of old temporal type
No issues found.
2) Usage of db objects with names conflicting with new reserved keywords
No issues found.
....
Errors: 1
Warnings: 0
Database Objects Affected: 14
----------------------- END OF LOG ----------------------

Vérifiez que le message contient des erreurs, des avertissements et des messages de niveau de notification spécifiques. Reportez-vous à la liste suivante pour identifier l'erreur, l'avertissement ou la notification que vous avez rencontré, puis résolvez les problèmes en conséquence :

ERROR : Correct these issues before upgrading to avoid compatibility issues.
WARNING : No fatal errors were found that would prevent an upgrade, but some potential issues were detected.
NOTICE : No known compatibility errors or issues were found. But you can check the NOTICE Level error logs.

1) Usage of old temporal type : ERROR
2) Usage of db objects with names conflicting with new reserved keywords : WARNING
3) Usage of utf8mb3 charset : NOTICE
4) Table names in the mysql schema conflicting with new tables in 8.0 : ERROR
5) Partitioned tables using engines with non native partitioning : ERROR
6) Foreign key constraint names longer than 64 characters : ERROR
7) Usage of obsolete MAXDB sql_mode flag : WARNING
8) Usage of obsolete sql_mode flags : NOTICE
9)  ENUM/SET column definitions containing elements longer than 255 characters : ERROR
10) Usage of partitioned tables in shared tablespaces : ERROR
11) Circular directory references in tablespace data file paths : ERROR
12) Usage of removed functions : ERROR
13) Usage of removed GROUP BY ASC/DESC syntax : ERROR
14) Removed system variables for error logging to the system log configuration : ERROR
15) Removed system variables : ERROR
16) System variables with new default values : WARNING
17) Schema inconsistencies resulting from file removal or corruption : ERROR
18) Issues reported by 'check table x for upgrade' command : ERROR or WARNING or NOTICE
19) The definer column for mysql.events cannot be null or blank. : ERROR
20) Tables with dangling FULLTEXT index reference : ERROR
21) Routines with deprecated keywords in definition : ERROR
22) DB instance must have enough free disk space : ERROR
23) Creating indexes larger than 767 bytes on tables with redundant row format might cause the tables to be inaccessible. : WARNING
24) The tables with redundant row format can't have an index larger than 767 bytes. : ERROR
25) Column definition mismatch between InnoDB Data Dictionary and actual table definition. : ERROR

Utilisez l'interface de ligne de commande AWS pour exécuter une commande similaire à la suivante afin de répertorier les fichiers journaux et de télécharger les données :

$ aws rds describe-db-log-files --db-instance-identifier <DB identifier> --query '*[].[LogFileName]' --output text

Sample:
[root@ip-x-x-x-x ec2-user]# aws rds describe-db-log-files --db-instance-identifier testinstance --query '*[].[LogFileName]' --output text
PrePatchCompatibility.log
error/mysql-error.log
error/mysql-error-running.log
error/mysql-error-running.log.2023-05-06.3
error/mysql-error-running.log.2023-05-09.4
error/mysql-error-running.log.2023-05-10.3
error/mysql-error-running.log.2023-05-12.19
mysqlUpgrade

Command to download the file:
$ aws rds download-db-log-file-portion --db-instance-identifier <DB identifier> \
--log-file-name PrePatchCompatibility.log --starting-token 0 \
--output text > <LogFileName to save a copy>

Sample:
$ aws rds download-db-log-file-portion --db-instance-identifier testinstance \
--log-file-name PrePatchCompatibility.log --starting-token 0 \
--output text > PrePatchCompatibilityCopy.log

Pour plus d'informations, reportez-vous à la documentation MySQL Mise à niveau vers MySQL 8.0 ? Voici ce que vous devez savoir.

Remarque : Il est recommandé de tester votre instance de base de données avant d'effectuer une mise à niveau de version majeure.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans