MySQL 5 - fnac-static.com

26
MySQL 5.7 Optimisez l’exploitation de vos bases de données Christophe REBOUL

Transcript of MySQL 5 - fnac-static.com

ISB

N :

978-

2-74

60-9

986-

9

39 €

MySQL 5.7 Optimisez l’exploitation de vos bases de données

Ingénieur CNAM et créateur de NEOFID Technology, Christophe REBOUL est primé aux trophées du e-commerce catégorie Innovation en 2009. En déve-loppant lui-même sa solution de ges-tion de fidélisation de clientèle, utilisée en réseau par des enseignes majeures de l’hôtellerie, de la mode, du loisir ou de l’alimentation, il acquiert une solide expérience dans les bases de données qu’il dispense en tant que Consul-tant Expert MySQL auprès de grands comptes. Excellent pédagogue, il par-tage volontiers cette expertise pour le plus grand profit des lecteurs.

Ce livre s’adresse à l’informaticien professionnel ayant une bonne connaissance pratique et théorique des bases de données en général et de MySQL 5.7 en particulier. Il a pour objectif de répondre par la pratique à différentes problématiques qui se posent à l’administrateur MySQL 5.7 dans l’exercice de son métier. L’auteur a choisi de traiter des situations diverses et souvent complexes à travers différents cas d’étude inspirés par sa solide expérience au sein de milieux profes-sionnels soumis à de fortes exigences en matière de charge, vo-lume et qualité de service. Après un rappel sur les bases de l’architecture, l’installation et la configuration d’un serveur MySQL 5.7 sont décrites pas à pas. Les dif-férents outils d’aide à l’administration, à l’audit, à l’optimisation et à la sauvegarde sont ensuite présentés. À travers eux sont abordés, de fa-çon concrète, des sujets aussi divers que la migration vers MySQL 5.7, la réplication par GTID, les colonnes calculées, la simulation de vues matérialisées, la prise en charge native de données JSON, la gestion de la sécurité, l’automatisation d’une connexion, la création d’un cer-tificat RSA/SSL et la mise en œuvre d’une connexion sécurisée.Pour améliorer la stabilité d’un serveur MySQL 5.7 et optimiser ses performances, l’auteur propose des solutions qui portent aussi bien sur l’administration de la base que sur la production du code SQL et qui doivent permettre d’anticiper les problèmes. Les techniques présentées dépassent les aspects théoriques habituellement abordés pour propo-ser des méthodes d’optimisation adaptées aux situations les plus diverses.Qu’elle soit utilisée pour la mise en œuvre de serveurs redondants de haute disponibilité ou bien pour répartir la charge, la réplica-tion MySQL et les problématiques associées sont illustrées par des exemples concrets. Plusieurs solutions de répartition de charge sont évoquées et une mise en œuvre de MySQL Proxy est proposée à cette occasion.MySQL Cluster 7.4 n’est pas en reste puisque son installation et sa configuration sont décrites pas à pas pour répondre à certaines problé-matiques de charges extrêmes également traitées dans ce livre.En dernière partie du livre l’auteur présente les solutions pour gérer la transition vers un nouveau moteur, migrer vers un serveur distant ou assurer des sauvegardes sur des données en mouvement sans interruption de service.

MySQL 5.7 Optimisez l’exploitation de vos bases de données

Christophe REBOUL

Avant-propos  •  Installation  de MySQL 5.7 • Outils clients • Pratiques d’admi-nistration  •  Gestion  de  la  sécurité  • MySQL 5.7 et SQL avancé • Optimisa-tion SQL • Gestion de volumes impor-tants  • Répartition de charge et haute disponibilité • Mise en œuvre de la ré-plication • MySQL Cluster 7.4 • MySQL Proxy Migration vers un nouveau ser-veur • Migration vers MySQL 5.7 • Sau-vegarde et restauration • Conclusion

Les chapitres du livre

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

Sur www.editions-eni.fr :b La base de données pour la mise en application

des exemples traités dans le chapitre sur l’optimisation.

Pour plus d’informations :

Opt

imis

ez l’

expl

oita

tion

de v

os b

ases

de

donn

ées

MyS

QL 5

.7

1Table des matières

Avant-propos

Chapitre 1Installation de MySQL 5.7

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

2. Nouveautés de la version 5.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1 Évolution de la sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.2 Modes SQL et comportements associés . . . . . . . . . . . . . . . . . . . 222.3 Renommage des index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.4 Améliorations d'InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.5 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.6 Comportement de Ctrl + C en ligne de commande . . . . . . . . . 232.7 Améliorations de la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . 232.8 Prise en charge native du format JSON. . . . . . . . . . . . . . . . . . . . 242.9 Colonnes calculées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3. Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4. Moteurs de stockage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.1 Aria version 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2 Archive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3 Blackhole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.4 CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.5 Federated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.6 InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.7 Memory (anciennement Heap) . . . . . . . . . . . . . . . . . . . . . . . . . . 284.8 Merge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.9 Mroonga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

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 EIMYSE dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

2Optimisez l’exploitation de vos bases de données

My SQL 5.7

4.10 MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.11 NDB (ou NDBCluster) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.12 TokuDB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.13 XtraDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.14 Tableau récapitulatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.1 Installation de MySQL 5.7 par gestionnaire

