Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour...

23
MySQL 8 Administration et optimisation Stéphane COMBAUDON

Transcript of Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour...

Page 1: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

ISBN

: 97

8-2-

409-

0171

1-7

34,5

0 €

Pour plus d’informations :

Ce livre sur MySQL 8.0 s’adresse aux développeurs et adminis-trateurs MySQL désireux de consolider leurs connaissances sur le SGBD Open Source le plus répandu du marché.

Le livre débute par une présentation des bases qui vous seront nécessaires pour exploiter au mieux toutes les capacités de MySQL : présentation des spécificités du serveur (architecture et principaux moteurs de stockage), méthodes d’installation mono et multi-instances pour la production et pour le développement, bonnes pratiques de configuration.

Après ces fondamentaux vous donnant une bonne compréhen-sion des spécificités du SGBD, vous apprendrez comment gérer votre serveur au quotidien en ayant à l’esprit les principes essen-tiels de sécurité et en mettant en place des stratégies efficaces de sauvegarde et de restauration.

La dernière partie est consacrée aux techniques avancées qui vous donneront les clés pour résoudre les problèmes les plus complexes : optimisation des index et des requêtes, améliora-tion de la disponibilité et des performances avec la réplication, utilisation de MySQL comme système NoSQL, partitionnement, fonctions de fenêtrage ou encore techniques de surveillance de l’état du SGBD.

Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.com.

MySQL 8Administration et optimisation

Les chapitres du livre

Avant-propos • Généralités sur MySQL • Installation du serveur • Configuration du serveur • Sécurité et gestion des utilisateurs • Sauve-garde et restauration • Optimisation • Réplication • Haute disponibilité • Support JSON et Document Store • Autres fonctionnalités • Outils de surveillance

Stéphane COMBAUDON est Archi-tecte MySQL/DBA et gère un parc de plusieurs centaines de serveurs MySQL. Il est certifié MySQL 5 DBA. Cet expert MySQL administre quotidiennement ce serveur de bases de données, depuis de nom-breuses années et dans des envi-ronnements professionnels diversi-fiés. Il propose aujourd’hui aux lecteurs un livre véritablement effi-cace sur l’administration de MySQL et riche en retours d’expérience.

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Requêtes/commandes utiles pour surveiller l’activité d’un serveur MySQL.b Exemple de script de sauvegarde avec Percona XtraBackup.b Script pour construire avec Docker un cluster InnoDB utilisant la réplication de groupes. M

ySQL

8Ad

min

istr

atio

n et

opt

imis

atio

n

MySQL 8 Administration et optimisation

Stéphane COMBAUDON

Page 2: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

1Table des matières

Avant-propos

1. MySQL en quelques mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2. Objectifs du livre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Chapitre 1Généralités sur MySQL

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2. Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.1 Le serveur et les clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.2 Les protocoles de communication . . . . . . . . . . . . . . . . . . . . . . . . 24

3. Utilisation des ressources matérielles . . . . . . . . . . . . . . . . . . . . . . . . . 253.1 Utilisation du disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2 Utilisation de la mémoire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.3 Utilisation du processeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.4 Utilisation du réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4. Variantes de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.1 MariaDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.2 Percona Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.3 Amazon RDS/Aurora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.4 Galera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5. Les moteurs de stockage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.1 InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

5.1.1 Fonctionnement résumé. . . . . . . . . . . . . . . . . . . . . . . . . . 355.1.2 Fonctionnalités principales. . . . . . . . . . . . . . . . . . . . . . . . 39

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RI8MYSA dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

lcroise
Tampon
Page 3: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

2Administration et optimisation

MySQL 8

5.2 MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.3 Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.4 Archive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.5 XtraDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.6 TokuDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455.7 RocksDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455.8 Autres moteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

6. Verrous et transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.1 Verrous implicites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6.1.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486.1.2 Spécificités InnoDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6.2 Verrous explicites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496.2.1 Verrous de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496.2.2 Spécificités InnoDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516.2.3 Modificateurs SKIP LOCKED et NOWAIT . . . . . . . . . . 53

6.3 Verrous coopératifs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.4 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6.4.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.4.2 InnoDB et les transactions . . . . . . . . . . . . . . . . . . . . . . . . 576.4.3 Mêler moteur transactionnel et moteur

non transactionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.4.4 Interblocages (deadlocks) . . . . . . . . . . . . . . . . . . . . . . . . . 59

