X

Comment désactiver le mode strict de MySQL sur Laravel Forge (Ubuntu)


MySQL a un mode strict depuis la version 5.1, mais dans la version 5.7, il est devenu le mode par défaut. Si vous avez lancé un serveur récemment et que tout d’un coup vos applications se sont cassées, cela peut en être la source.

Dans Laravel, vous pouvez résoudre ce problème dans le code : modifiez votre database.php fichier de configuration et ajoutez une clé de strict avec une valeur de false. Mais si vous utilisez une application non-Laravel (nous avons rencontré cela avec les applications CodeIgniter et CraftCMS), vous n’aurez pas cette option. Voici comment désactiver le mode strict globalement sur n’importe quel serveur Laravel Forge (et tout autre serveur Ubuntu).

Remarque : Je ne préconise pas de désactiver le mode strict. Ces nouveaux modes offrent des avantages de vitesse et de cohérence qui valent la peine de les garder activés. Je veux vous donner les options au cas où vous en auriez besoin, mais ma recommandation est de les garder activées et d’apprendre à les utiliser.

Votre fichier de configuration

MySQL recherche en fait cinq endroits différents pour les fichiers de configuration, vous pouvez donc apporter la modification que je suis sur le point de recommander à plusieurs endroits. ça va regarder dans /etc/my.cnf, /etc/mysql/my.cnf, SYSCONFDIR/my.cnf, $MYSQL_HOME/my.cnfet ~/my.cnf. ~/.my.cnf est spécifique à l’utilisateur, et les troisième et quatrième options dépendent des spécificités de votre environnement. Restons donc sur l’un des deux premiers.

Sur une boîte Laravel Forge par défaut, la configuration MySQL par défaut vivra dans /etc/mysql/my.cnf, alors plaçons nos modifications là-bas. Connectez-vous en SSH à votre serveur et utilisez Vim ou Pico pour modifier ce fichier.

Vos lignes

Si vous faites défiler un peu le fichier, vous trouverez le [mysqld] section. Nous allons ajouter une nouvelle clé, sql_mode. Sur MySQL 5.7, les valeurs par défaut pour cette clé prête à l’emploi sont :

STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Le mode strict vient de STRICT_TRANS_TABLES. Alors, écrasons le sql_mode et réglez-le sur le même que celui par défaut, mais sans mode strict.

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

C’est ça! Enregistrez le fichier et redémarrez MySQL. De la ligne de commande qui serait sudo /etc/init.d/mysql restartou depuis l’interface Laravel Forge, ouvrez le serveur, cliquez sur le Redémarrer les services icône en bas, et choisissez Redémarrez MySQL.

Remarque : Si vous utilisez CraftCMS ou certaines versions de Laravel, vous souhaiterez probablement également désactiver l’option “ONLY_FULL_GROUP_BY”.