de paquets sur Debian 8.0 Jessy. . . . . . . . . . . . . . . . . . . . . . . . . . 325.2 Installation et compilation depuis le code source . . . . . . . . . . . 37

5.2.1 Utilitaires et dépendances . . . . . . . . . . . . . . . . . . . . . . . . 375.2.2 Téléchargement des fichiers sources . . . . . . . . . . . . . . . . 385.2.3 Création du groupe et de l'utilisateur . . . . . . . . . . . . . . . 395.2.4 Génération des fichiers de construction . . . . . . . . . . . . . 395.2.5 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.2.6 Finalisation de l'installation. . . . . . . . . . . . . . . . . . . . . . . 415.2.7 Configuration SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445.2.8 Lancement et test du service MySQL . . . . . . . . . . . . . . . 455.2.9 Automatisation du démarrage du service MySQL . . . . . 46

6. Configuration minimale pour l'accès à distance. . . . . . . . . . . . . . . . . 47

7. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Chapitre 2Outils clients

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2. Outils pour l'administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.1 Administration d'une base MySQL avec mysqladmin. . . . . . . . 49

2.1.1 Création d'une base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.1.2 Suppression d'une base. . . . . . . . . . . . . . . . . . . . . . . . . . . 502.1.3 Changement de mot de passe . . . . . . . . . . . . . . . . . . . . . 502.1.4 Relecture de la table des privilèges . . . . . . . . . . . . . . . . . 512.1.5 Affichage de l'état du serveur. . . . . . . . . . . . . . . . . . . . . . 51

3Table des matières

2.1.6 Affichage du numéro de version . . . . . . . . . . . . . . . . . . . 532.1.7 Arrêt du service MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . 532.1.8 Cumul des options et abréviations . . . . . . . . . . . . . . . . . 532.1.9 Autres fonctions gérées par mysqladmin . . . . . . . . . . . . 54

2.2 Détection des différences entre deux bases et correction avec mysqldbcompare . . . . . . . . . . . . . . . . . . . . . . 552.2.1 Mise en évidence des différences . . . . . . . . . . . . . . . . . . . 552.2.2 Correction des différences et resynchronisation . . . . . . 58

2.3 Copie d'une base avec mysqldbcopy . . . . . . . . . . . . . . . . . . . . . . 612.3.1 Copie d'une base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.3.2 Changement de moteur . . . . . . . . . . . . . . . . . . . . . . . . . . 622.3.3 Accélération de la copie . . . . . . . . . . . . . . . . . . . . . . . . . . 622.3.4 Applications à la réplication . . . . . . . . . . . . . . . . . . . . . . 63

2.4 Détection des différences entre deux objets et correction avec mysqldiff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

2.5 Calcul de l'espace occupé avec mysqldiskusage . . . . . . . . . . . . . 642.6 Création d'une nouvelle instance MySQL

avec mysql_install_db ou mysqld --initialize . . . . . . . . . . . . . . . 662.6.1 Création d'une base avec mysql_install_db

avant MySQL 5.7.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.6.2 Création d'une base avec mysql_install_db

depuis MySQL 5.7.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.6.3 Cas d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.6.4 Création d'une base avec mysqld --initialize. . . . . . . . . . 69

2.7 Configuration SSL/RSA avec mysql_ssl_rsa_setup . . . . . . . . . . 702.8 Automatisation de l'authentification

avec mysql_config_editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732.8.1 Création d'un chemin de connexion (ou login path) . . . 732.8.2 Utilisation d'un chemin de connexion . . . . . . . . . . . . . . 732.8.3 Affichage des chemins de connexion existants . . . . . . . 742.8.4 Suppression d'un chemin de connexion . . . . . . . . . . . . . 742.8.5 Remise à zéro des chemins de connexion . . . . . . . . . . . . 75

4Optimisez l’exploitation de vos bases de données

My SQL 5.7

2.9 Administration de plusieurs instances MySQL avec mysqld_multi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752.9.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752.9.2 Aide et exemple de configuration . . . . . . . . . . . . . . . . . . 762.9.3 Mise en œuvre de la configuration . . . . . . . . . . . . . . . . . 802.9.4 Démarrage des instances . . . . . . . . . . . . . . . . . . . . . . . . . 802.9.5 Création de l'administrateur multi_admin . . . . . . . . . . . 81

2.10 Un service MySQL plus robuste avec mysqld_safe . . . . . . . . . . 822.11 Bascule automatique entre serveurs répliqués

avec mysqlfailover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822.12 Recherche d'objet dans le schéma

d'un serveur avec mysqlmetagrep . . . . . . . . . . . . . . . . . . . . . . . . 832.13 Administration de plugin avec mysql_plugin. . . . . . . . . . . . . . . 872.14 Recherche de processus MySQL avec mysqlprocgrep . . . . . . . . 882.15 Réparation de tables avec mysqlrepair . . . . . . . . . . . . . . . . . . . . 892.16 Démarrage d'une réplication avec mysqlreplicate . . . . . . . . . . . 89

2.16.1 Synchronisation des données. . . . . . . . . . . . . . . . . . . . . . 892.16.2 Configuration du serveur maître . . . . . . . . . . . . . . . . . . . 902.16.3 Configuration du serveur esclave . . . . . . . . . . . . . . . . . . 902.16.4 Création de l'utilisateur dédié à la réplication . . . . . . . . 912.16.5 Démarrage de la réplication . . . . . . . . . . . . . . . . . . . . . . . 91

