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 :
LIKE 'lower_case_table_names'; SHOW VARIABLES
Le résultat devrait être :
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+