Vous pouvez exécuter la requête suivante depuis la ligne de commande :
mysql -uUSER -p -e 'SHOW VARIABLES WHERE Variable_Name LIKE "%dir"'
Sortie (sur Linux) :
+---------------------------+----------------------------+
| Variable_name | Value |
+---------------------------+----------------------------+
| basedir | /usr |
| character_sets_dir | /usr/share/mysql/charsets/ |
| datadir | /var/lib/mysql/ |
| innodb_data_home_dir | |
| innodb_log_group_home_dir | ./ |
| lc_messages_dir | /usr/share/mysql/ |
| plugin_dir | /usr/lib/mysql/plugin/ |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+---------------------------+----------------------------+
Sortie (sur macOS Sierra) :
+---------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+---------------------------+-----------------------------------------------------------+
| basedir | /usr/local/mysql-5.7.17-macos10.12-x86_64/ |
| character_sets_dir | /usr/local/mysql-5.7.17-macos10.12-x86_64/share/charsets/ |
| datadir | /usr/local/mysql/data/ |
| innodb_data_home_dir | |
| innodb_log_group_home_dir | ./ |
| innodb_tmpdir | |
| lc_messages_dir | /usr/local/mysql-5.7.17-macos10.12-x86_64/share/ |
| plugin_dir | /usr/local/mysql/lib/plugin/ |
| slave_load_tmpdir | /var/folders/zz/zyxvpxvq6csfxvn_n000009800002_/T/ |
| tmpdir | /var/folders/zz/zyxvpxvq6csfxvn_n000009800002_/T/ |
+---------------------------+-----------------------------------------------------------+
Ou si vous souhaitez seulement le répertoire des données :
mysql -uUSER -p -e 'SHOW VARIABLES WHERE Variable_Name = "datadir"'
Ces commandes fonctionnent également sur Windows, mais vous devez inverser les guillemets simples et doubles.
Soit dit en passant, lors de l'exécution de la commande which mysql
sur Linux comme vous l'avez dit, vous n'obtiendrez pas le répertoire d'installation sur Linux. Vous obtiendrez seulement le chemin vers l'exécutable, qui est /usr/bin
sur Linux, mais vous verrez que l'installation de mysql utilise plusieurs dossiers pour stocker les fichiers.
Si vous avez besoin de la valeur de datadir en sortie, et seulement cela, sans les en-têtes de colonne, et que vous n'avez pas un environnement GNU (awk|grep|sed ...) alors utilisez la commande suivante :
mysql -s -N -uUSER -p information_schema -e 'SELECT Variable_Value FROM GLOBAL_VARIABLES WHERE Variable_Name = "datadir"'
La commande sélectionnera uniquement la valeur depuis la base de données interne information_schema
de mysql et désactivera la sortie tabulaire et les en-têtes de colonne.
Sortie sur Linux :
/var/lib/mysql