2.17 Rapport statistique synthétique avec mysqlreport . . . . . . . . . . 922.18 Administration d'une réplication redondante

avec mysqlrpladmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952.18.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952.18.2 Affichage de l'état des serveurs . . . . . . . . . . . . . . . . . . . . 962.18.3 Affichage des informations relatives aux GTID. . . . . . . 972.18.4 Affichage du meilleur candidat à l'élection de master . . 972.18.5 Promotion d'un slave en master . . . . . . . . . . . . . . . . . . . 992.18.6 Bascule vers un slave en cas de défaillance du master . 1002.18.7 Autres options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

2.19 Affichage de la topologie d'une réplication avec mysqlrplshow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

2.20 Diagnostic d'une réplication avec mysqlrplcheck. . . . . . . . . . . 102

5Table des matières

2.21 Vérification des éléments de sécurité avec mysql_secure_installation . . . . . . . . . . . . . . . . . . . . . . . . . 104

2.22 Création d'une instance MySQL clonée avec mysqlserverclone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

2.23 Informations sur la configuration du serveur avec mysqlserverinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

2.24 Informations diverses avec mysqlshow . . . . . . . . . . . . . . . . . . 1122.25 Chargement des informations de changement

horaire avec mysql_tzinfo_to_sql . . . . . . . . . . . . . . . . . . . . . . . 1132.26 Accès centralisé aux différents utilitaires avec mysqluc . . . . . 1132.27 Après un changement de version, mise à jour

des tables avec mysql_upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 1152.28 Clonage d’un utilisateur avec mysqluserclone . . . . . . . . . . . . . 1172.29 Interruption d’un processus avec mysql_waitpid . . . . . . . . . . 1182.30 Administration graphique de MySQL

avec MySQL Workbench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.31 Recherche d’un processus avec mysql_zap . . . . . . . . . . . . . . . . 121

3. Outils d'audit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223.1 Maintenance des tables sur un serveur actif

avec mysqlcheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223.1.1 Vérification des tables avec mysqlcheck . . . . . . . . . . . . 1233.1.2 Réparation d'une table avec mysqlrepair . . . . . . . . . . . 1243.1.3 Mise à jour des statistiques de la table

avec mysqlanalyze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1243.1.4 Optimisation des données avec mysqloptimize . . . . . . 124

3.2 Mise à jour des statistiques avec mysqlanalyze . . . . . . . . . . . . 1253.3 Tests de non-régression avec mysqltest . . . . . . . . . . . . . . . . . . 1253.4 Test des fonctionnalités de la base avec mysql_client_test . . . 1273.5 Extraction des logs binaires avec mysqlbinlog . . . . . . . . . . . . . 1283.6 Détection des index redondants avec mysqlindexcheck . . . . . 1323.7 Simulation de charge avec mysqlslap . . . . . . . . . . . . . . . . . . . . 134

3.7.1 Génération automatique du scénario de test . . . . . . . . 1343.7.2 Scénario de test personnalisé en ligne de commande. . 1363.7.3 Scénario de test personnalisé dans un fichier . . . . . . . . 136

6Optimisez l’exploitation de vos bases de données

My SQL 5.7

3.8 Diagnostic sur la configuration du serveur avec mysqltuner . 1373.8.1 Installation de mysqltuner. . . . . . . . . . . . . . . . . . . . . . . 1373.8.2 Usage de mysqltuner . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

4. Outils pour l'optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1404.1 Défragmentation des tables avec mysqloptimize. . . . . . . . . . . 140

5. Outils de sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415.1 Sauvegarde d'un fichier par table avec mysqldbexport . . . . . . 141

5.1.1 Utilisation basique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415.1.2 Un fichier par table sauvegardée . . . . . . . . . . . . . . . . . . 1425.1.3 Types de verrous. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435.1.4 Accélération de l'export . . . . . . . . . . . . . . . . . . . . . . . . . 143

5.2 Import de données sous différents formats avec mysqldbimport. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435.2.1 Accélération de l'import . . . . . . . . . . . . . . . . . . . . . . . . . 146

5.3 Sauvegarde par mysqldump, l'utilitaire de référence . . . . . . . . 1465.3.1 Sauvegarde d'une seule table . . . . . . . . . . . . . . . . . . . . . 1465.3.2 Sauvegarde de plusieurs tables. . . . . . . . . . . . . . . . . . . . 1465.3.3 Sauvegarde d'une base de données . . . . . . . . . . . . . . . . 1465.3.4 Sauvegarde de plusieurs bases . . . . . . . . . . . . . . . . . . . . 1475.3.5 Sauvegarde de toutes les bases. . . . . . . . . . . . . . . . . . . . 1475.3.6 Inclusion des fonctions et procédures stockées . . . . . . 1475.3.7 Consistance de la sauvegarde avec et sans verrous . . . 1475.3.8 Quelques astuces pour accélérer la sauvegarde

et la restauration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.3.9 Accélération spécifique aux tables InnoDB

et autres tables transactionnelles . . . . . . . . . . . . . . . . . 1495.3.10 Accélération spécifique aux tables MyISAM . . . . . . . . 150

