Mysql : ERROR 1436 : FATAL ERROR: Upgrade failed

Situation

Une brique LIME1 avec un Yunohost 2.7.14.5 sur Debian 8.11 (jessie).

Si j’ai bien compris (c’est pas ma brique), la mise à jours ne s’était pas terminée proprement.

Dans les journaux

Dans le journal ( #more /var/log/syslog ) il y avait les entrées suivantes :

Jul 31 09:42:37 ******** /etc/mysql/debian-start[1270]: Phase 3/6: Running 'mysql_fix_privilege_tables'
Jul 31 09:42:37 ******** /etc/mysql/debian-start[1270]: ERROR 1436 (HY000) at line 574: Thread stack overrun:  4880 bytes used of a 131072 byte stack, and 0 bytes nee
ded.  Use 'mysqld --thread_stack=#' to specify a bigger stack.
Jul 31 09:42:37 ******** /etc/mysql/debian-start[1270]: FATAL ERROR: Upgrade failed

Première tentative (on y est presque)

Je me suis inspiré de ce post et tenter ce qui suit.

Pour arrêter le service mysql actuel:

# yunohost service stop mysql

Pour démarrer mysqld avec une option différente:

# su -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables --thread_stack=256k" mysql

Et faire tourner le mysql_upgrade:

# su -s /bin/bash -c "/usr/bin/mysql_upgrade" mysql

Qui s’est bien déroulé. Youpie! :slight_smile:

Pour ensuite arrêter proprement le mysql démarré précédemment:

# mysqladmin -uroot -p$(cat /etc/yunohost/mysql) -h127.0.0.1 shutdown

TIPS: le mot de passe root pour mysq se trouve dans le fichier /etc/yunohost/mysql

Et redémarrer le service mysql comme d’habitude:

# yunohost service stop mysql

Malheureusement l’erreur était toujours présente! :frowning_face:

Jul 31 11:21:47 ******** /etc/mysql/debian-start[3367]: ERROR 1436 (HY000) at line 574: Thread stack overrun:  4880 bytes used of a 131072 byte stack, and 0 bytes needed.  Use 'mysqld --thread_stack=#' to specify a bigger stack.

Deuxième tentative (c’est la bonne)

Donc je me suis dis que j’allais tenter la chose en modifiant la configuration de mysql qui se trouve dans le fichier /etc/mysql/my.cnf. Ceci pour voir si ça fonctionnerait sans l’option --skip-grant-tables qui était utilisées plus haut.

Faire une copie avant de le modifier, au cas où:

# cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

Modifier le fichier (# nano /etc/mysql/my.cnf) pour remplacer la ligne thread_stack = 128K par
thread_stack = 256K .

Et redémarrer le service mysql comme d’hab:

# yunohost service stop mysql
# yunohost service start mysql

Et joie, bonheur l’erreur n’est plus! :smile:

Et dans (#more /var/log/syslog) je trouve

Jul 31 11:23:25 ******** /etc/mysql/debian-start[3704]: Phase 6/6: Running 'FLUSH PRIVILEGES'
Jul 31 11:23:25 ******** /etc/mysql/debian-start[3704]: OK

Question

Est-ce grave docteur de laisser le paramètre thread_stack = 256K au lieu de thread_stack = 128K dans le fichier /etc/mysql/my.cnf?

Apparemment 256K n’est pas un problème … c’est peut-être même une bonne idée.

The stack size for each thread. Many of the limits detected by the crash-me test are dependent on this value. See Section 8.13.2, “The MySQL Benchmark Suite”. The default of 192KB (256KB for 64-bit systems) is large enough for normal operation. If the thread stack size is too small, it limits the complexity of the SQL statements that the server can handle, the recursion depth of stored procedures, and other memory-consuming actions. (cf. le site de mysql)

Une autre question du coup… si 192K est la valeur par défaut, comment se fait-ce que ce soit thread_stack = 128K sur Yunohost/Debian 8.1 pour ARM (pour rappel je suis sur Yunohost sur une LIME1).