Chapitre 2Installation du serveur

1. Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611.1 Stabilité des versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611.2 Version communautaire et version Enterprise . . . . . . . . . . . . . . 621.3 Cycle de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621.4 Choix du type d'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Page 4: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

3Table des matières

2. Installation sous Linux/UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632.1 Installation par gestionnaire de paquets . . . . . . . . . . . . . . . . . . . 632.2 Installation avec les binaires précompilés . . . . . . . . . . . . . . . . . . 662.3 Démarrage du serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2.3.1 Script mysql.server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.3.2 Script mysqld_safe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.3.3 Invocation directe de mysqld . . . . . . . . . . . . . . . . . . . . . . 69

2.4 Arrêt du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.4.1 systemd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.4.2 Script mysql.server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.4.3 mysqladmin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.4.4 Commande kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

2.5 Résolution de problèmes d'installation courants . . . . . . . . . . . . 712.5.1 Erreurs InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.5.2 Fichier errmsg.sys introuvable . . . . . . . . . . . . . . . . . . . . . 72

2.6 Sécurisation de l'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722.7 Installation de plusieurs instances. . . . . . . . . . . . . . . . . . . . . . . . 73

2.7.1 Précautions à prendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732.7.2 Installation de versions différentes . . . . . . . . . . . . . . . . . 742.7.3 Utilisation du même binaire qu'une autre instance . . . . 742.7.4 Démarrage et arrêt des instances avec mysqld_multi . . 75

3. Installation sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.1 Utilisation de l'installeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.2 Installation avec les binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.3 Démarrage du serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

3.3.1 Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.3.2 Invocation directe de mysqld . . . . . . . . . . . . . . . . . . . . . . 83

3.4 Arrêt du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.4.1 Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.4.2 mysqladmin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.4.3 Gestionnaire des tâches . . . . . . . . . . . . . . . . . . . . . . . . . . 84

Page 5: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

4Administration et optimisation

MySQL 8

3.5 Résolution des problèmes d'installation . . . . . . . . . . . . . . . . . . . 843.5.1 Droits insuffisants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.5.2 Conflit avec une installation existante . . . . . . . . . . . . . . 843.5.3 Problèmes dans les chemins . . . . . . . . . . . . . . . . . . . . . . . 84

3.6 Sécurisation de l'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.7 Installation de plusieurs instances . . . . . . . . . . . . . . . . . . . . . . . 85

3.7.1 Précautions à prendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.7.2 Versions différentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.7.3 Utilisation du même binaire. . . . . . . . . . . . . . . . . . . . . . . 86

4. Installations de test avec Docker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

5. Mise à jour de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895.1 Précautions à prendre avant la mise à jour . . . . . . . . . . . . . . . . . 89

5.1.1 Sauts de version. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895.1.2 Changements apportés par une version . . . . . . . . . . . . . 905.1.3 Sauvegarde des données . . . . . . . . . . . . . . . . . . . . . . . . . . 90

5.2 Processus de mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.2.1 Stratégies possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.2.2 Mise à jour des binaires . . . . . . . . . . . . . . . . . . . . . . . . . . 925.2.3 Vérification des tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

5.3 Vérifications après la mise à jour. . . . . . . . . . . . . . . . . . . . . . . . . 92

6. Installation des outils utilisés dans l’ouvrage . . . . . . . . . . . . . . . . . . . 936.1 Installation de la base world . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936.2 Installation de la base sakila . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

7. Installation du Percona Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Page 6: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

5Table des matières

Chapitre 3Configuration du serveur

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

2. Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982.1 Fichier de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982.2 Structure du fichier de configuration . . . . . . . . . . . . . . . . . . . . . 992.3 Paramétrage dynamique du serveur . . . . . . . . . . . . . . . . . . . . . 101

2.3.1 Changement pour la session . . . . . . . . . . . . . . . . . . . . . 1012.3.2 Changement global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

3. Visualisation de la configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

4. Configuration d’InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074.1 Paramètres essentiels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074.2 Isolation et durabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

4.2.1 Réglage de l’isolation. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104.2.2 Réglage de la durabilité . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.3 Autres paramètres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

5. La journalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.1 Le journal binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.2 Le journal des requêtes lentes . . . . . . . . . . . . . . . . . . . . . . . . . . 1225.3 Le journal des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1265.4 Le journal général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.5 Rotation des journaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295.6 Bonnes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