5.4 Sauvegarde évoluée avec mysqlpump, évolution de mysqldump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505.4.1 Compression native . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515.4.2 Parallélisation de la sauvegarde . . . . . . . . . . . . . . . . . . . 1515.4.3 Contrôle avancé des objets sauvegardés . . . . . . . . . . . . 1515.4.4 Meilleure gestion des comptes utilisateurs . . . . . . . . . . 151

7Table des matières

5.4.5 Jauge d'avancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515.4.6 Reconstruction rapide des index InnoDB . . . . . . . . . . . 152

5.5 Lecture des logs des requêtes lentesavec mysqldumpslow . . . 1525.6 Obtention des informations sur une table avec mysqlfrm . . . 155

5.6.1 Lancement de mysqlfrm avec un service MySQL . . . . 1555.6.2 Lancement de mysqlfrm sans service MySQL

en mode diagnostic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575.6.3 Collecte d'informations sur une table partitionnée . . . 157

5.7 Import de données CSV avec mysqlimport . . . . . . . . . . . . . . . 158

6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

Chapitre 3Pratiques d'administration

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

2. Optimisation de l'environnement serveur . . . . . . . . . . . . . . . . . . . . 1612.1 Espace alloué aux tables temporaires . . . . . . . . . . . . . . . . . . . . 1622.2 Espace alloué aux caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

2.2.1 Caches InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632.2.2 Caches MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642.2.3 Intégrations massives . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.2.4 Autres caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

3. Audit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703.1 Logs d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703.2 Requêtes lentes et jointures sans index. . . . . . . . . . . . . . . . . . . 1703.3 Variables de statut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723.4 Synthèse des variables de statut . . . . . . . . . . . . . . . . . . . . . . . . 1763.5 Audit et assistance au réglage avec mysqltuner . . . . . . . . . . . . 1763.6 Stress du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1773.7 Vérification d'une réplication. . . . . . . . . . . . . . . . . . . . . . . . . . . 177

8Optimisez l’exploitation de vos bases de données

My SQL 5.7

4. Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774.1 Surveillance de l'espace occupé . . . . . . . . . . . . . . . . . . . . . . . . . 1774.2 Optimisation des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

4.2.1 Optimisation des statistiques . . . . . . . . . . . . . . . . . . . . 1784.2.2 Optimisation de l'espace de stockage . . . . . . . . . . . . . . 1784.2.3 Suppression des index redondants . . . . . . . . . . . . . . . . 178

4.3 Réparation des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1784.4 Sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Chapitre 4Gestion de la sécurité

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

2. Évolutions de MySQL 5.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

3. Gestion des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1823.1 Création, modification et suppression

d'un compte utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1823.1.1 Création d'un compte. . . . . . . . . . . . . . . . . . . . . . . . . . . 1823.1.2 Visualisation des droits . . . . . . . . . . . . . . . . . . . . . . . . . 1833.1.3 Modification d'un compte . . . . . . . . . . . . . . . . . . . . . . . 1843.1.4 Suppression d'un compte . . . . . . . . . . . . . . . . . . . . . . . . 185

3.2 Ajout et révocation de privilèges . . . . . . . . . . . . . . . . . . . . . . . . 1853.3 Privilèges utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

4. Chiffrement des informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1894.1 Création des certificats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

4.1.1 Création des certificats avec mysql_ssl_rsa_setup . . . . 1894.1.2 Création des certificats avec OpenSSL . . . . . . . . . . . . . 190

4.2 Configuration du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1934.2.1 Création de l'utilisateur avec les droits SSL . . . . . . . . . 1944.2.2 Prise en compte des certificats sur le serveur . . . . . . . . 195

9Table des matières

4.3 Configuration du client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1954.3.1 Copie des certificats sur le client . . . . . . . . . . . . . . . . . . 1954.3.2 Prise en compte de la configuration . . . . . . . . . . . . . . . 195

4.4 Stockage des informations de connexion . . . . . . . . . . . . . . . . . 197

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Chapitre 5MySQL 5.7 et SQL avancé

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

2. Colonnes calculées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1992.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1992.2 Intérêt et usages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.3 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.4 Contrepartie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

3. Fonctions SIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2063.1 Types de données SIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2063.2 Formats WKT et WKB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2073.3 Étude de cas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

3.3.1 Intégration de données spatiales . . . . . . . . . . . . . . . . . . 2083.3.2 Performances d'une table classique . . . . . . . . . . . . . . . . 2093.3.3 Performances du SIG . . . . . . . . . . . . . . . . . . . . . . . . . . . 2103.3.4 Intérêt du SIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

4. Fonctions et procédures stockées. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2124.1 Avantages des fonctions et procédures stockées . . . . . . . . . . . 2124.2 Création d'une procédure stockée . . . . . . . . . . . . . . . . . . . . . . . 2124.3 Création d'une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

5. Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2165.1 Nouveauté MySQL 5.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2165.2 Mise en œuvre d'un trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

10Optimisez l’exploitation de vos bases de données

My SQL 5.7

6. Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2186.1 Mise en œuvre d'une vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

7. Simulation des vues matérialisées . . . . . . . . . . . . . . . . . . . . . . . . . . . 2217.1 Création de la table originelle . . . . . . . . . . . . . . . . . . . . . . . . . . 2217.2 Création d’un trigger d’insertion. . . . . . . . . . . . . . . . . . . . . . . . 222

