Y a-t-il une commande MySQL pour localiser le fichier de configuration my.cnf
, similaire à la façon dont phpinfo()
de PHP localise son php.ini
?
mysql: variable inconnue 'defaults-file=...
Y a-t-il une commande MySQL pour localiser le fichier de configuration my.cnf
, similaire à la façon dont phpinfo()
de PHP localise son php.ini
?
Il n'y a pas de commande MySQL interne pour retracer cela, c'est un peu trop abstrait. Le fichier pourrait se trouver dans 5 (ou plus ?) emplacements, et ils seraient tous valides car ils se chargent en cascade.
Ce sont les emplacements par défaut que MySQL examine. S'il en trouve plus d'un, il chargera chacun d'eux et les valeurs se remplaceront mutuellement (dans l'ordre indiqué, je pense). De plus, le paramètre --defaults-file
peut tout remplacer, donc... en gros, c'est un énorme casse-tête.
Mais grâce à sa confusion, il y a de fortes chances qu'il se trouve simplement dans /etc/my.cnf.
(Si vous voulez juste voir les valeurs : SHOW VARIABLES
, mais vous aurez besoin des autorisations pour le faire.)
Exécutez mysql --help
et vous verrez :
Les options par défaut sont lues dans l'ordre suivant à partir des fichiers suivants : /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
Assurez-vous de redémarrer le serveur MySQL après avoir modifié my.cnf : /etc/init.d/mysqld restart
.
Vous pouvez en fait "demander" à MySQL une liste de tous les emplacements où il recherche my.cnf (ou my.ini sur Windows). Ce n'est pas une requête SQL cependant. Exécutez plutôt :
$ mysqladmin --help
ou, avant la version 5.7 :
$ mysqld --help --verbose
Dans les toutes premières lignes, vous trouverez un message avec une liste de tous les emplacements de my.cnf recherchés. Sur ma machine, il s'agit de :
Les options par défaut sont lues à partir des fichiers suivants dans l'ordre donné :
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf
Ou, sur Windows :
Les options par défaut sont lues à partir des fichiers suivants dans l'ordre donné :
C:\Windows\my.ini
C:\Windows\my.cnf
C:\my.ini
C:\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf
Notez cependant qu'il se peut qu'il n'y ait pas de fichier my.cnf à aucun de ces emplacements. Vous pouvez donc créer le fichier vous-même - utilisez l'un des fichiers de configuration d'exemple fournis avec la distribution MySQL (sur Linux - consultez les fichiers /usr/share/mysql/*.cnf
et utilisez celui qui vous convient - copiez-le dans /etc/my.cnf
et modifiez-le si nécessaire).
Notez également qu'il existe également une option en ligne de commande --defaults-file
qui peut définir un chemin personnalisé vers le fichier my.cnf ou my.ini. Par exemple, c'est le cas pour MySQL 5.5 sur Windows - il pointe vers un fichier my.ini dans le répertoire de données, qui n'est généralement pas répertorié avec mysqld --help --verbose
. Sur Windows - consultez les propriétés du service pour savoir si c'est le cas pour vous.
Enfin, consultez le https://dev.mysql.com/doc/refman/8.0/en/option-files.html - il est décrit plus en détail là-bas.
A semblé prometteur mais sur ma distribution (opencsw.org), il n'y a pas de mysqld. Il exécute mysqld_safe. "mysqld_safe --verbose --help" n'est pas reconnu.
Lorsque je l'ai exécuté, j'ai obtenu ceci : Les options par défaut sont lues à partir des fichiers suivants dans l'ordre donné : /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
-- Je m'attendais à ce que les 2 premiers fichiers soient en ordre inverse.
Les informations publiées par mysqld --help --verbose
contredisent ce qui est indiqué dans dev.mysql.com/doc/refman/5.5/en/option-files.html. Dans mon expérience "récente à ce jour" avec la version 5.6, les informations sur le site web sont les plus correctes et pertinentes. La priorité de l'emplacement des fichiers donnée par la commande d'aide est trompeuse et conduira à des résultats négatifs.
C'est la méthode difficile :( Y a-t-il une commande mysql comme le phpinfo() pour connaître l'emplacement du fichier de configuration ?
find / -name my.cnf
est la meilleure option, mais vous pouvez également vérifier votre dossier personnel et /etc/mysql/my.conf. Vous pouvez aussi vérifier si votre MYSQL_HOME est défini en tapant echo $MYSQL_HOME
dans un terminal.
Wow, cela prendrait une éternité sur la plupart des machines. La plupart des distributions Linux modernes ont locate installé et tant que updatedb est exécuté régulièrement, vous pouvez faire : locate my.cnf | less
whereis
ne fonctionnera pas ici ; il recherche les emplacements correspondant à une commande, et ne peut pas trouver des fichiers arbitraires.
Cela pourrait fonctionner:
strace mysql ";" 2>&1 | grep cnf
sur ma machine cela affiche:
stat64("/etc/my.cnf", 0xbf9faafc) = -1 ENOENT (Aucun fichier ou dossier de ce type)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4271, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3
read(3, "# /etc/mysql/my.cnf: The global "..., 4096) = 4096
stat64("/home/xxxxx/.my.cnf", 0xbf9faafc) = -1 ENOENT (Aucun fichier ou dossier de ce type)
Il semble donc que /etc/mysql/my.cnf soit le bon fichier puisque stat64() et read() ont réussi.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Sur ubuntu, vous pouvez utiliser la commande
locate my.cnf
pour trouver où se trouvent tous les noms de fichiers de ce type