MySQL : Modifier la variable lower_case_table_names

Publié le 19 avril 2023

Cet article est très largement inspiré de https://stackoverflow.com/questions/51803216/lower-case-table-names-settings-in-mysql-8-0-12

Un client m’a demandé de passer le paramètre lower_case_table_names de MySQL à 1. Le problème est que cette valeur est fixée en dur lors de l’initialisation de MySQL, et qu’il n’est plus possible de la changer ensuite. La seule solution est donc de réinitialiser totalement MySQL, puis de réimporter les données.

D’abord on fait un export complet des données :

mysqldump --events --routines --triggers --all-databases >dump.sql

On arrête MySQL :

systemctl stop mysql

On supprime totalement le dossier de données de MySQL

rm -rf /var/lib/mysql

On recréé le dossier de données de MySQL :

mkdir /var/lib/mysql    
chown mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql

Dans le fichier de configuration /etc/mysql/mysql.conf.d/mysqld.cnf, on ajoute la ligne lower_case_table_names = 1 dans la section [mysqld].

On re-créé l’environnement MySQL avec lower_case_table_names = 1 :

mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console

On redémarre MySQL :

systemctl start mysql

On récupère le mot de passe root temporaire :

grep 'temporary password' /var/log/mysql/error.log

On se connecte à MySQL grâce au mot de passe temporaire :

mysql -u root -p

On change le mot de passe root :

ALTER USER 'root'@'localhost' IDENTIFIED BY 'nouveau mot de passe';

On importe les données sauvegardées précédemment :

cat dump.sql | mysql -u root -p

L’opération est terminée. Pour vérifier que la variable lower_case_table_names est à la bonne valeur, il faut se connecter à MySQL puis faire :

SHOW VARIABLES LIKE 'lower_case_table_names';

Le résultat devrait être :

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 1     |
+------------------------+-------+