8. Manipulation de données JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

9. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

Chapitre 6Optimisation SQL

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

2. Évaluation du plan avant l'exécution de la requête . . . . . . . . . . . . . 229

3. Analyse du déroulement d'une requête après son exécution . . . . . . 233

4. Neutralisation du cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

5. Utilisation des index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2365.1 Qu'est-ce qu’un index ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2365.2 Accès à un sous-ensemble d'informations. . . . . . . . . . . . . . . . . 2375.3 L'index, un accélérateur à usage unique . . . . . . . . . . . . . . . . . . 2375.4 Introduction à la notion de meilleur index . . . . . . . . . . . . . . . . 237

5.4.1 Étude de l'index gender . . . . . . . . . . . . . . . . . . . . . . . . . 2385.4.2 Étude de l'index name . . . . . . . . . . . . . . . . . . . . . . . . . . 2425.4.3 Impact du choix de l'index sur les performances . . . . . 243

5.5 De l'intérêt des index composés. . . . . . . . . . . . . . . . . . . . . . . . . 2445.6 Index composé portant sur les clauses

WHERE et ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2465.6.1 Plan d'exécution par défaut . . . . . . . . . . . . . . . . . . . . . . 2465.6.2 Amélioration du plan avec l'index composé

amount_date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2495.6.3 Pourquoi pas l'index composé date_amount ? . . . . . . . 250

5.7 Limitation de la taille d'un index. . . . . . . . . . . . . . . . . . . . . . . . 250

11Table des matières

5.8 Index B-Tree, Hash, R-Tree, Fractal Tree . . . . . . . . . . . . . . . . . 2535.8.1 Index B-Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2535.8.2 Index Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2535.8.3 Index R-Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2535.8.4 Index Fractal Tree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2545.8.5 Moteurs et index supportés . . . . . . . . . . . . . . . . . . . . . . 254

6. Optimisation du schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2546.1 Utilisation du type adapté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2556.2 Limitation des valeurs NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . 2556.3 Adaptation de la taille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2556.4 Utilisation de PROCEDURE ANALYSE(). . . . . . . . . . . . . . . . . 256

7. Optimisation des requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2607.1 Encapsulation de colonne et perte d'index . . . . . . . . . . . . . . . . 260

7.1.1 Encapsulation d'un champ date. . . . . . . . . . . . . . . . . . . 2607.1.2 Encapsulation dans une jointure . . . . . . . . . . . . . . . . . . 262

7.2 Caractères jokers et clause LIKE . . . . . . . . . . . . . . . . . . . . . . . . 265

8. Recherche full text (plein texte) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2688.1 Index full text MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

8.1.1 Construction d'un index full text . . . . . . . . . . . . . . . . . 2698.1.2 Recherche de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2708.1.3 Recherche en langage naturel . . . . . . . . . . . . . . . . . . . . 2718.1.4 Recherche en mode binaire . . . . . . . . . . . . . . . . . . . . . . 2718.1.5 Stopwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2718.1.6 Optimisation des index full text InnoDB . . . . . . . . . . . 2728.1.7 Optimisation des index full text MyISAM. . . . . . . . . . 2728.1.8 Limitations de la recherche full text MySQL . . . . . . . . 273

8.2 Solutions alternatives de recherche full text. . . . . . . . . . . . . . . 2748.2.1 Sphynx Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2748.2.2 Lucene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

9. Gestion des accès concurrents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2759.1 Gestion des accès concurrents par MyISAM . . . . . . . . . . . . . . 2759.2 Gestion des accès concurrents par InnoDB. . . . . . . . . . . . . . . . 276

12Optimisez l’exploitation de vos bases de données

My SQL 5.7

10. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Chapitre 7Gestion de volumes importants

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

2. Partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2792.1 Logique de partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 2802.2 Partitionnement horizontal, partitionnement vertical . . . . . . 2802.3 Gain de performances inhérent au partitionnement . . . . . . . . 2802.4 Activation du partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . 2812.5 Partitionnement BY RANGE . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

2.5.1 Partitionnement de la table CLIENT par store_id . . . . 2822.5.2 Concept de pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2862.5.3 Partitionnement par date. . . . . . . . . . . . . . . . . . . . . . . . 289

2.6 Partitionnement BY LIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2902.7 Partitionnement par colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . 290

2.7.1 Partitionnement BY RANGE COLUMNS . . . . . . . . . . 2912.7.2 Partitionnement BY LIST COLUMNS . . . . . . . . . . . . . 292

2.8 Partitionnement BY HASH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2922.9 Partitionnement BY KEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2942.10 Sous-partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2952.11 Maintenance d'une partition . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

2.11.1 Informations sur une partition . . . . . . . . . . . . . . . . . . . 2972.11.2 Optimisation et défragmentation d'une partition . . . . 3002.11.3 Reconstruction d'une partition . . . . . . . . . . . . . . . . . . . 3002.11.4 Analyse d'une partition . . . . . . . . . . . . . . . . . . . . . . . . . 3002.11.5 Détection des erreurs sur une partition . . . . . . . . . . . . 3012.11.6 Réparation d'une partition. . . . . . . . . . . . . . . . . . . . . . . 3012.11.7 Suppression d'une partition . . . . . . . . . . . . . . . . . . . . . . 3012.11.8 Ajout d'une partition . . . . . . . . . . . . . . . . . . . . . . . . . . . 3012.11.9 Suppression du partitionnement. . . . . . . . . . . . . . . . . . 303