5.6.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295.6.2 Surveiller l’utilisation du disque. . . . . . . . . . . . . . . . . . . 1305.6.3 Impact sur les performances. . . . . . . . . . . . . . . . . . . . . . 130

6. Le mode SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306.1 Les modes usuels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316.2 Les combinaisons de modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356.3 Mode SQL par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Page 7: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

6Administration et optimisation

MySQL 8

7. Autres paramètres à configurer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377.1 Autres variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

7.1.1 Nombre de connexions simultanées . . . . . . . . . . . . . . . 1377.1.2 Caches de table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377.1.3 Cache de threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387.1.4 Paramètres MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

7.2 Paramètres à ne pas modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Chapitre 4Sécurité et gestion des utilisateurs

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

2. Sécurisation du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422.1 Sécurisation de l'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

2.1.1 Contrôler les droits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422.1.2 Ajouter un mot de passe au compte utilisateur root . . 1432.1.3 Supprimer les comptes anonymes . . . . . . . . . . . . . . . . . 1442.1.4 Supprimer le schéma test . . . . . . . . . . . . . . . . . . . . . . . . 1452.1.5 Sécuriser votre installation

avec l’outil mysql_secure_installation. . . . . . . . . . . . . . 1452.2 Chiffrement des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462.3 Utilisation de SSL/TLS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492.4 Options liées à la sécurité. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

2.4.1 skip-networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502.4.2 bind-address. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.4.3 skip-name-resolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522.4.4 skip-show-database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1532.4.5 secure-file-priv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

3. Gestion des comptes utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543.2 Comptes utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

3.2.1 Créer un compte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563.2.2 Modifier le mot de passe. . . . . . . . . . . . . . . . . . . . . . . . . 158

Page 8: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

7Table des matières

3.2.3 Utilitaire de configuration des mots de passe . . . . . . . . 1583.2.4 Récupérer le mot de passe administrateur. . . . . . . . . . . 160

3.3 Rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613.4 Attribution des droits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

3.4.1 Les droits d’administration. . . . . . . . . . . . . . . . . . . . . . . 1653.4.2 Les droits au niveau des schémas . . . . . . . . . . . . . . . . . . 1663.4.3 Les droits au niveau des tables . . . . . . . . . . . . . . . . . . . . 1673.4.4 Les droits au niveau des colonnes . . . . . . . . . . . . . . . . . 1683.4.5 Les droits pour les routines stockées . . . . . . . . . . . . . . . 1693.4.6 Limitation de l’utilisation des ressources . . . . . . . . . . . 1703.4.7 Visualisation des droits. . . . . . . . . . . . . . . . . . . . . . . . . . 1713.4.8 Prise d’effet des droits . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713.4.9 Suppression des droits . . . . . . . . . . . . . . . . . . . . . . . . . . 1733.4.10 Bonnes pratiques de la gestion des droits . . . . . . . . . . . 1753.4.11 Sécurisation des vues et des routines stockées . . . . . . . 176

4. Plugins de sécurité avancée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774.1 Validation des mots de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774.2 Expiration du mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1804.3 Contrôle des connexions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

Chapitre 5Sauvegarde et restauration

1. Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1831.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1831.2 Différents types de sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . 185

1.2.1 Sauvegarde logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1851.2.2 Sauvegarde physique. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1861.2.3 Sauvegarde complète/incrémentale . . . . . . . . . . . . . . . . 187

1.3 Autres facteurs influençant la sauvegarde . . . . . . . . . . . . . . . . 1891.3.1 Réplication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1891.3.2 Moteurs de stockage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.3.3 Utilisation combinée de MyISAM et InnoDB . . . . . . . 192

Page 9: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

8Administration et optimisation

MySQL 8

1.4 Restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

2. En pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1942.1 Import/export manuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1942.2 mysqldump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1982.3 Percona XtraBackup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2042.4 Autres solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

2.4.1 mysqlpump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2062.4.2 mydumper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2062.4.3 Snapshots (clichés) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Chapitre 6Optimisation

1. Matériel et système d'exploitation . . . . . . . . . . . . . . . . . . . . . . . . . . 2091.1 Processeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2091.2 Mémoire vive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2111.3 Disque dur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

1.3.1 Éléments de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2131.3.2 RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2131.3.3 SSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

1.4 Système d'exploitation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

