Comment installer MySQL sur Ubuntu 18.04

Une version précédente de ce tutoriel a été écrite parHazel Virdó

introduction

MySQL est un système de gestion de base de données open-source, généralement installé dans le cadre de la populaire pileLAMP (Linux, Apache, MySQL, PHP / Python / Perl). Il utilise une base de données relationnelle et SQL (Structured Query Language) pour gérer ses données.

La version courte de l'installation est simple: mettez à jour l'index de votre package, installez le packagemysql-server, puis exécutez le script de sécurité inclus.

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

Ce tutoriel expliquera comment installer MySQL version 5.7 sur un serveur Ubuntu 18.04. Cependant, si vous souhaitez mettre à jour une installation MySQL existante vers la version 5.7, vous pouvez lirethis MySQL 5.7 update guide à la place.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • Un serveur Ubuntu 18.04 configuré en suivantthis initial server setup guide, y compris un utilisateur non -root avec les privilègessudo et un pare-feu.

[[step-1 -—- Installing-mysql]] == Étape 1 - Installation de MySQL

Sous Ubuntu 18.04, seule la dernière version de MySQL est incluse dans le référentiel du paquet APT par défaut. Au moment de la rédaction de cet article, il s’agit de MySQL 5.7

Pour l'installer, mettez à jour l'index du package sur votre serveur avecapt:

sudo apt update

Puis installez le paquet par défaut:

sudo apt install mysql-server

Cela installera MySQL, mais ne vous invitera pas à définir un mot de passe ou à apporter d’autres modifications de configuration. Parce que cela laisse votre installation de MySQL non sécurisée, nous en parlerons ensuite.

[[step-2 -—- configuring-mysql]] == Étape 2 - Configurer MySQL

Pour les nouvelles installations, vous voudrez exécuter le script de sécurité inclus. Cela modifie certaines des options par défaut moins sécurisées pour des éléments tels que les connexions racine à distance et les exemples d'utilisateurs. Sur les anciennes versions de MySQL, vous deviez également initialiser le répertoire de données manuellement, mais cela se fait automatiquement maintenant.

Exécutez le script de sécurité:

sudo mysql_secure_installation

Cela vous mènera à travers une série d’invites vous permettant d’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 de votre mot de passe MySQL. Quel que soit votre choix, l'invite suivante sera de définir un mot de passe pour l'utilisateur MySQLroot. Entrez puis confirmez un mot de passe sécurisé de votre choix.

De là, vous pouvez appuyer surY puis surENTER 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.

Pour initialiser le répertoire de données MySQL, vous utiliseriezmysql_install_db pour les versions antérieures à 5.7.6, etmysqld --initialize pour 5.7.6 et versions ultérieures. Toutefois, si vous avez installé MySQL à partir de la distribution Debian, comme décrit à l'étape 1, le répertoire de données a été initialisé automatiquement. vous n'avez rien à faire. Si vous essayez quand même d’exécuter la commande, l’erreur suivante s’affiche:

Sortie

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

Notez que même si vous avez défini un mot de passe pour l'utilisateur MySQL deroot, cet utilisateur n'est pas configuré pour s'authentifier avec un mot de passe lors de la connexion au shell MySQL. Si vous le souhaitez, vous pouvez ajuster ce paramètre en suivant l’étape 3.

[[step-3 -—- optional-Adjusting-user-authentication-and-privileges]] == Étape 3 - (Facultatif) Ajustement de l'authentification et des privilèges utilisateur

Dans les systèmes Ubuntu exécutant MySQL 5.7 (et versions ultérieures), l'utilisateur MySQL deroot est configuré pour s'authentifier en utilisant le pluginauth_socket par défaut plutôt qu'avec un mot de passe. Cela permet une sécurité et une convivialité accrues dans de nombreux cas, mais peut également compliquer les choses lorsque vous devez autoriser un programme externe (par exemple, phpMyAdmin) à accéder à l'utilisateur.

Afin d'utiliser un mot de passe pour vous connecter à MySQL en tant queroot, vous devrez changer sa méthode d'authentification deauth_socket àmysql_native_password. Pour ce faire, ouvrez l’invite MySQL depuis votre terminal:

sudo mysql