2.12 Limites du partitionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

13Table des matières

2.13 Problème mémoire consécutif à un partitionnement. . . . . . . . 304

3. NoSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3053.1 Technologies NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3053.2 Accélérer l’accès aux données avec Memcached . . . . . . . . . . . . 306

3.2.1 Installation de Memcached . . . . . . . . . . . . . . . . . . . . . . 3063.2.2 Utilisation de Memcached . . . . . . . . . . . . . . . . . . . . . . . 307

4. Solution alternative : MySQL Cluster . . . . . . . . . . . . . . . . . . . . . . . 308

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

Chapitre 8Répartition de charge et haute disponibilité

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

2. Réplication master-slave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

3. Réplication multi-master . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

4. Fonction proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

5. Réplication asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

6. Réplication synchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

7. Réplication semi-synchrone. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

8. Répartition de charge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

9. Haute disponibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

10. Sharding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

11. MySQL Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

12. HA Proxy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

13. MySQL Router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

14. Gestion d'une ferme de serveurs avec MySQL Fabric . . . . . . . . . . . 321

15. MySQL Cluster 7.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

16. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

14Optimisez l’exploitation de vos bases de données

My SQL 5.7

Chapitre 9Mise en œuvre de la réplication

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

2. Mise en œuvre d'un dispositif master-slave . . . . . . . . . . . . . . . . . . . 3252.1 Réplication row-based ou statement-based . . . . . . . . . . . . . . . 325

2.1.1 Exemple de requête déterministe . . . . . . . . . . . . . . . . . 3262.1.2 Exemple de requête non déterministe. . . . . . . . . . . . . . 3262.1.3 Caractéristiques de la réplication statement-based . . . 3262.1.4 Caractéristiques de la réplication row-based . . . . . . . . 3272.1.5 Caractéristiques de la réplication mixed . . . . . . . . . . . . 327

2.2 Qu'est-ce que le GTID ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3282.3 Réplication sans GTID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3282.4 Réplication avec GTID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3292.5 Mise en œuvre de la réplication sans GTID . . . . . . . . . . . . . . . 330

2.5.1 Configuration du serveur maître . . . . . . . . . . . . . . . . . . 3302.5.2 Configuration du serveur esclave . . . . . . . . . . . . . . . . . 3312.5.3 Création de l'utilisateur de réplication sur le master . . 3312.5.4 Prise en compte de la situation des logs du master . . . 3322.5.5 Synchronisation des données. . . . . . . . . . . . . . . . . . . . . 3322.5.6 Configuration de la réplication sur le slave. . . . . . . . . . 333

2.6 Mise en œuvre de la réplication avec GTID . . . . . . . . . . . . . . . 3332.6.1 Restrictions de la réplication avec GTID . . . . . . . . . . . 3342.6.2 Synchronisation des données. . . . . . . . . . . . . . . . . . . . . 3342.6.3 Configuration du master . . . . . . . . . . . . . . . . . . . . . . . . 3342.6.4 Configuration du slave. . . . . . . . . . . . . . . . . . . . . . . . . . 3352.6.5 Création de l'utilisateur dédié à la réplication . . . . . . . 3352.6.6 Mise en route de la réplication . . . . . . . . . . . . . . . . . . . 3362.6.7 Vérification de la mise en route. . . . . . . . . . . . . . . . . . . 336

2.7 Migration d’une réplication existante sous GTID . . . . . . . . . . 338

15Table des matières

3. Mise en œuvre d'un dispositif master-master. . . . . . . . . . . . . . . . . . 3393.1 Configuration initiale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3393.2 Prévention des collisions d'auto-incrément. . . . . . . . . . . . . . . . 3403.3 Création de l'utilisateur de réplication . . . . . . . . . . . . . . . . . . . 3413.4 Synchronisation des données. . . . . . . . . . . . . . . . . . . . . . . . . . . 3423.5 Initialisation des logs binaires . . . . . . . . . . . . . . . . . . . . . . . . . . 3423.6 Dernières vérifications avant démarrage. . . . . . . . . . . . . . . . . . 3433.7 Démarrage de la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.8 Affichage des statuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.9 Vérification de la réplication croisée . . . . . . . . . . . . . . . . . . . . . 346

4. Administration de la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3484.1 Démarrage et arrêt de la réplication . . . . . . . . . . . . . . . . . . . . . 348

4.1.1 Arrêt et reprise de la réplication sur un serveur maître . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

4.1.2 Arrêt et reprise de la réplication sur un serveur esclave. . . . . . . . . . . . . . . . . . . . . . . . . . . 349

4.2 Vérification de la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . 3494.3 Changement de rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

4.3.1 Changement de rôle planifié . . . . . . . . . . . . . . . . . . . . . 3544.3.2 Changement de rôle à la suite d'un incident. . . . . . . . . 355

5. Réduction du lag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3565.1 Réplication de type row-based ou mixed . . . . . . . . . . . . . . . . . 357

5.1.1 Identification du fichier de logs . . . . . . . . . . . . . . . . . . . 3575.1.2 Identification des modifications incriminées . . . . . . . . 357

