web-dev-qa-db-fra.com

La table mysql / innodb_index_stats présente une différence de longueur dans le nom de colonne nom_table. Veuillez exécuter mysql_upgrade

Dans mysqld.log J'ai des milliers de lignes comme:

Table mysql/innodb_index_stats has length mismatch in the column name table_name.  Please run mysql_upgrade

Donc, selon pratiquement tous les articles sur le sujet (et le message d'erreur lui-même):

mysql_upgrade -u root -p

Enter password: 
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
...

et toutes les tables de toutes les bases de données sont comme

...
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
The sys schema is already up to date (version 1.5.1).
Checking databases.
...

Mais je reçois toujours l'erreur dans le journal

2019-01-27T18:37:15.304587Z 66190 [Warning] InnoDB: Table mysql/innodb_table_stats has length mismatch in the column name table_name.  Please run mysql_upgrade
2019-01-27T18:37:15.304620Z 66190 [Warning] InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name table_name.  Please run mysql_upgrade
2019-01-27T18:37:15.304684Z 66190 [Warning] InnoDB: Table mysql/innodb_table_stats has length mismatch in the column name table_name.  Please run mysql_upgrade
2019-01-27T18:37:15.304707Z 66190 [Warning] InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name table_name.  Please run mysql_upgrade

La structure semble correcte. Y a-t-il un problème de configuration? S'il vous plaît donnez votre avis.

La réponse semble être - redémarrer le serveur. Je n'ai pas le droit de le faire, mais après le redémarrage de l'administrateur, le problème semble résolu. Vous ne savez pas pourquoi le redémarrage de MySQL n'a pas été résolu?

11
Roy Hinkley

Peut-être que ces informations sont utiles.

https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-23.html

Remarque

Cette version inclut une modification des tables système innodb_index_stats et innodb_table_stats. Lors de la mise à niveau vers cette version, assurez-vous d'exécuter mysql_upgrade afin d'inclure ces modifications.

5
Chrysweel

Avez-vous une idée de ce qui se passe lorsque l'avertissement est généré? Cela ressemble à une forme de non-concordance de version. Avez-vous des plugins?

Veuillez déposer un bogue sur bugs.mysql.com.

En attendant, faites

USE mysql;
SHOW CREATE TABLE innodb_index_stats ;

Vérifiez notamment la définition de table_name. C'était autrefois

`table_name` varchar(64) COLLATE utf8_bin NOT NULL,

8.0 le change en

`table_name` varchar(199) COLLATE utf8_bin NOT NULL,

S'il est toujours 64, simulez ce que mysql_updatedevrait avoir fait, en faisant

ALTER TABLE innodb_index_stats
    MODIFY   `table_name` varchar(199) COLLATE utf8_bin NOT NULL;

Idem pour innodb_table_stats.

3
Rick James