2. Optimisation du schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2162.1 Types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

2.1.1 Principes généraux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2162.1.2 Nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2172.1.3 Chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . 2182.1.4 Données binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2222.1.5 Dates et heures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2222.1.6 ENUM et SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2232.1.7 JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Page 10: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

9Table des matières

2.2 Normalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2252.2.1 Rôle de la normalisation . . . . . . . . . . . . . . . . . . . . . . . . . 2252.2.2 Première forme normale . . . . . . . . . . . . . . . . . . . . . . . . . 2252.2.3 Deuxième forme normale . . . . . . . . . . . . . . . . . . . . . . . . 2272.2.4 Troisième forme normale . . . . . . . . . . . . . . . . . . . . . . . . 2292.2.5 Résumé des avantages de la normalisation . . . . . . . . . . 2322.2.6 Inconvénients de la normalisation. . . . . . . . . . . . . . . . . 232

2.3 Dénormalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2332.4 Modification du schéma en production . . . . . . . . . . . . . . . . . . 234

3. Indexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.1 Généralités sur les index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

3.1.1 Rôle d'un index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2373.1.2 Clés et index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2383.1.3 Colonnes pouvant bénéficier d'un index . . . . . . . . . . . . 2383.1.4 Création/suppression d'un index . . . . . . . . . . . . . . . . . . 2393.1.5 Quelles colonnes indexer ? . . . . . . . . . . . . . . . . . . . . . . . 240

3.2 Types d'index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2413.2.1 Index uniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2413.2.2 Clés primaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2423.2.3 Index non uniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2433.2.4 Index sur plusieurs colonnes . . . . . . . . . . . . . . . . . . . . . 2433.2.5 Index sur un préfixe de colonne . . . . . . . . . . . . . . . . . . . 2443.2.6 Index redondants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2453.2.7 Clés étrangères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2493.2.8 Index invisibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

3.3 Notions avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.3.1 Index B-Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.3.2 Index hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2583.3.3 Autres algorithmes d'indexation . . . . . . . . . . . . . . . . . . 2603.3.4 Sélectivité et distribution des valeurs . . . . . . . . . . . . . . 2603.3.5 Index cluster InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . 2643.3.6 Index couvrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Page 11: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

10Administration et optimisation

MySQL 8

4. La commande EXPLAIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2694.1 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2694.2 Accès aux données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

4.2.1 Accès séquentiel ou aléatoire . . . . . . . . . . . . . . . . . . . . . 2704.2.2 Accès en mémoire ou sur disque . . . . . . . . . . . . . . . . . . 2704.2.3 En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

4.3 Lire le plan d'exécution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2724.3.1 Exemple simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2724.3.2 Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2734.3.3 Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2734.3.4 Sous-requêtes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

4.4 Colonnes principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2784.4.1 Types d'accès aux données . . . . . . . . . . . . . . . . . . . . . . . 2784.4.2 Index examinés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2814.4.3 Nombre de lignes parcourues . . . . . . . . . . . . . . . . . . . . . 2824.4.4 La colonne filtered. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2844.4.5 La colonne Extra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

4.5 EXPLAIN EXTENDED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

5. Optimisation des requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2875.1 Isolation des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2875.2 Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2885.3 Filtrages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2925.4 Tris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2935.5 Agrégations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2945.6 Réécriture de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2955.7 Utilisation de plusieurs index . . . . . . . . . . . . . . . . . . . . . . . . . . 2955.8 Autres techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

6. Autres optimisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2976.1 Index Condition Pushdown. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2976.2 Multi Range Read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

Page 12: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

11Table des matières

7. Maintenance des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3007.1 Mise à jour des statistiques d’index. . . . . . . . . . . . . . . . . . . . . . 3007.2 Défragmentation des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3017.3 Autres commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Chapitre 7Réplication

1. Généralités sur la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3031.1 Utilité de la réplication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3041.2 Fonctionnement de la réplication . . . . . . . . . . . . . . . . . . . . . . . 3051.3 Formats de réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