5.2 Réplication de type statement-based . . . . . . . . . . . . . . . . . . . . 359

6. Réparation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3606.1 Réparation d'une réplication sans GTID. . . . . . . . . . . . . . . . . . 3606.2 Réparation d'une réplication avec GTID. . . . . . . . . . . . . . . . . . 361

7. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

16Optimisez l’exploitation de vos bases de données

My SQL 5.7

Chapitre 10MySQL Cluster 7.4

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

2. Configurations préliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3652.1 Mise à jour des dépôts sur le serveur administratif . . . . . . . . . 3652.2 Installation d'une clé SSH/RSA . . . . . . . . . . . . . . . . . . . . . . . . . 3662.3 Installation de dsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3682.4 Mise à jour des dépôts sur tous les serveurs . . . . . . . . . . . . . . . 3702.5 Installation de paquets complémentaires . . . . . . . . . . . . . . . . . 3702.6 Création des utilisateurs mysql . . . . . . . . . . . . . . . . . . . . . . . . . 3712.7 Création des dossiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3722.8 Téléchargement du paquet MySQL Cluster. . . . . . . . . . . . . . . 372

3. Installation de MySQL Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3723.1 Installation du paquet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.2 Adaptation du script d'installation . . . . . . . . . . . . . . . . . . . . . . 373

3.2.1 Droits insuffisants pour initialiser la base . . . . . . . . . . 3733.2.2 Refus de lancer MySQL en tant que root . . . . . . . . . . . 3743.2.3 En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

3.3 Démarrage de l'installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

4. Démarrage manuel du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3894.1 Démarrage du serveur administratif . . . . . . . . . . . . . . . . . . . . . 3894.2 Démarrage des nœuds de données . . . . . . . . . . . . . . . . . . . . . . 3904.3 Démarrage des nœuds SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

5. Première connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

6. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

7. Administration du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

8. Post-configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3958.1 Adaptation des fichiers de configuration . . . . . . . . . . . . . . . . . 3958.2 Création d'un utilisateur distant . . . . . . . . . . . . . . . . . . . . . . . . 3988.3 Ajout des binaires MySQL Cluster dans le path . . . . . . . . . . . 3988.4 Optimisations sommaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

17Table des matières

8.5 Désinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

9. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

Chapitre 11MySQL Proxy

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

2. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

4. Démarrage du service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

5. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406

6. Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

7. Scripts disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

8. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

Chapitre 12Migration vers un nouveau serveur

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

2. Techniques de copie de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4112.1 Sauvegarde et restauration des données SQL . . . . . . . . . . . . . . 412

2.1.1 Utilisation d'un moteur transactionnel. . . . . . . . . . . . . 4122.1.2 Mise en œuvre d'une réplication . . . . . . . . . . . . . . . . . . 4122.1.3 Utilisation d'un serveur secondaire

(ou serveur tampon) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4132.1.4 Utilitaires à disposition . . . . . . . . . . . . . . . . . . . . . . . . . 415

2.2 Copie des fichiers de données . . . . . . . . . . . . . . . . . . . . . . . . . . 4152.3 Copie des tablespaces InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . 417

3. Bascule vers le nouveau serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4173.1 Bascule depuis l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4173.2 Modification du routage de l'adresse IP . . . . . . . . . . . . . . . . . . 418

18Optimisez l’exploitation de vos bases de données

My SQL 5.7

3.3 Serveur proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

Chapitre 13Migration vers MySQL 5.7

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

2. Règles de mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

3. Changements et incompatibilités dans MySQL 5.7. . . . . . . . . . . . . 4203.1 Configuration et système. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4203.2 Changements serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4203.3 Changements InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4223.4 Changements SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

4. Méthodes de migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4234.1 Conservation du serveur et des données. . . . . . . . . . . . . . . . . . 4234.2 Transfert des données vers un nouveau serveur. . . . . . . . . . . . 424

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

Chapitre 14Sauvegarde et restauration

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

2. Sauvegarde native . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4272.1 Stratégie de sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4282.2 Test de restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

3. Sauvegarde et continuité de service. . . . . . . . . . . . . . . . . . . . . . . . . . 4293.1 Sauvegarde transactionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 4293.2 Sauvegarde depuis un serveur secondaire . . . . . . . . . . . . . . . . . 4293.3 Sauvegarde d'une machine virtuelle . . . . . . . . . . . . . . . . . . . . . 430

19Table des matières

4. Restauration depuis les journaux binaires . . . . . . . . . . . . . . . . . . . . 4304.1 Restauration de l'état initial. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4304.2 Formats existants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

4.2.1 Statement-based binary logs . . . . . . . . . . . . . . . . . . . . . 4324.2.2 Row-based binary logs . . . . . . . . . . . . . . . . . . . . . . . . . . 4334.2.3 Choix du format au démarrage . . . . . . . . . . . . . . . . . . . 4344.2.4 Choix du format à chaud . . . . . . . . . . . . . . . . . . . . . . . . 434

4.3 Extraction des informations pertinentes . . . . . . . . . . . . . . . . . 4354.4 Reconstruction complète des données à un instant précis . . . 4354.5 Reconstruction d'une table à un instant précis . . . . . . . . . . . . 436

5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437

Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

