Comment installer MySQL sur Ubuntu 22.04

De Get Docs
Aller à :navigation, rechercher

Introduction

MySQL est un système de gestion de base de données open source, couramment installé dans le cadre de la pile populaire LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Il implémente le modèle relationnel et utilise le langage de requête structuré (mieux connu sous le nom de SQL) pour gérer ses données.

Ce tutoriel expliquera comment installer MySQL version 8.0 sur un serveur Ubuntu 22.04. En le complétant, vous disposerez d'une base de données relationnelle fonctionnelle que vous pourrez utiliser pour créer votre prochain site Web ou votre prochaine application.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

Vous pouvez également utiliser un terminal interactif intégré à cette page pour expérimenter l'installation et la configuration de MySQL. Cliquez sur le bouton Launch an Interactive Terminal! suivant pour commencer.

Lancez une borne interactive !

Étape 1 - Installation de MySQL

Sur Ubuntu 22.04, vous pouvez installer MySQL à l'aide du référentiel de packages APT. Au moment d'écrire ces lignes, la version de MySQL disponible dans le référentiel Ubuntu par défaut est la version 8.0.28.

Pour l'installer, mettez à jour l'index des packages sur votre serveur si vous ne l'avez pas fait récemment :

sudo apt update

Installez ensuite le package mysql-server :

sudo apt install mysql-server

Assurez-vous que le serveur est en cours d'exécution à l'aide de la commande systemctl start :

sudo systemctl start mysql.service

Ces commandes installeront et démarreront MySQL, mais ne vous inviteront pas à définir un mot de passe ni à apporter d'autres modifications à la configuration. Parce que cela laisse votre installation de MySQL non sécurisée, nous aborderons ce problème ensuite.

Étape 2 - Configuration de MySQL

Pour les nouvelles installations de MySQL, vous souhaiterez exécuter le script de sécurité inclus dans le système de gestion de base de données. Ce script modifie certaines des options par défaut les moins sécurisées pour des choses telles que l'interdiction des connexions distantes root et la suppression d'exemples d'utilisateurs.

Exécutez le script de sécurité avec sudo :

sudo mysql_secure_installation

Cela vous guidera à travers une série d'invites où vous pourrez apporter des modifications aux options de sécurité de votre installation MySQL. La première invite vous demandera si vous souhaitez configurer le plug-in Validate Password, qui peut être utilisé pour tester la force du mot de passe des nouveaux utilisateurs MySQL avant de les considérer comme valides.

Si vous choisissez de configurer le plugin Validate Password, tout utilisateur MySQL que vous créez et qui s'authentifie avec un mot de passe devra avoir un mot de passe qui satisfait la politique que vous sélectionnez :

OutputSecuring the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
 2

Que vous choisissiez ou non de configurer le plug-in Validate Password, la prochaine invite consistera à définir un mot de passe pour l'utilisateur MySQL root. Saisissez puis confirmez un mot de passe sécurisé de votre choix :

OutputPlease set the password for root here.


New password:

Re-enter new password:

Notez que même si vous avez défini un mot de passe pour l'utilisateur MySQL root, cet utilisateur n'est actuellement pas configuré pour s'authentifier avec un mot de passe lors de la connexion au shell MySQL.

Si vous avez utilisé le plug-in Validate Password, vous recevrez des commentaires sur la force de votre nouveau mot de passe. Ensuite, le script vous demandera si vous voulez continuer avec le mot de passe que vous venez d'entrer ou si vous voulez en entrer un nouveau. En supposant que vous êtes satisfait de la force du mot de passe que vous venez de saisir, saisissez Y pour continuer le script :

OutputEstimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

À partir de là, vous pouvez appuyer sur Y puis sur ENTER pour accepter les valeurs par défaut pour toutes les questions suivantes. Cela supprimera certains utilisateurs anonymes et la base de données de test, désactivera les connexions root à distance et chargera ces nouvelles règles afin que MySQL respecte immédiatement les modifications que vous avez apportées.

Une fois le script terminé, votre installation MySQL sera sécurisée. Vous pouvez maintenant passer à la création d'un utilisateur de base de données dédié avec le client MySQL.

Étape 3 - Création d'un utilisateur MySQL dédié et octroi de privilèges

