Sur votre serveur, vous avez maintenant un serveur web Apache fonctionnel et le langage PHP installé. La dernière chose qui vous manque pour pouvoir installer la plupart des applications web, c’est une base de données pour stocker vos informations dynamiques. Je vais donc maintenant vous guider pour installer la base de données libre de référence : MySQL.
Installez MySQL
Pour installer MySQL, il vous suffit d’installer le package mariadb-server
puis le méta package default-mysql-server
:
$ sudo apt install mariadb-server
La première chose à faire ensuite, c’est sécuriser l’installation par défaut de MySQL qui n’est pas adaptée à un environnement de production. MySQL vous fournit l’utilitaire mysq_secure_installation
pour vous faciliter la vie :
$ sudo mysql_secure_installation
Le jeu avec cet utilitaire, c’est de répondre oui à toutes les questions. Ça va notamment vous permettre de définir un mot de passe administrateur (root) pour votre base de données, de n’autoriser que sa connexion en local, d’interdire les connexions anonymes et de supprimer la base de test.
Maintenant que MySQL est installée, vous pouvez faire un premier test de connexion en utilisant le compte root.
Connectez-vous à MySQL
Le compte root n’est maintenant autorisé à se connecter à MySQL qu’en local depuis le serveur. Vous pouvez vous connecter par la commande :
$ mysql -h localhost -u root -p
mysql | c’est le nom du client texte qui permet de se connecter à MySQL |
-h localhost | précise le nom de l’hôte auquel vous voulez vous connecter. localhost est l’hôte par défaut, donc vous pouvez vous passer de cette option pour les connexions locales |
-u root | indique le nom de l’utilisateur avec lequel vous voulez vous connecter |
-p | demande d’afficher un prompt pour entrer le mot de passe de manière interactive |
Un fois connecté, vous pouvez par exemple afficher les bases de données existantes par :
mysql> show databases; +-----------------------------+ | Database | +-----------------------------+ | information_schema | | mysql | | performance_schema | | sys | +-----------------------------+ mysql> quit;
Ici les 4 bases affichées sont toutes des bases de données gérées par MySQL pour assurer son fonctionnement.
Pour comprendre un peu mieux le fonctionnement de MySQL et de ses options de configuration, vous devez connaître les différents moteurs de stockage.
Découvrez les deux moteurs de stockage MyISAM et InnoDB
Dans MySQL, la manière dont les données sont gérées et accédées est définie au niveau de chaque table. Cette gestion est assurée par des moteurs de stockage, chacun ayant ses caractéristiques propres. Les deux types de moteurs principaux que vous devez connaître avec MySQL sont :
MyISAM : c’est le moteur le plus ancien et le plus “basique”. Il est très rapide pour effectuer des recherches ou des opérations en lecture mais ne gère pas les transactions (cf. encadré) ni les clés étrangères.
InnoDB : c’est un moteur plus récent. Il est plus robuste, dans le sens où il gère les transactions, mais il est un peu plus lent pour les opérations de lecture. Il gère aussi les clés étrangères.
Une même base de données peut contenir à la fois des tables s’appuyant sur un moteur et des tables s’appuyant sur un autre. Rassurez-vous, en général ce sont les développeurs qui définissent le type de moteur à utiliser pour chaque table. Malgré tout, ces choix ont des impacts sur la gestion de la base de données, et il est important pour un administrateur de comprendre le principe général (et plus si affinité, si vous voulez vraiment optimiser les performances).
Maintenant que vous en savez un peu plus sur le fonctionnement de MySQL, vous pouvez partir à la découverte de ses fichiers de configuration et de stockage.
Explorez les fichiers utilisés par MySQL
Les fichiers de configuration utilisés par MySQL sont dans /etc/mysql
. Vous y découvrirez :
les fichiers
my.cnf
etmysql.cnf
: fichiers généraux par défaut, ils ne contiennent maintenant que des lignes pour inclure les fichiers dansconf.d
etmysql.conf.d
car la configuration a été découpée en différents fichiers dans ces répertoires ;un fichier
debian.cnf
: sur les systèmes Debian (dont Ubuntu), un utilisateurdebian-sys-maint
ayant les droits administrateur est créé pour effectuer les opérations de maintenance de MySQL. Ce fichier contient les informations de connexion de cet utilisateur, et ne doit pas être modifié ;un fichier
mysql.conf.d/mysqld.cnf
: il contient la plupart des options de configuration générale du serveur.
Si vous ouvrez ce dernier fichier /etc/mysql/mysql.conf.d/mysqld.cnf
, vous verrez que les fichiers de configuration de MySQL sont découpés en sections dont le titre est entre crochets. La configuration générale est dans la section [mysqld]
. Vous y trouverez quelques variables notables :
user = mysql | Définit l’utilisateur système utilisé par MySQL |
port = 3306 | Définit le port TCP sur lequel écoute MySQL |
datadir = /var/lib/mysql | Définit le répertoire dans lequel MySQL stocke ses fichiers |
bind-address = 127.0.0.1 | Définit les IP sur lesquelles écoute MySQL. Sur Ubuntu, par défaut MySQL n’écoute qu’en local, ce qui est une bonne chose en termes de sécurité. Comme votre serveur est sur la même machine que MySQL, vous pouvez laisser comme ça pour l’instant, mais c’est à adapter si vous voulez vous connecter à MySQL depuis un autre serveur |
log_error = /var/log/mysql/error.log | Définit le log d’erreurs de MySQL |
Au-delà de ces quelques options de base, vous y trouverez un grand nombre de paramètres d’optimisation. La modification de ces options demande d’avoir une bonne connaissance du fonctionnement de MySQL, mais peut changer radicalement les performances de MySQL.
MySQL a beau être une base de données relationnelle, elle utilise bien sûr des fichiers pour enregistrer ses informations de manière pérenne. Comme vous avez pu le voir dans la configuration, ces fichiers sont dans /var/lib/mysql
. Assurez-vous donc d’avoir assez d’espace disponible dans ce répertoire pour stocker vos bases de données.
Allez regarder de plus près le contenu du répertoire /var/lib/mysql
. Dans ce répertoire de stockage, vous trouverez un sous-répertoire pour chacune de vos bases de données. Dans ces répertoires de base de données, vous trouverez pour chaque table un fichier NOM_DE_MA_TABLE.frm
qui décrit la structure de la table en question. Les autres fichiers dépendent du moteur de stockage que vous utilisez pour vos tables.
Pour les tables MyISAM, vous trouverez notamment des fichiers contenant les données avec une extension .myd
, et des fichiers contenant les données d’index avec une extension .myi
.
Pour les tables InnoDB, les données de toutes les tables sont stockées dans le fichier /var/lib/mysq/ibdata1
. Ce fichier peut donc devenir assez gros, et il est possible de définir dans la configuration MySQL comment créer automatiquement de nouveaux fichiers au-delà d’une certaine taille. Dans le même répertoire, les fichiers ib_logfile0
et ib_logfile1
sont des fichiers tampon utilisés pour gérer les transactions et améliorer les performances.
Vous disposez maintenant d’un serveur LAMP complet, ce qui vous permettra de pouvoir installer les nombreuses applications PHP disponibles, dont le célèbre système de gestion de contenu WordPress.
En résumé
MySQL est le serveur de base de données libre de référence.
Vous pouvez définir un mot de passe administrateur et sécuriser votre installation grâce à l’utilitaire
mysql_secure_installation
.Différents moteurs de stockage permettent de gérer la manière dont les données sont stockées et accédées.
Les deux moteurs de stockage les plus courants sont MyISAM et InnoDB.
Dans la partie suivante, vous verrez comment bénéficier également des applications basées sur le langage Java, et vous apprendrez à améliorer les performances et la sécurité de votre infrastructure par l’utilisation de proxies. Mais avant cela, je vous invite à tester vos connaissances grâce à l'activité et au quiz des deux prochains chapitres.