Publié le 19 April 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.sqlOn arrête MySQL :
systemctl stop mysqlOn supprime totalement le dossier de données de MySQL
rm -rf /var/lib/mysqlOn recréé le dossier de données de MySQL :
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysqlDans 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 --consoleOn redémarre MySQL :
systemctl start mysqlOn récupère le mot de passe root temporaire :
grep 'temporary password' /var/log/mysql/error.logOn se connecte à MySQL grâce au mot de passe temporaire :
mysql -u root -pOn 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 -pL’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 |
+------------------------+-------+