Admin/Dev

14
Avril
2020

Installer un serveur web personnel - Partie 2b - Configurer une socket entre MariaDB et PHP

Publié par sky

Il y a peu de temps, nous avons vu comment installer MariaDB sur macOS, via Homebrew. Nous avions fais la configuration minimale de la base de données, juste suffisante pour s'y connecter depuis PHP.

Aujourd'hui, je vais aller un peu plus loin, et vous montrer comment configurer MariaDB un peu plus finement, pour connecter la base de données à PHP via une socket.

 

1/ Regarder la configuration de MariaDB

MariaDB est lancé automatiquement par Homebrew, mais il est tout de même possible de voir comment. La commande suivante va regarder les processus dont le nom contient "mysql"

ps -aef | grep mysql

Voici le résultat chez moi

  501 40687     1   0  9:40   ??         0:00.04 /bin/sh /usr/local/opt/mariadb/bin/mysqld_safe --datadir=/usr/local/var/mysql
  501 40751 40687   0  9:40   ??         0:00.33 /usr/local/opt/mariadb/bin/mysqld --basedir=/usr/local/opt/mariadb --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mariadb/lib/plugin --log-error=/usr/local/var/mysql/MacPro.local.err --pid-file=MacPro.local.pid
  501 41036   804   0  9:45   ttys000    0:00.00 grep mysql

On voit les 2 premières lignes, avec le script qui lance mysql_safe, qui lance mysqld avec les bons paramètres.

La 3ème ligne n'est rien d'autre que la recherche des processus.

Maintenant, regardons où est sitée la socket de MariaDB. Pour cela il faut se connecter à la base de données et taper la commande

show variables where Variable_name = "socket";

sans configuration, la socket est placée dans

/tmp/mysql.sock

Ce qui fonctionne, mais personnellement, je ne trouve pas cela terrible.

 

2/ Amélioration de la configuration de MariaDB

Voyons comment améliorer cela. Ce se fait via le ficher de configuration my.cnf, comme on peut le trouver sur MySQL.

Le fichier de configuration se trouve à l'emplacement suivant

/usr/local/etc/my.cnf

Le contenu, par défaut, n'est pas bien complexe. Puisqu'il n'y a rien dedans.

!includedir /usr/local/etc/my.cnf.d

On y trouve unique la lecture du dossier my.cnf.d, qui je vous le donne dans le mille, est vide aussi.

ls -l /usr/local/etc/my.cnf.d

Pour faire simple, j'ai repris la configuration de MySQL de skymac.org pour récupérer les informations dont j'ai besoin.

Au dessus, de la lecture du dossier my.cnf.d, j'ai ajouté 2 blocs.

Le premier concerne les réglages du serveur mysqld

[mysqld]
pid-file        = /usr/local/var/mysql/MacPro.local.pid
socket          = /usr/local/var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr/local
datadir         = /usr/local/var/mysql
tmpdir          = /tmp

Dans l'ordre, j'ai indiqué :

  • le pid-file, dont j'ai simplement repris le chemin actuel et complet.
  • la socket, que j'ai placé dans un dossier run, comme pour une configuration classique
  • le port, qui est le port par défaut de mysql
  • le basedir, aussi, avec une valeur par défaut
  • le datadir, avec le chemin vers les données actuelles, histoire qu'il les retrouve
  • le tmpdir, le dossier temporaire de macOS

le second concerne l'application cliente

[client-server]
socket          = /usr/local/var/run/mysqld/mysqld.sock

Il faut de nouveau indiquer la socket pour qu'elle puisse continuer à se connecter à la base de données. Globalement, vous pouvez mettre la socket ou vous le souhaitez, cependant, il est préférable de la ranger correctement.

Pour que les informations soient prises en compte, il faut redémarrer le contrôleur de la base de données selon comment vous l'aviez lancé dans le premier article. Soit

mysql.server stop; mysql.server start

soit

brew services restart mariadb

Pour tester, vous pouvez lancer le client, avec le paramètre -S

mysql -S /usr/local/var/run/mysqld/mysqld.sock

 

3/ Modification de la configuration de PHP

La seconde étape est d'adapter la configuration de PHP pour qu'il aille chercher la socket au bon endroit.

La configuration de PHP se trouve à l'emplacement

/etc/php.ini

Vous pouvez le confirmer via la commande

php --ini

Le résultat devrait être :

Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

Si la valeur de Loaded Configuration File est (none), vous n'avez aucun fichier de configuration pour PHP. Mais ne stressez pas, sur macOS, c'est souvent le réglage par défaut. Pour l'installer, il suffit de copier le fichier "default" qui se trouve à côté.

sudo cp /etc/php.ini.default /etc/php.ini

Puis de lui mettres les bons droits dessus

sudo chmod 664 /etc/php.ini

Et ensuite de l'éditer. Moi, je fais cela avec emacs, mais vous pouvez utiliser l'éditeur que vous souhaitez. Il faut cependant l'ouvrir en mode administrateur.

sudo emacs /etc/php.ini

Recherchez la ligne commençant par

mysqli.default_socket

et indiquez le chemin vers la socket

mysqli.default_socket = /usr/local/var/run/mysqld/mysqld.sock

Enregistrez et quittez.

Puis redémarrer Apache, pour recharger la configuration de PHP.

sudo apachectl restart

Maintenant, vous pouvez indiquer "localhost" comme hôte à la place de l'adresse IP loopback 127.0.0.1.

$host = 'localhost';
$login = 'sky';
$pwd = '78qsd7q8d7qsd7';

$connection = new MySQLi($host, $login, $pwd, '');

echo $connection->connect_errno;
 
Sommaire de la série
 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Les cookies assurent le bon fonctionnement de nos services. En continuant, vous acceptez leur utilisation sur notre site internet.
Accepter En savoir plus