Page mise à jour le 30 avril 2024
Mise à jour : 20 mars 2018
Cet article fait partie d’une série d’articles sur l’installation d’un serveur Linux sous Debian
Ces commandes sont à exécuter en tant que l’utilisateur root
MySQL – MariaDB ?
MySQL fait partie des logiciels de gestion de base de données relationnelles (SGBDR) les plus utilisés au monde. Il est distribué sous une double licence GPL et propriétaire, car en 2009, il a été acquis par Oracle Corporation.
Pour connaitre l’histoire complète des acquisitions successives par Sun puis Oracle, consultez l’article Wikipedia de MySQL.
Depuis mai 2009, son créateur Michael Widenius a créé MariaDB pour continuer son développement en tant que projet Open Source. MariaDB clame bon nombre d’avantages vis-à-vis de MySQL et est devenu le SGBDR par défaut depuis la version 9 de Debian.
Nombre d’articles sur la toile comparent les deux SGBDR, en terme de respect de la norme SQL (net avantage à MariaDB), de performances, de compatibilité, …
Mon avis : Ce que l’on peut faire avec MySQL, on peut le faire avec MariaDB (mais pas l’inverse) ; passer de MySQL à MariaDB (bases, code, …) est simple, mais pas l’inverse ; MariaDB offre de nets avantages d’administration, de sauvegarde, de choix de moteurs vis-à-vis de MySQL ; les tutoriels et (bonnes) commandes de la toile marchent aussi bien sur l’un que sur l’autre. Donc, je conseille d’installer et d’utiliser MariaDB.
Installation des packets
Les packets à installer sont : mysql-server et mysql-client.
(En réalité, ce sont des méta-packets qui installent MariaDB server/client)
apt-get install mysql-server mysql-client
Configuration du serveur MariaDB
Script mysql_secure_installation
Il est très fortement conseillé de lancer le script mysql_secure_installation, qui améliore la sécurité du serveur, via le réglage d’un certain nombre de paramètres, de manière interactive.
mysql_secure_installation
Mot de passe root du serveur MariaDB
Il est impensable de ne pas définir de mot de passe pour l’utilisateur root, qui a tous les droits sur le serveur MariaDB.
Réinitialisation du mot de passe root de MariaDB
Un problème fréquent est l’oubli du mot de passe du compte root du serveur de BDD. Voila comment le redéfinir :
- Arrêt du serveur
/etc/init.d/mysql stop
- Démarrage du serveur en safe-mode (sans chargement des droits ; sans logs ; sans accepter de connexions réseau)
mysqld_safe --skip-grant-tables --skip-syslog --skip-networking
- Connexion au serveur avec le compte root, mais sans mot de passe
mysql -u root
- Execution de la requête affectant le mot de passe du compte root
UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root'; FLUSH PRIVILEGES;
- Arrêt du serveur fonctionnant en safe-mode, et démarrage du serveur en mode normal
mysqladmin shutdown sudo service mysql start
Se connecter au serveur depuis l’extérieur
Il faut bien comprendre deux choses, si l’on souhaite pouvoir accéder au serveur de BDD depuis l’extérieur (c’est à dire depuis une autre machine que localhost) :
- Il faut configurer le serveur pour accepter les connexions depuis l’extérieur (ainsi qu’éventuellement le firewall, un éventuel routeur, NAT, …) ;
- Il faut configurer les comptes des utilisateurs pour que ces derniers puissent se connecter depuis l’extérieur.
Configuration du serveur pour accepter les connexions extérieures
Par défaut, le serveur n’accepte pas les connexion extérieures, ou plutôt, il n’accepte que les connexions locales (depuis l’adresse de LoopBack : localhost = 127.0.0.1).
Sous Debian, deux fichiers nous intéressent :
- /etc/mysql/my.cnf : fichier de configuration principal, qui ne fait pas grand chose hormis charger automatiquement les fichiers de configuration présents dans /etc/mysql/conf.d/ et /etc/mysql/mariadb.conf.d/
[client-server] # Import all .cnf files from configuration directory !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mariadb.conf.d/
- /etc/mysql/mariadb.conf.d/50-server.cnf : fichier de configuration du démon du serveur, qui contient notamment les instruction de ce dernier après le mot clé [mysqld]
[mysqld] ### Plein de choses ... ### # Instead of skip-networking the default is now to listen only on localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 # ligne commentée : toutes les IP peuvent se connecter
Vous l’aurez compris avec l’extrait ci dessus : il faut soit commenter la ligne bind-address, soit ajouter les IP autorisées à se connecter.
Configuration des utilisateurs pour qu’ils puissent se connecter depuis l’extérieur
Après s’être connecté au serveur en root, on peut :
- Visualiser la liste (table) des utilisateurs :
SELECT User, Host FROM mysql.user; +------------+------------------+ | User | Host | +------------+------------------+ | root | % | | valerian | % | | root | localhost | | valerian | localhost | +------------+------------------+
Dans l’exemple ci-dessus, root et valerian peuvent se connecter depuis localhost et depuis n’importe où (%)
- Définir les droits et hôtes clients autorisés pour un utilisateur :
PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
Dans l’exemple ci-dessus : root peut se connecter de n’importe où (%) à toutes les tables de toutes les bases (*.*).
Attention ! Ceci est un exemple ! Il n’est pas très judicieux d’autoriser une règle si permissive !
Tests
Connexion au serveur, via le client, en local
mysql -u root #devrait ne pas fonctionner, car le mot de passe root devrait être défini et donc nécessaire mysql -u root -p #demande le mot de passe de l'utilisateur root, de manière interactive mysql -u root -p -h localhost #l'argument -h localhost est ici facultatif, puisque la connexion est faite depuis la même machine que le serveur (localhost)
Commandes de base
SELECT 'Hello World !'; #Affichage d'une chaine de caractères SELECT (21*2); #Calcul idiot help ; #Affichage des commandes de base quit ; #Fermeture de la connexion et du client
Administration de la base de données
Créer une BDD, une table et un utilisateur
- Connexion au serveur de BDD en root
mysql -u root -pMot_de_passe # Remarquez que l'on peut saisir le mot de passe à l'appel du client, avec l'argument -p suivi sans espace du mot de passe
- Requêtes de création d’une BDD et d’un utilisateur
create database testdb; create user 'testuser'@'localhost' identified by 'password'; grant all on testdb.* to 'testuser' identified by 'password'; exit;
- Connexion au serveur de BDD avec l’utilisateur créé précédemment
mysql -u testuser -p
- Requête de sélection de la BDD créée précédemment
use testdb;
- Requête de création d’une table dans la BDD
create table copains (copains_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nom_de_famille TEXT, prenom TEXT);
- Affichage des tables de la BDD
SHOW TABLES; +------------------+ | Tables_in_testdb | +------------------+ | copains | +------------------+;
- Affichage des colones de la table
SHOW COLUMNS FROM copains; +----------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+---------+------+-----+---------+----------------+ | copains_id | int(11) | NO | PRI | NULL | auto_increment | | nom_de_famille | text | YES | | NULL | | | prenom. | text | YES | | NULL | | +----------------+---------+------+-----+---------+----------------+
Optimisation de la base de données
- Installation du packet mysqltuner :
apt-get install mysqltuner
- Lancement du programme :
mysqltuner --user root --pass mot_de_passe_root
- Interprétation des recommandations :
– MySQL (MariaDB) doit être lancé depuis plus de 24h pour que des recommandations pertinentes soient proposées ;
– Un peu d’aide ici : https://github.com/major/MySQLTuner-perl/