Lors de l'installation, MySQL crée un compte utilisateur root que vous pouvez utiliser pour gérer votre base de données. Cet utilisateur a tous les privilèges sur le serveur MySQL, ce qui signifie qu'il a un contrôle total sur chaque base de données, table, utilisateur, etc. Pour cette raison, il est préférable d'éviter d'utiliser ce compte en dehors des fonctions administratives. Cette étape explique comment utiliser l'utilisateur MySQL root pour créer un nouveau compte utilisateur et lui accorder des privilèges.

Dans les systèmes Ubuntu exécutant MySQL 5.7 (et versions ultérieures), l'utilisateur MySQL root est configuré pour s'authentifier à l'aide du plug-in auth_socket par défaut plutôt qu'avec un mot de passe. Ce plugin nécessite que le nom de l'utilisateur du système d'exploitation qui appelle le client MySQL corresponde au nom de l'utilisateur MySQL spécifié dans la commande, vous devez donc appeler mysql avec les privilèges sudo pour accéder à l'utilisateur MySQL racine :

sudo mysql

Remarque : Si vous avez installé MySQL avec un autre didacticiel et activé l'authentification par mot de passe pour root, vous devrez utiliser une commande différente pour accéder au shell MySQL. Ce qui suit exécutera votre client MySQL avec des privilèges d'utilisateur normaux, et vous n'obtiendrez des privilèges d'administrateur dans la base de données qu'en vous authentifiant :

mysql -u root -p

Une fois que vous avez accès à l'invite MySQL, vous pouvez créer un nouvel utilisateur avec une instruction CREATE USER. Ceux-ci suivent cette syntaxe générale :

CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

Après CREATE USER, vous spécifiez un nom d'utilisateur. Ceci est immédiatement suivi d'un signe @ puis du nom d'hôte à partir duquel cet utilisateur se connectera. Si vous prévoyez uniquement d'accéder à cet utilisateur localement à partir de votre serveur Ubuntu, vous pouvez spécifier localhost. Il n'est pas toujours nécessaire d'envelopper à la fois le nom d'utilisateur et l'hôte dans des guillemets simples, mais cela peut aider à éviter les erreurs.

Vous avez plusieurs options pour choisir le plugin d'authentification de votre utilisateur. Le plugin auth_socket mentionné précédemment peut être pratique, car il offre une sécurité renforcée sans obliger les utilisateurs valides à entrer un mot de passe pour accéder à la base de données. Mais cela empêche également les connexions à distance, ce qui peut compliquer les choses lorsque des programmes externes doivent interagir avec MySQL.

Comme alternative, vous pouvez omettre entièrement la partie WITH authentication_plugin de la syntaxe pour que l'utilisateur s'authentifie avec le plugin par défaut de MySQL, caching_sha2_password. La documentation MySQL recommande ce plugin pour les utilisateurs qui souhaitent se connecter avec un mot de passe en raison de ses fonctionnalités de sécurité renforcées.

Exécutez la commande suivante pour créer un utilisateur qui s'authentifie avec caching_sha2_password. Assurez-vous de remplacer sammy par votre nom d'utilisateur préféré et password par un mot de passe fort de votre choix :

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Remarque : Il existe un problème connu avec certaines versions de PHP qui cause des problèmes avec caching_sha2_password. Si vous envisagez d'utiliser cette base de données avec une application PHP - phpMyAdmin, par exemple - vous pouvez créer un utilisateur qui s'authentifiera avec l'ancien plugin mysql_native_password, bien que toujours sécurisé :

CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Si vous n'êtes pas sûr, vous pouvez toujours créer un utilisateur qui s'authentifie avec caching_sha2_plugin puis ALTER plus tard avec cette commande :

ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Après avoir créé votre nouvel utilisateur, vous pouvez lui accorder les privilèges appropriés. La syntaxe générale pour accorder des privilèges utilisateur est la suivante :

GRANT PRIVILEGE ON database.table TO 'username'@'host';

La valeur PRIVILEGE dans cet exemple de syntaxe définit les actions que l'utilisateur est autorisé à effectuer sur les database et table spécifiés. Vous pouvez accorder plusieurs privilèges au même utilisateur dans une seule commande en les séparant par une virgule. Vous pouvez également accorder des privilèges utilisateur globalement en saisissant des astérisques (*) à la place des noms de base de données et de table. En SQL, les astérisques sont des caractères spéciaux utilisés pour représenter « toutes » les bases de données ou les tables.