311

Chapitre 8

Répartition de chargeet haute disponibilité

Répartition de charge et haute disponibilité1. Introduction

Quand une base de données est très sollicitée, elle doit faire face à deux typesde problématiques :

– assurer la continuité du service,

– garantir une qualité de service optimale quelle que soit la charge.

En créant une architecture redondante, il est possible de répartir la charge etd'assurer la haute disponibilité d'un service. Mais pour cela, il est nécessaire dedisposer de données à jour et cohérentes sur tous les serveurs du dispositif.

Un système de réplication assure la redondance des données entre différentsserveurs. La manière dont ces données sont copiées diffère suivant les solu-tions, chacune ayant ses avantages et ses faiblesses.

© E

dit

ions

EN

I -

All r

ights

rese

rved

312Optimisez l’exploitation de vos bases de données

MySQL 5.7

2. Réplication master-slave

La réplication master-slave s'appuie sur un serveur de référence, le serveurmaître ou master. Les slaves ou serveurs esclaves ont une base identique à celledu serveur maître. Les modifications réalisées sur les données du maître sontrépercutées sur les esclaves afin de garantir la cohérence des informations. Leserveur maître étant la référence, il est généralement interdit d'écrire sur lesserveurs esclaves, sous peine de désynchroniser la réplication, c'est-à-dire d'in-troduire des différences entre les données du master et du slave. Néanmoins,il reste possible de lire les données d'un serveur esclave, c'est d'ailleurs l'intérêtdu dispositif.

Répartition de charge master-slave où le master est dédié aux écri-tures

La mise en œuvre d'une réplication master-slave est décrite dans le chapitreMise en œuvre de la réplication.

313Répartition de charge et haute disponibilitéChapitre 8

3. Réplication multi-master

Une réplication multi-master est une réplication dans laquelle il n'y a pas deserveur de référence unique. Tous les serveurs sont accessibles en écriture, etchaque modification faite sur un serveur est répercutée sur ses voisins. Unclient peut donc se connecter indifféremment sur l'un ou l'autre des masters,en lecture comme en écriture.

Répartition de charge master-master

Le chapitre Mise en œuvre de la réplication décrit la mise en œuvre d'uneréplication master-master.

© E

dit

ions

EN

I -

All r

ights

rese

rved

314Optimisez l’exploitation de vos bases de données

MySQL 5.7

4. Fonction proxy

Un proxy MySQL est un dispositif destiné à se placer entre les clients et lesserveurs. Ainsi les requêtes peuvent-elles être redirigées de manière transpa-rente vers les différents serveurs en fonction de leur charge (répartition decharge), de leur disponibilité (haute disponibilité), de leur aptitude à écrire ouseulement lire les données, ou des informations qu'ils contiennent (sharding).

Exemple d'un proxy répartiteur de requêtes de lecture/écriture

Remarque

Une démarche plus pragmatique consiste à considérer que toutes les re-quêtes qui ne sont pas des SELECT doivent être dirigées vers le serveur maître.

Le graphe précédent est typique du fonctionnement de HA Proxy et MySQLRouter. En revanche, MySQL Proxy apporte sa valeur ajoutée en ce quiconcerne la répartition des requêtes en lecture/écriture, comme l'indique legraphe dans la section HA Proxy.

315Répartition de charge et haute disponibilitéChapitre 8

5. Réplication asynchrone

Une réplication asynchrone est une réplication dans laquelle un serveurmaître écrit la transaction dans ses logs binaires sans savoir quand ils serontpris en compte par les serveurs esclaves. L'avantage de cette architecture estqu'elle ne ralentit pas les écritures sur le serveur maître. En revanche, rien negarantit que les données soient à jour sur tous les serveurs du dispositif. Toutdélai ou rupture de la réplication sur un serveur introduit une incohérence auniveau des données.

6. Réplication synchrone

La réplication synchrone exige du serveur maître qu'il attende la validation detous les serveurs esclaves avant qu'il puisse lui-même confirmer la transaction.Par conséquent, la cohérence des données est garantie sur tous les serveurs dudispositif. En revanche, les écritures se font à la vitesse du serveur le plus lent.Et en cas de timeout, c'est la transaction tout entière qui est annulée.

Réplication asynchrone

Master 1 Slave 1 Slave 2 Slave 3

Début de transaction

Écriture des logs

Commit Lecture des logs

Exécution Lecture des logs

Commit Exécution

Échec Lecture des logs

Commit

© E

dit

ions

EN

I -

All r

ights

rese

rved

316Optimisez l’exploitation de vos bases de données

MySQL 5.7

7. Réplication semi-synchrone

La réplication semi-synchrone est un parfait mélange des deux types de répli-cations précédents. Le serveur maître valide la transaction quand le premierserveur esclave a reçu et inscrit lui-même la transaction dans ses logs binaires.Il n'est donc pas certain que toutes les données soient à jour sur l'ensemble desserveurs, mais les écritures se font plus rapidement. Et surtout, le masterdispose toujours d'une copie de ses données sur au moins l'un des serveursesclaves du dispositif.

Réplication synchrone

Master 1 Slave 1 Slave 2 Slave 3

Début de transaction

Écriture des logs

Lecture des logs

Exécution Lecture des logs

Commit Exécution

Commit Lecture des logs

Commit

Commit