Comment réparer InnoDB: Error

Depuis un petit moment j’avais dans mes logs :
mysqld[1455]: 2018-09-03 00:11:53 7f87ce41f700 InnoDB: Error: Column last_update in table “mysql”.“innodb_table_stats” is INT UNSIGNED NOT NULL but should be BINARY(4) NOT NULL (type mismatch).

Voici les opérations pour fixer le problème :
$ cat /etc/mysql/debian.cnf # <- on note l’user et le mot de passe
$ mysqlcheck -u debian-sys-maint -p --repair --use-frm mysql # <- on se rend compte que le moteur ne peut pas réparer ‘innodb_table_stats’
$ mysqldump -u debian-sys-maint -p --events --quick --single-transaction mysql > /tmp/mysql2-dump.sql
-> mot de passe
$ ls /tmp
$ cat /tmp/mysql2-dump.sql
$ mysql -u debian-sys-maint -p mysql < /tmp/mysql2-dump.sql
-> mot de passe
$ service mysql restart

@+

3 Likes

Merci @antanof d’avoir posté ça ! J’ai eu la même erreur apparue récemment dans mes logs, et ta solution m’a bien aidé :pray: :smiley_cat:

La réponse à cette question stackexchange est un peu plus détaillée, avec le script suivant (pour faire toutes les bases et pas juste ‘mysql’) :

mysqldump="mysqldump --events --quick --single-transaction"
exclude="information_schema|performance_schema"

cd /tmp

# Backup and re-import each database on the system
for db in $(mysql -e "show databases;" -s --skip-column-names | grep -vE "($exclude)")
do
        echo "Repairing database $db"
        $mysqldump $db > $db.sql
        mysql $db < $db.sql
done

:point_up_2: J’ai rajouté la précaution d’arrêter au préalable les services qui utilisent la base de données : nginx et php, pour nextcloud notamment.

Testé et validé sur mon Raspi3 avec Yunohost 3.4.2 :sunglasses:

2 Likes