Pour illustrer, la commande suivante accorde à un utilisateur des privilèges globaux sur les bases de données, les tables et les utilisateurs CREATE, ALTER et DROP, ainsi que le pouvoir sur [ X166X], UPDATE et DELETE données de n'importe quelle table sur le serveur. Il permet également à l'utilisateur d'interroger des données avec SELECT, de créer des clés étrangères avec le mot-clé REFERENCES et d'effectuer des opérations FLUSH avec le privilège RELOAD. Cependant, vous ne devez accorder aux utilisateurs que les autorisations dont ils ont besoin, alors n'hésitez pas à ajuster les privilèges de votre propre utilisateur si nécessaire.

Vous pouvez trouver la liste complète des privilèges disponibles dans la documentation officielle de MySQL.

Exécutez cette instruction GRANT, en remplaçant sammy par votre propre nom d'utilisateur MySQL, pour accorder ces privilèges à votre utilisateur :

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Notez que cette déclaration inclut également WITH GRANT OPTION. Cela permettra à votre utilisateur MySQL d'accorder toutes les autorisations dont il dispose à d'autres utilisateurs du système.

Avertissement : Certains utilisateurs peuvent souhaiter accorder à leur utilisateur MySQL le privilège ALL PRIVILEGES, qui leur fournira des privilèges de superutilisateur étendus similaires aux privilèges de l'utilisateur root, comme ceci :

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Des privilèges aussi étendus ne doivent pas être accordés à la légère , car toute personne ayant accès à cet utilisateur MySQL aura un contrôle total sur chaque base de données sur le serveur.


Ensuite, il est recommandé d'exécuter la commande FLUSH PRIVILEGES. Cela libérera toute mémoire mise en cache par le serveur suite aux instructions CREATE USER et GRANT précédentes :

FLUSH PRIVILEGES;

Ensuite, vous pouvez quitter le client MySQL :

exit

À l'avenir, pour vous connecter en tant que nouvel utilisateur MySQL, vous utiliserez une commande comme celle-ci :

mysql -u sammy -p

Le drapeau -p amènera le client MySQL à vous demander le mot de passe de votre utilisateur MySQL afin de vous authentifier.

Enfin, testons l'installation de MySQL.

Étape 4 - Tester MySQL

Quelle que soit la manière dont vous l'avez installé, MySQL devrait avoir commencé à s'exécuter automatiquement. Pour le tester, vérifiez son état.

systemctl status mysql.service

La sortie ressemblera à ce qui suit :

Output● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-04-11 16:04:39 UTC; 2h 36min ago
    Process: 2593 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 2601 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1119)
     Memory: 354.3M
        CPU: 19.944s
     CGroup: /system.slice/mysql.service
             └─2601 /usr/sbin/mysqld

Si MySQL n'est pas en cours d'exécution, vous pouvez le démarrer avec sudo systemctl start mysql.

Pour une vérification supplémentaire, vous pouvez essayer de vous connecter à la base de données à l'aide de l'outil mysqladmin, qui est un client qui vous permet d'exécuter des commandes d'administration. Par exemple, cette commande indique de se connecter en tant qu'utilisateur MySQL nommé sammy (-u sammy), de demander un mot de passe (-p) et de renvoyer la version. Assurez-vous de remplacer sammy par le nom de votre utilisateur MySQL dédié et saisissez le mot de passe de cet utilisateur lorsque vous y êtes invité :

sudo mysqladmin -p -u sammy version

Ci-dessous un exemple de sortie :

Outputmysqladmin  Ver 8.0.28-0ubuntu4 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          8.0.28-0ubuntu4
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 2 hours 31 min 57 sec

Threads: 2  Questions: 25  Slow queries: 0  Opens: 160  Flush tables: 3  Open tables: 79  Queries per second avg: 0.000

Cela signifie que MySQL est opérationnel.

Conclusion

Vous avez maintenant une configuration MySQL de base installée sur votre serveur. Voici quelques exemples d'étapes suivantes que vous pouvez suivre :