Die Tabelle mysql / innodb_index_stats weist eine Längeninkongruenz im Spaltennamen table_name auf. Bitte führen Sie mysql_upgrade aus

15

In habe mysqld.logich Tausende von Zeilen wie:

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

Also, laut praktisch jedem Beitrag zu diesem Thema (und Fehlermeldung selbst):

mysql_upgrade -u root -p

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

und alle Tabellen in allen Datenbanken sind wie

...
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.
...

Aber ich bekomme immer noch den Fehler im Protokoll

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

Die Struktur scheint in Ordnung zu sein. Gibt es ein Konfigurationsproblem? Bitte beraten.

Die Antwort scheint zu sein: Server neu starten. Ich habe keine Rechte dazu, aber nach dem Neustart des Administrators scheint das Problem behoben zu sein. Sie sind sich nicht sicher, warum ein Neustart von MySQL nicht behoben wurde?

Roy Hinkley
quelle

Antworten:

7

Vielleicht sind diese Informationen nützlich.

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

Hinweis

Diese Version enthält eine Änderung der Systemtabellen innodb_index_stats und innodb_table_stats. Führen Sie beim Upgrade auf diese Version unbedingt mysql_upgrade aus, um diese Änderungen zu berücksichtigen.


Chrysweel
quelle
Auf den Punkt gebracht und tolle Lösung. Vielen Dank!
Entwicklung
3

Haben Sie eine Ahnung, was passiert, wenn die Warnung generiert wird? Es klingt wie eine Form von Versionsinkongruenz. Hast du irgendwelche Plugins?

Bitte melden Sie einen Fehler unter bugs.mysql.com.

In der Zwischenzeit tun

USE mysql;
SHOW CREATE TABLE innodb_index_stats ;

Überprüfen Sie insbesondere die Definition von table_name. Ich war

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

8.0 ändert es in

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

Wenn es immer noch 64 ist, simulieren , was mysql_update sollte getan haben, indem

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

Das Gleiche gilt für innodb_table_stats.

Rick James
quelle
Es gibt keine Plugins. Nur eine einfache Vanilla MySQL-Instanz.
Roy Hinkley
Vielen Dank. Diese Antwort tauchte als wahrscheinliche Lösung für das gleiche Problem auf, das wir haben. Die vorgeschlagene Lösung ist viel weniger beängstigend als das Ausführen eines blinden Befehls.
Steve Sether
3
Ich versuchte es, ALTER TABLEaber die Warnung kam immer wieder. Ich lief die mysq_upgradeund jetzt keine Warnungen mehr
Bennythejudge
Ich verwende MySQL 5.7.23. Soll ich diese Änderungen vornehmen? danke
AMB
@AMB - Benötigen Sie weitere Einzelheiten, um Ihre Frage zu beantworten. Im Allgemeinen müssen Sie beim Upgrade von einer Version auf eine andere ausgeführt werden mysql_upgrade, um alle grundlegenden Unterschiede zu ändern, die mit der neueren Version einhergehen. Dies umfasst, ohne darauf beschränkt zu sein, Schemaänderungen an Systemtabellen.
Rick James
1

In der Kommandozeile:

  1. Lauf mysql_upgrade --user=your_user_name --password
  2. Passwort eingeben.

Das ist es.

TitanFighter
quelle