2. Mise en place de la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3092.1 Réplication maître-esclave(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

2.1.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3092.1.2 Forces et faiblesses de cette configuration. . . . . . . . . . . 312

2.2 Réplication maître-maître . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3122.2.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3132.2.2 Forces et faiblesses de cette configuration. . . . . . . . . . . 314

2.3 Réplication sur plusieurs niveaux . . . . . . . . . . . . . . . . . . . . . . . 3172.3.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3182.3.2 Forces et faiblesses de cette configuration. . . . . . . . . . . 318

2.4 Principales variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

3. Résolution des problèmes opérationnels courants . . . . . . . . . . . . . . 3213.1 Empêcher la réplication de certaines requêtes . . . . . . . . . . . . . 3213.2 Non-réplication d’une requête . . . . . . . . . . . . . . . . . . . . . . . . . . 3233.3 Éviter le retard de réplication. . . . . . . . . . . . . . . . . . . . . . . . . . . 3243.4 Corriger une erreur de réplication . . . . . . . . . . . . . . . . . . . . . . . 3253.5 Récupérer l’espace disque des journaux binaires . . . . . . . . . . . 3273.6 Supprimer la configuration de réplication . . . . . . . . . . . . . . . . 3283.7 Vérifier la cohérence des données entre maître et esclaves . . . 329

Page 13: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

12Administration et optimisation

MySQL 8

3.8 Quelques commandes utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . 3303.8.1 SHOW SLAVE STATUS . . . . . . . . . . . . . . . . . . . . . . . . 3303.8.2 START/STOP SLAVE

{IO_THREAD|SQL_THREAD} . . . . . . . . . . . . . . . . . . 3323.8.3 RESET MASTER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

4. Réplication et scalabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3354.1 Scalabilité en lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3354.2 Scalabilité en écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

5. Fonctionnalités avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3375.1 Identifiants de transaction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3375.2 Réplication parallèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3395.3 Réplication multisource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

5.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3405.3.2 Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

5.4 Réplication semi-synchrone. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3425.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3425.4.2 Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3435.4.3 Améliorations à partir de MySQL 5.7 . . . . . . . . . . . . . . 346

5.5 Réplication retardée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

Chapitre 8Haute disponibilité

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

2. Utilisation de la réplication classique . . . . . . . . . . . . . . . . . . . . . . . . 3502.1 Mécanisme de promotion d’un esclave . . . . . . . . . . . . . . . . . . . 3502.2 Automatisation de la promotion. . . . . . . . . . . . . . . . . . . . . . . . 356

3. Réplication de groupe et InnoDB Cluster . . . . . . . . . . . . . . . . . . . . . 3573.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3573.2 Bénéfices/limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3583.3 Réplication virtuellement synchrone . . . . . . . . . . . . . . . . . . . . 3593.4 Écritures sur plusieurs nœuds . . . . . . . . . . . . . . . . . . . . . . . . . . 361

Page 14: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

13Table des matières

3.5 Le flow control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3623.6 Choix du nombre de nœuds. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3643.7 Nœuds géographiquement éloignés . . . . . . . . . . . . . . . . . . . . . 3663.8 Mise en place. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3663.9 InnoDB Cluster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

Chapitre 9Support JSON et Document Store

1. Colonnes générées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3731.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3731.2 Colonnes virtuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3741.3 Colonnes persistantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

2. Support JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.1 Le type de données JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

3. Exemple d’opérations sur des colonnes JSON . . . . . . . . . . . . . . . . . 3783.1 Indexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

4. Document Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3794.1 SQL et NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3794.2 Installation et vocabulaire associé . . . . . . . . . . . . . . . . . . . . . . . 382

4.2.1 Installation du Document Store . . . . . . . . . . . . . . . . . . 3824.2.2 Installation du MySQL Shell . . . . . . . . . . . . . . . . . . . . . 3834.2.3 Collections et documents . . . . . . . . . . . . . . . . . . . . . . . . 3844.2.4 La base exemple world_x . . . . . . . . . . . . . . . . . . . . . . . . 385

4.3 Exemple d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Page 15: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

14Administration et optimisation

MySQL 8

Chapitre 10Autres fonctionnalités

1. Partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3911.1 Intérêt et limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

1.1.1 Gestion des gros volumes . . . . . . . . . . . . . . . . . . . . . . . . 3911.1.2 Partition pruning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3921.1.3 Suppression rapide d’un gros volume de données. . . . . 3921.1.4 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

1.2 Types de partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3961.2.1 Le partitionnement de type RANGE . . . . . . . . . . . . . . . 3971.2.2 Le partitionnement de type RANGE COLUMNS . . . . 4001.2.3 Le partitionnement de type LIST. . . . . . . . . . . . . . . . . . 4011.2.4 Le partitionnement de type LIST COLUMNS . . . . . . . 4031.2.5 Le partitionnement de type HASH . . . . . . . . . . . . . . . . 4051.2.6 Le partitionnement de type KEY . . . . . . . . . . . . . . . . . . 4091.2.7 Les variantes LINEAR HASH/KEY . . . . . . . . . . . . . . . . 4111.2.8 Choix explicite d’une partition . . . . . . . . . . . . . . . . . . . 4141.2.9 Sous-partitionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . 4151.2.10 Fonctions du partitionnement . . . . . . . . . . . . . . . . . . . . 4191.2.11 Import et export d’une partition dans une table . . . . . 421

1.3 Gestion du partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 4251.4 Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

2. Routines stockées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4302.1 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4302.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

2.2.1 Procédures stockées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4322.2.2 Fonctions stockées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

2.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4402.4 Métadonnées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4432.5 Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Page 16: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

15Table des matières

3. Déclencheurs (triggers). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4473.1 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4473.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4473.3 Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

4. Événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4514.1 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4514.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4524.3 Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

5. Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4565.1 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4565.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

6. Nouvelles fonctionnalités de MySQL 8.0 . . . . . . . . . . . . . . . . . . . . . 4646.1 Fonctions de fenêtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4646.2 Requêtes avec WITH (Common Table Expressions) . . . . . . . . 467

Chapitre 11Outils de surveillance

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471

2. Accès aux métadonnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4722.1 Commandes spécifiques MySQL. . . . . . . . . . . . . . . . . . . . . . . . 472

2.1.1 Commandes SHOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4722.1.2 Commande DESCRIBE. . . . . . . . . . . . . . . . . . . . . . . . . . 474

2.2 Base information_schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

3. Outils de base pour la surveillance . . . . . . . . . . . . . . . . . . . . . . . . . . 4773.1 SHOW PROCESSLIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4773.2 SHOW GLOBAL STATUS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4783.3 SHOW ENGINE INNODB STATUS . . . . . . . . . . . . . . . . . . . . 482

3.3.1 SEMAPHORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4833.3.2 LAST FOREIGN KEY ERROR . . . . . . . . . . . . . . . . . . . . 4833.3.3 LAST DETECTED DEADLOCK . . . . . . . . . . . . . . . . . . 4833.3.4 TRANSACTIONS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

Page 17: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

16Administration et optimisation

MySQL 8

3.3.5 FILE I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4843.3.6 INSERT BUFFER AND ADAPTATIVE HASH INDEX4843.3.7 LOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4843.3.8 BUFFER POOL AND MEMORY. . . . . . . . . . . . . . . . . . 4843.3.9 ROW OPERATIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . 484

4. Performance Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4854.1 Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4854.2 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4864.3 Schéma sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

5. Identification des problèmes de requêtes . . . . . . . . . . . . . . . . . . . . . 4895.1 Requêtes lentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4895.2 Deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492

6. Outils de surveillance du système . . . . . . . . . . . . . . . . . . . . . . . . . . . 4956.1 Cacti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4956.2 Grafana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4956.3 Nagios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4966.4 Identification des problèmes système sous Linux . . . . . . . . . . 496

6.4.1 vmstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4966.4.2 iostat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4986.4.3 mpstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501

Page 18: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

141

Chapitre 4

Sécurité et gestion des utilisateurs

Sécurité et gestion des utilisateurs1. Introduction

Savez-vous qu’une bonne partie des attaques informatiques les plus médiati-sées concernent les bases de données ? En y réfléchissant, c’est parfaitementlogique : les parties les plus sensibles d’un système informatique sont les don-nées personnelles (identifiants, mots de passe, nationalité, salaire, historiquede santé…) qui sont stockées dans une base de données. Il est donc impératifde veiller à la sécurisation de vos serveurs MySQL si vous voulez éviter la mau-vaise publicité liée à une fuite de données.

Ce chapitre a pour but de vous donner les clés pour assurer la sécurité de votresystème MySQL. Notez que nous nous limitons aux éléments spécifiques àMySQL et que d’autres éléments tout aussi importants tels que la sécurisationdu serveur hôte ou du réseau ne sont pas abordés.

lcroise
Tampon
Page 19: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

© E

dit

ions

EN

I -

All r

ights

rese

rved

142Administration et optimisation

MySQL 8

2. Sécurisation du serveur

Les questions liées à la sécurité doivent être posées dès l’installation du serveurde base de données. Dans la philosophie de MySQL l'utilisateur doit pouvoirtélécharger, installer et utiliser le SGBDR (système de gestion de bases de don-nées relationnelles) sans aucune difficulté. Cette simplicité est l’un des pointsforts de MySQL, car d’une part cela a permis de démocratiser l’utilisationd’une base de données en rendant accessible cet univers (beaucoup de déve-loppeurs ont connu les bases de données grâce à MySQL) et d’autre part, celadonne la possibilité de tester très simplement son application. Mais histori-quement, l’installation par défaut a longtemps été beaucoup trop permissive,ce qui explique pourquoi on trouve encore nombre de serveurs mal sécurisés.De gros progrès ont été réalisés à partir notamment de MySQL 5.7.

2.1 Sécurisation de l'installation

Le but de cette section n’est pas de revenir sur l’installation du serveur qui estdétaillée au chapitre Installation du serveur, mais simplement de rappelerquelques points cruciaux concernant la sécurité. Vous devrez certainement lesadapter en fonction de votre type d’installation et de votre système d’exploi-tation.

2.1.1 Contrôler les droits

Vous devez créer un groupe et un utilisateur dédié pour lancer l’instancemysqld (cette étape est effectuée automatiquement si vous utilisez un instal-leur ou votre gestionnaire de paquets) :

$ groupadd mysql

$ useradd -g mysql mysql

Le répertoire de données contient les informations sensibles, il doit donc êtrepréservé d'actes de malveillance ou de la visualisation par des personnes nonautorisées :

$ cd /usr/local/mysql/

$ chown -R root .

$ chown -R mysql data

$ chgrp -R mysql .

Page 20: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

143Sécurité et gestion des utilisateursChapitre 4

mysqld ne doit en aucun cas être exécuté avec l’administrateur systèmeroot sous UNIX (ou administrateur sous MS Windows). Un utilisateuravec par exemple le droit FILE pourrait créer des fichiers en tant que root.

2.1.2 Ajouter un mot de passe au compte utilisateur root

C’est le superutilisateur de MySQL (à ne pas confondre avec l’administrateursystème root sous UNIX) ; il a donc tous les droits sur le serveur ; il doit êtreprotégé par un mot de passe. Ceci est valable quel que soit le système d’exploi-tation.

$ mysql -u root # connexion au serveur avec l’utilisateur root sans

mot de passe

mysql> ALTER USER root@localhost IDENTIFIED BY 'm0T2p4ss3';

Comme vous allez le voir un peu plus loin, un utilisateur MySQL est composéd’un nom « user » et du nom de la machine à partir de laquelle l’utilisateur seconnecte « host ». Vous pouvez donc avoir un compte 'root'@'localhost'qui permet de se connecter au serveur avec l’utilisateur root à condition quele client soit sur la même machine que le serveur MySQL (en local) et parexemple un compte 'root'@'123.45.67.89' qui, lui ne permet de seconnecter en root qu’à partir de la machine qui a comme adresse IP123.45.67.89. Ce sont bien deux comptes différents, qui peuvent avoir desdroits et des mots de passe différents. Cette possibilité offerte par le serveurpeut permettre une gestion des droits très fine. Cependant, par expérience,nous vous conseillons de n’avoir qu’une seule occurrence par utilisateur, parsouci de simplification de la gestion des droits et donc pour diminuer lesrisques d’erreurs. En d’autres termes, ne gardez que l’utilisateur'root'@'localhost'. Si vous avez besoin d’administrer votre serveur à dis-tance, au lieu d’avoir 'root'@'%' (qui permet de se connecter avec l’utilisa-teur root depuis n’importe quelle machine), utilisez le protocole decommunication sécurisée SSH ou un équivalent.

Exemple : Si vous trouvez plusieurs comptes root sur votre système,alors que seul le compte root@localhost est utile

mysql> SELECT user, host FROM mysql.user WHERE user = 'root' \G

*************************** 1. row ***************************

user: root

host: localhost

Page 21: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

© E

dit

ions

EN

I -

All r

ights

rese

rved

144Administration et optimisation

MySQL 8

*************************** 2. row ***************************

user: root

host: 123.456.78.9

Vous pouvez supprimer le compte inutile :

mysql> DROP USER 'root'@'123.456.78.9' ;

mysql> SELECT user, host FROM mysql.user WHERE user = 'root' \G

*************************** 1. row ***************************

user: root

host: localhost

Remarque

Renommer le compte administrateur : vous pouvez renommer votre compteadministrateur pour qu’il soit plus difficile à trouver par une personne malveil-lante : RENAME USER 'root'@'localhost' TO 'leader'@'localhost';

2.1.3 Supprimer les comptes anonymes

Des comptes anonymes, c’est-à-dire des comptes ayant le champ user à vide,peuvent être présents sur votre système. Certains installeurs créaient automa-tiquement un tel compte dans le passé avec certaines versions de MySQL. Uncompte anonyme permet de se connecter au serveur avec n’importe quel uti-lisateur, en local et sans mot de passe : pratique, mais franchement probléma-tique au niveau sécurité. Mieux vaut supprimer au plus vite ce genre decomptes, qui peuvent être trouvés avec la requête suivante :

mysql> SELECT user, host FROM mysql.user WHERE user = '' \G

*************************** 1. row ***************************

user:

host: localhost

password:

Remarque

Depuis MySQL 5.7, plus aucun compte anonyme n’est créé lors de l’installationdu serveur.

Page 22: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

145Sécurité et gestion des utilisateursChapitre 4

2.1.4 Supprimer le schéma test

Le schéma test est créé par MySQL lors de l’installation pour toutes les ver-sions avant 5.7 et tous les utilisateurs ont le droit d’y accéder en lecturecomme en écriture sans qu’il soit nécessaire de spécifier explicitement lesdroits adéquats. Un utilisateur mal intentionné pourrait alors remplir de don-nées votre disque dur et ainsi empêcher le bon fonctionnement de votre appli-cation. Si ce schéma n’a aucune utilité pour votre application, mieux vaut lesupprimer :

mysql> SHOW SCHEMAS;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| test |

+--------------------+

mysql> DROP SCHEMA test;

À noter que cette recommandation s’applique également à tout schéma testqui serait créé par la suite, mais également à tout schéma qui commenceraitpar le mot test_.

2.1.5 Sécuriser votre installation avec l’outil mysql_secure_installation

La mise en œuvre de ces différentes recommandations peut être effectuée avecl'outil mysql_secure_installation. Cet outil n'est pas disponible sousMS Windows, cependant l'installeur graphique propose également de sécuri-ser l'installation.

Il suffit de lancer le script en tant qu’utilisateur Linux root et de suivre lesindications à l’écran :

# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords

and improve security. It checks the strength of password

Page 23: Administration et optimisation MySQL 8.0 et optimisation ...34,50 € ISBN : 978-2-409-01711-7 Pour plus d’informations : Ce livre sur MySQL 8.0 s’adresse aux développeurs et

© E

dit

ions

EN

I -

All r

ights

rese

rved

146Administration et optimisation

MySQL 8

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD plugin?

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

2.2 Chiffrement des données

Pour faire face aux besoins de chiffrement d’informations sensibles (finan-cières, médicales...) ou pour tenter de se prémunir contre le vol de données,contre des administrateurs peu scrupuleux, il peut être nécessaire de crypterses données. Avant la version 5.7, MySQL ne possédait pas de modules de chif-frement capables par exemple de crypter le contenu d’une colonne ou d’unetable. Une possibilité était cependant de crypter/décrypter des données avecles fonctions MySQL telles que AES_ENCRYPT() / AES_DECRYPT(),DES_ENCRYPT() / DES_DECRYPT() et ENCODE() / DECODE().

Remarque

Pour plus de détails, consultez la page suivante : https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html

Les données sont alors cryptées sur le disque. Par contre, elles sont en clair, ycompris la clé de cryptage dans le code SQL ainsi que sur le réseau. Parexemple :

mysql> INSERT INTO t_crypt VALUES (1, AES_ENCRYPT('Phrase cryptée',

'crypt_key'));

mysql> SELECT i, b FROM t_crypt;

+------+------------------+

| i | data_crypt |

+------+------------------+

| 1 | ?z#?uػb?7?G[g,< |

+------+------------------+

mysql> SELECT i, AES_DECRYPT(b,'crypt_key') AS data_crypt FROM t_crypt;

+------+----------------+

| i | data_crypt |

+------+----------------+

| 1 | Phrase cryptée |

+------+----------------+