Ensuite, vérifiez la méthode d’authentification utilisée par chacun de vos comptes d’utilisateur MySQL avec la commande suivante:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Dans cet exemple, vous pouvez voir que l'utilisateurroot s'authentifie en fait en utilisant le pluginauth_socket. Pour configurer le compteroot afin qu'il s'authentifie avec un mot de passe, exécutez la commandeALTER USER suivante. Assurez-vous de remplacerpassword par un mot de passe fort de votre choix, et notez que cette commande changera le mot de passeroot que vous avez défini à l'étape 2:

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

Ensuite, exécutezFLUSH PRIVILEGES qui dit au serveur de recharger les tables d'octroi et de mettre vos nouvelles modifications en vigueur:

FLUSH PRIVILEGES;

Vérifiez à nouveau les méthodes d'authentification employées par chacun de vos utilisateurs pour confirmer queroot ne s'authentifie plus à l'aide du pluginauth_socket:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Vous pouvez voir dans cet exemple de sortie que l'utilisateur MySQL deroot s'authentifie désormais à l'aide d'un mot de passe. Une fois que vous confirmez cela sur votre propre serveur, vous pouvez quitter le shell MySQL:

exit

Certains peuvent également trouver plus utile de se connecter à MySQL avec un utilisateur dédié. Pour créer un tel utilisateur, ouvrez à nouveau le shell MySQL:

sudo mysql

[.Remarque]##

Note: Si vous avez activé l'authentification par mot de passe pourroot, comme décrit dans les paragraphes précédents, vous devrez utiliser une commande différente pour accéder au shell MySQL. Les éléments suivants exécuteront votre client MySQL avec des privilèges d'utilisateur réguliers et vous n'obtiendrez des privilèges d'administrateur dans la base de données qu'en vous authentifiant:

mysql -u root -p

À partir de là, créez un nouvel utilisateur et attribuez-lui un mot de passe fort:

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

Ensuite, accordez à votre nouvel utilisateur les privilèges appropriés. Par exemple, vous pouvez accorder des privilèges utilisateur à toutes les tables de la base de données, ainsi que le pouvoir d'ajouter, de modifier et de supprimer des privilèges utilisateur, à l'aide de la commande suivante:

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

Notez qu'à ce stade, vous n'avez pas besoin d'exécuter à nouveau la commandeFLUSH PRIVILEGES. Cette commande n'est nécessaire que lorsque vous modifiez les tables d'octroi à l'aide d'instructions telles queINSERT,UPDATE ouDELETE. Parce que vous avez créé un nouvel utilisateur, au lieu de modifier un utilisateur existant,FLUSH PRIVILEGES n'est pas nécessaire ici.

Ensuite, quittez le shell MySQL:

exit

Enfin, testons l’installation de MySQL.

[[step-4 -—- testing-mysql]] == Étape 4 - Test de MySQL

Quel que soit le mode d’installation, MySQL aurait dû commencer à s’exécuter automatiquement. Pour tester cela, vérifiez son statut.

systemctl status mysql.service

Vous verrez une sortie semblable à celle-ci:

Sortie

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
   Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
 Main PID: 3754 (mysqld)
    Tasks: 28
   Memory: 142.3M
      CPU: 1.994s
   CGroup: /system.slice/mysql.service
           └─3754 /usr/sbin/mysqld

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

Pour une vérification supplémentaire, vous pouvez essayer de vous connecter à la base de données à l'aide de l'outilmysqladmin, qui est un client qui vous permet d'exécuter des commandes d'administration. Par exemple, cette commande dit de se connecter à MySQL en tant queroot (-u root), de demander un mot de passe (-p) et de renvoyer la version.

sudo mysqladmin -p -u root version

Vous devriez voir une sortie semblable à ceci:

Sortie

mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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

Server version      5.7.21-1ubuntu1
Protocol version    10
Connection      Localhost via UNIX socket
UNIX socket     /var/run/mysqld/mysqld.sock
Uptime:         30 min 54 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006

Cela signifie que MySQL est opérationnel.

Conclusion

Vous avez maintenant une configuration MySQL de base installée sur votre serveur. Voici quelques exemples des prochaines étapes à suivre:

Related