Frédéric Descamps Ami des Dauphins MySQL Février 2022 Le Cycle d'Une Instance MySQL
Copyright @ 2022 Oracle and/or its affiliates. Qui suis-je ? about.me/lefred 2
  Frédéric Descamps Copyright @ 2022 Oracle and/or its affiliates. @lefred Évangesliste MySQL Utilise MySQL depuis la version 3.21 passionné devops habitant en h ps://lefred.be 3
Copyright @ 2022 Oracle and/or its affiliates. les bonnes pratiques en 2022 paramètres de con guration 4
je présume lors de ce e présentation que votre système utilise MySQL 8.0.28 ou plus récent n'utilise que InnoDB a les "binary logs" activés le format des "binary logs" est ROW utilise GTID Copyright @ 2022 Oracle and/or its affiliates. 5
Copyright @ 2022 Oracle and/or its affiliates. Évolution vers la Haute Disponibilité MySQL 8.0 6
Copyright @ 2022 Oracle and/or its affiliates. 7
Voici où tout commence... et on n'oublie pas: on utilise QUE InnoDB on garde les paramètres de durabilité par défaut Une simple instance MySQL   Copyright @ 2022 Oracle and/or its affiliates. 8
Une simple instance MySQL Copyright @ 2022 Oracle and/or its affiliates. / / RPO ? ? RTO 9
Palier suivant (level up) La base de données gagne en importance, la perdre totalement pourrait être un problème... Copyright @ 2022 Oracle and/or its affiliates. 10
Palier suivant (level up) La base de données gagne en importance, la perdre totalement pourrait être un problème... RTO → heures Copyright @ 2022 Oracle and/or its affiliates. 10
Palier suivant (level up) La base de données gagne en importance, la perdre totalement pourrait être un problème... RTO → heures   RPO → 1 jour Copyright @ 2022 Oracle and/or its affiliates. 10
Palier suivant (level up) La base de données gagne en importance, la perdre totalement pourrait être un problème... RTO → heures   RPO → 1 jour RTO: Recovery Time Objective (combien de temps pour récupérer les données?) RPO: Recovery Point Objective (combien de données peut-on perdre?) Copyright @ 2022 Oracle and/or its affiliates. 10
Sauvegarde Physique Sauvegarde Logique Pour les sauvegardes logiques, c'est MySQL Shell Dump & Load Utility qu'il faut utiliser! Sauvegardes Copyright @ 2022 Oracle and/or its affiliates. 11
Une simple instance MySQL avec sauvegarde journalière Copyright @ 2022 Oracle and/or its affiliates. heures 1 jour RPO ? ? RTO 12
Palier suivant (level up) RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques minutes maximum ! Copyright @ 2022 Oracle and/or its affiliates. 13
Palier suivant (level up) RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques minutes maximum ! RTO → heures Copyright @ 2022 Oracle and/or its affiliates. 13
Palier suivant (level up) RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques minutes maximum ! RTO → heures   RPO → minutes Copyright @ 2022 Oracle and/or its affiliates. 13
Ceci sont les valeurs par défaut de MySQL 8.0: Des Binlogs Fiables et Durables On active les logs binaires (binary logs) qui nous perme ent de rejouer les écritures depuis la dernière sauvegarde(*) Copyright @ 2022 Oracle and/or its affiliates. 14
Une simple instance MySQL avec sauvegarde journalière et les binlogs activés Copyright @ 2022 Oracle and/or its affiliates. heures minutes RPO ? ? RTO 15
Récupération Pontcuelle - Point-in-Time Recovery (PITR) Il s'agit de la technique par laquelle un administrateur peut restaurer ou récupérer un ensemble de données à un certain point dans le passé. Avec MySQL, la récupération ponctuelle consiste à restaurer un dump des données puis à rejouer les binlogs depuis et jusqu'à un point précis. Ce e technique est utilisée pour: résoudre un problème pratiquer une migration en temps réel (live migration) Copyright @ 2022 Oracle and/or its affiliates. 16
Point-in-Time Recovery : comment ça marche ? day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 Copyright @ 2022 Oracle and/or its affiliates. 17
Point-in-Time Recovery : comment ça marche ? day 1 BACKUPS Binlogs day 2 nous voulons restaurer jusqu'à ce point day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 Copyright @ 2022 Oracle and/or its affiliates. 18
Point-in-Time Recovery : comment ça marche ? day 1 BACKUPS Binlogs day 2 nous voulons restaurer jusqu'à ce point day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 1. nous restaurons le dump (jour3) Copyright @ 2022 Oracle and/or its affiliates. 19
Point-in-Time Recovery : comment ça marche ? day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 2 . n o u s r e j o u o ns le binlog (.008) 1. nous restaurons le dump (jour3) Copyright @ 2022 Oracle and/or its affiliates. 20
Point-in-Time Recovery : conceptes importants Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary logs sont purgés du serveur MySQL: Copyright @ 2022 Oracle and/or its affiliates. 21
Point-in-Time Recovery : conceptes importants Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary logs sont purgés du serveur MySQL: Copyright @ 2022 Oracle and/or its affiliates. day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 21
Point-in-Time Recovery : conceptes importants Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary logs sont purgés du serveur MySQL: Copyright @ 2022 Oracle and/or its affiliates. day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 day 1 BACKUPS points possibles de récupération Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 } 21
Palier suivant (level up) Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre moins d'une seconde en cas de problème ! Copyright @ 2022 Oracle and/or its affiliates. 22
Palier suivant (level up) Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre moins d'une seconde en cas de problème ! RTO → heures Copyright @ 2022 Oracle and/or its affiliates. 22
Palier suivant (level up) Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre moins d'une seconde en cas de problème ! RTO → heures   RPO → moins d'une seconde Copyright @ 2022 Oracle and/or its affiliates. 22
Activer les GTIDs Sauvegarder en temps réel les binlogs sur un autre système (OCI Object Storage, S3, ...) VCN 10.0.0.0/16 Public Subnet 10.0.0.0/24 Private Subnet 10.0.1.0/24 MySQL Shell MySQL Database Service Internet Gateway Oracle Cloud Infrastructure Availability Domain 1 Fault Domain 1 mysql-dump-bucket mysql-binlogs-bucket Object Storage dump instance streambinlogs Meilleur Point-in-Time Recovery (PITR) Copyright @ 2022 Oracle and/or its affiliates. 23
avec redémarrage Activation des GTIDs Copyright @ 2022 Oracle and/or its affiliates. 24
avec redémarrage sans redémarrage Activation des GTIDs Copyright @ 2022 Oracle and/or its affiliates. 24
Sauvegardes des Binlogs   Copyright @ 2022 Oracle and/or its affiliates. 25
Sauvegardes des Binlogs   Sur un autre système: mysqlbinlog --raw --read-from-remote-server --stop-never --host 10.0.0.2 --port 3306 -u getbinlog -ppassword --ssl-mode='REQUIRED' binlog.xxxxxx Copyright @ 2022 Oracle and/or its affiliates. 25
Point-in-Time Recovery : conceptes importants (2) Comme vous avez pu le constater, nous ne pouvons récupérer qu'à l'heure exacte des sauvegardes et nous ne pouvons faire une récupération ponctuelle qu'à partir de la dernière ! C'est pourquoi il est recommandé de délocaliser les binlogs (sur un autre serveur, un NAS, le cloud, ...). Cela perme ra d'e ectuer une restauration ponctuelle à n'importe quel moment dans le temps : Copyright @ 2022 Oracle and/or its affiliates. 26
Point-in-Time Recovery : conceptes importants (2) Comme vous avez pu le constater, nous ne pouvons récupérer qu'à l'heure exacte des sauvegardes et nous ne pouvons faire une récupération ponctuelle qu'à partir de la dernière ! C'est pourquoi il est recommandé de délocaliser les binlogs (sur un autre serveur, un NAS, le cloud, ...). Cela perme ra d'e ectuer une restauration ponctuelle à n'importe quel moment dans le temps : Copyright @ 2022 Oracle and/or its affiliates. } day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 .006 .007 .008 .009 .010 b i n l o g s t r e a m i n g points possibles de récupération 26
Une simple instance MySQL avec sauvegarde journalière et archivage externe des binlogs Copyright @ 2022 Oracle and/or its affiliates. heures < 1 seconde RPO ? ? RTO 27
Palier suivant (level up) Mon service est maintenant très important, je voudrais que ma base de données puisse être de nouveau disponible en quelques minutes en cas d'incident. Copyright @ 2022 Oracle and/or its affiliates. 28
Palier suivant (level up) Mon service est maintenant très important, je voudrais que ma base de données puisse être de nouveau disponible en quelques minutes en cas d'incident. RTO → minutes Copyright @ 2022 Oracle and/or its affiliates. 28
Palier suivant (level up) Mon service est maintenant très important, je voudrais que ma base de données puisse être de nouveau disponible en quelques minutes en cas d'incident. RTO → minutes   RPO → moins d'une seconde Copyright @ 2022 Oracle and/or its affiliates. 28
Fondé à partir de la réplication asynchrone Mais plus facile... et plus facile, c'est mieux ! Transfert initial des données ("provisioning") inclus (clone) 2 noeuds ou plus Basculement manuel (failover) Routage transparent/automatique des requêtes avec MySQL Router MySQL InnoDB ReplicaSet Copyright @ 2022 Oracle and/or its affiliates. 29
MySQL InnoDB ReplicaSet Copyright @ 2022 Oracle and/or its affiliates. 30
MySQL InnoDB ReplicaSet Connecté au serveur actuel: JS > dba.con gureReplicaSetInstance() JS > rs=dba.createReplicaSet('myreplicaset') Sur le nouveau serveur où seul MySQL est installé (serveur et shell): JS > dba.con gureReplicaSetInstance() Et de nouveau sur l'instance principale: JS > rs.addInstance('mysql-2') Copyright @ 2022 Oracle and/or its affiliates. 31
MySQL InnoDB ReplicaSet - examples Copyright @ 2022 Oracle and/or its affiliates. 32
MySQL InnoDB ReplicaSet - examples Copyright @ 2022 Oracle and/or its affiliates. 33
MySQL InnoDB ReplicaSet - examples Copyright @ 2022 Oracle and/or its affiliates. 34
MySQL Router MySQL Router est très simple a con gurer, il su t d'utiliser la commande bootstrap! Copyright @ 2022 Oracle and/or its affiliates. 35
MySQL Router Et comme d'habitude visible avec MySQL Shell Copyright @ 2022 Oracle and/or its affiliates. 36
MySQL InnoDB ReplicaSet - Basculement Manuel Copyright @ 2022 Oracle and/or its affiliates. MySQL Shell est connecté à MySQL InnoDB ReplicaSet via MySQL Router. 37
MySQL InnoDB ReplicaSet - Basculement Manuel Copyright @ 2022 Oracle and/or its affiliates. 38
MySQL RelicaSet Copyright @ 2022 Oracle and/or its affiliates. minutes < 1 seconde RPO ? ? RTO rto > 39
Palier suivant (level up) Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours disponible (basculment automatique) et ne jamais perdre de données ! Copyright @ 2022 Oracle and/or its affiliates. 40
Palier suivant (level up) Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours disponible (basculment automatique) et ne jamais perdre de données ! RTO → secondes Copyright @ 2022 Oracle and/or its affiliates. 40
Palier suivant (level up) Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours disponible (basculment automatique) et ne jamais perdre de données ! RTO → secondes   RPO → 0 Copyright @ 2022 Oracle and/or its affiliates. 40
Fondé à partir de Group Replication Mais plus simple... et c'est toujours mieux Transfert des données initiales inclus (clone) 3 noeuds ou plus (un nombre impair est recommandé) Basculement Automatique Utilise MySQL Router Niveaux de consistances des données con gurable MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. 41
MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. 42
Sur le serveur "Primary" de notre ReplicaSet: JS > dba.dropMetadataSchema() JS > cluster=dba.createCluster('mycluster') Et sur l'instance "Secondary": SQL > STOP REPLICA; SQL > RESET ALL REPLICA; Et à nouveau sur le nouveau "Primary" du Cluster: JS > cluster.addInstance('mysql-2') MySQL InnoDB Cluster On peut maintenant ajouter un troisième membre pour béné cier du basculement automatique: Copyright @ 2022 Oracle and/or its affiliates. 43
Sur le serveur "Primary" de notre ReplicaSet: JS > dba.dropMetadataSchema() JS > cluster=dba.createCluster('mycluster') Et sur l'instance "Secondary": SQL > STOP REPLICA; SQL > RESET ALL REPLICA; Et à nouveau sur le nouveau "Primary" du Cluster: JS > cluster.addInstance('mysql-2') JS > dba.con gureInstance() À partir d'une instance du cluster: JS > cluster=dba.getCluster() JS > cluster.addInstance('mysql-3') En n, on peut recon gurer le routeur: # mysqlrouter --bootstrap clusteradmin@single-mysql:3306 --conf-use-gr-noti cations --user mysqlrouter --force # systemctl restart mysqlrouter MySQL InnoDB Cluster On peut maintenant ajouter un troisième membre pour béné cier du basculement automatique: Copyright @ 2022 Oracle and/or its affiliates. 43
MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. 44
MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. secondes 0 RPO ? ? RTO rto > 45
Palier suivant (level up) Et si quelque chose arrivait à notre centre de données ? Copyright @ 2022 Oracle and/or its affiliates. 46
Palier suivant (level up) Et si quelque chose arrivait à notre centre de données ? Comment déployer un plan de reprise en cas de catastrophe (Disaster Recovery) ? Copyright @ 2022 Oracle and/or its affiliates. 46
Palier suivant (level up) Et si quelque chose arrivait à notre centre de données ? Comment déployer un plan de reprise en cas de catastrophe (Disaster Recovery) ? Copyright @ 2022 Oracle and/or its affiliates. MySQL InnoDB ClusterSet !! 46
L'évolution ultime ! disponible depuis MySQL 8.0.27 support du "fencing" depuis 8.0.28 MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. 47
Fruit de plusieurs transformations au cours des sorties précédentes: 8.0.22: Automatic Connection Failover (Async Replication Channels) 8.0.23: Automatic Connection Failover (Async Replication Channels using Group Replication) 8.0.24: transformation de skip-replica-start en variable globale, persistante et en lecture-seule 8.0.26: Ajout d'actions pour les membres de Group Replication (ex: super_read_only con gurable) 8.0.26: Ajout d'un UUID spéci que pour les évènements liés aux changements structurels du Groupe (View_change_log_event) 8.0.27: la con guration de l'Asynchronous Replication Channel suit automatiquement le Primary. Copyright @ 2022 Oracle and/or its affiliates. 48
MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. 49
MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. On peut également déployer des architectures plus complexes ! 49
MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. On peut également déployer des architectures plus complexes ! 49
MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. secondes 0 RPO ? ? RTO possible rpo>0 rto > 50
Extra Depuis MySQL 8.0.19, les connecteurs supportent également dns-srv qui avec un "discovery service" tel que Consul, peut remplacer MySQL Router quand il est impossible de l'installer sur les serveurs d'applications: Copyright @ 2022 Oracle and/or its affiliates. 51
Extra Depuis MySQL 8.0.19, les connecteurs supportent également dns-srv qui avec un "discovery service" tel que Consul, peut remplacer MySQL Router quand il est impossible de l'installer sur les serveurs d'applications: Copyright @ 2022 Oracle and/or its affiliates. 51
Des Questions ? Copyright @ 2022 Oracle and/or its affiliates. 52

Confoo 2022 - le cycle d'une instance MySQL

  • 1.
    Frédéric Descamps Ami desDauphins MySQL Février 2022 Le Cycle d'Une Instance MySQL
  • 2.
    Copyright @ 2022Oracle and/or its affiliates. Qui suis-je ? about.me/lefred 2
  • 3.
      Frédéric Descamps Copyright @2022 Oracle and/or its affiliates. @lefred Évangesliste MySQL Utilise MySQL depuis la version 3.21 passionné devops habitant en h ps://lefred.be 3
  • 4.
    Copyright @ 2022Oracle and/or its affiliates. les bonnes pratiques en 2022 paramètres de con guration 4
  • 5.
    je présume lorsde ce e présentation que votre système utilise MySQL 8.0.28 ou plus récent n'utilise que InnoDB a les "binary logs" activés le format des "binary logs" est ROW utilise GTID Copyright @ 2022 Oracle and/or its affiliates. 5
  • 6.
    Copyright @ 2022Oracle and/or its affiliates. Évolution vers la Haute Disponibilité MySQL 8.0 6
  • 7.
    Copyright @ 2022Oracle and/or its affiliates. 7
  • 8.
    Voici où toutcommence... et on n'oublie pas: on utilise QUE InnoDB on garde les paramètres de durabilité par défaut Une simple instance MySQL   Copyright @ 2022 Oracle and/or its affiliates. 8
  • 9.
    Une simple instanceMySQL Copyright @ 2022 Oracle and/or its affiliates. / / RPO ? ? RTO 9
  • 10.
    Palier suivant (levelup) La base de données gagne en importance, la perdre totalement pourrait être un problème... Copyright @ 2022 Oracle and/or its affiliates. 10
  • 11.
    Palier suivant (levelup) La base de données gagne en importance, la perdre totalement pourrait être un problème... RTO → heures Copyright @ 2022 Oracle and/or its affiliates. 10
  • 12.
    Palier suivant (levelup) La base de données gagne en importance, la perdre totalement pourrait être un problème... RTO → heures   RPO → 1 jour Copyright @ 2022 Oracle and/or its affiliates. 10
  • 13.
    Palier suivant (levelup) La base de données gagne en importance, la perdre totalement pourrait être un problème... RTO → heures   RPO → 1 jour RTO: Recovery Time Objective (combien de temps pour récupérer les données?) RPO: Recovery Point Objective (combien de données peut-on perdre?) Copyright @ 2022 Oracle and/or its affiliates. 10
  • 14.
    Sauvegarde Physique Sauvegarde Logique Pourles sauvegardes logiques, c'est MySQL Shell Dump & Load Utility qu'il faut utiliser! Sauvegardes Copyright @ 2022 Oracle and/or its affiliates. 11
  • 15.
    Une simple instanceMySQL avec sauvegarde journalière Copyright @ 2022 Oracle and/or its affiliates. heures 1 jour RPO ? ? RTO 12
  • 16.
    Palier suivant (levelup) RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques minutes maximum ! Copyright @ 2022 Oracle and/or its affiliates. 13
  • 17.
    Palier suivant (levelup) RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques minutes maximum ! RTO → heures Copyright @ 2022 Oracle and/or its affiliates. 13
  • 18.
    Palier suivant (levelup) RPO d'un jour ? Vraiment ?? Il faut absolument réduire la perte des donnés à quelques minutes maximum ! RTO → heures   RPO → minutes Copyright @ 2022 Oracle and/or its affiliates. 13
  • 19.
    Ceci sont lesvaleurs par défaut de MySQL 8.0: Des Binlogs Fiables et Durables On active les logs binaires (binary logs) qui nous perme ent de rejouer les écritures depuis la dernière sauvegarde(*) Copyright @ 2022 Oracle and/or its affiliates. 14
  • 20.
    Une simple instanceMySQL avec sauvegarde journalière et les binlogs activés Copyright @ 2022 Oracle and/or its affiliates. heures minutes RPO ? ? RTO 15
  • 21.
    Récupération Pontcuelle -Point-in-Time Recovery (PITR) Il s'agit de la technique par laquelle un administrateur peut restaurer ou récupérer un ensemble de données à un certain point dans le passé. Avec MySQL, la récupération ponctuelle consiste à restaurer un dump des données puis à rejouer les binlogs depuis et jusqu'à un point précis. Ce e technique est utilisée pour: résoudre un problème pratiquer une migration en temps réel (live migration) Copyright @ 2022 Oracle and/or its affiliates. 16
  • 22.
    Point-in-Time Recovery :comment ça marche ? day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 Copyright @ 2022 Oracle and/or its affiliates. 17
  • 23.
    Point-in-Time Recovery :comment ça marche ? day 1 BACKUPS Binlogs day 2 nous voulons restaurer jusqu'à ce point day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 Copyright @ 2022 Oracle and/or its affiliates. 18
  • 24.
    Point-in-Time Recovery :comment ça marche ? day 1 BACKUPS Binlogs day 2 nous voulons restaurer jusqu'à ce point day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 1. nous restaurons le dump (jour3) Copyright @ 2022 Oracle and/or its affiliates. 19
  • 25.
    Point-in-Time Recovery :comment ça marche ? day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 2 . n o u s r e j o u o ns le binlog (.008) 1. nous restaurons le dump (jour3) Copyright @ 2022 Oracle and/or its affiliates. 20
  • 26.
    Point-in-Time Recovery :conceptes importants Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary logs sont purgés du serveur MySQL: Copyright @ 2022 Oracle and/or its affiliates. 21
  • 27.
    Point-in-Time Recovery :conceptes importants Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary logs sont purgés du serveur MySQL: Copyright @ 2022 Oracle and/or its affiliates. day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 21
  • 28.
    Point-in-Time Recovery :conceptes importants Généralement, après qu'une sauvegarde a été e ectuée et véri ée, les chiers des binary logs sont purgés du serveur MySQL: Copyright @ 2022 Oracle and/or its affiliates. day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 day 1 BACKUPS points possibles de récupération Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 } 21
  • 29.
    Palier suivant (levelup) Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre moins d'une seconde en cas de problème ! Copyright @ 2022 Oracle and/or its affiliates. 22
  • 30.
    Palier suivant (levelup) Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre moins d'une seconde en cas de problème ! RTO → heures Copyright @ 2022 Oracle and/or its affiliates. 22
  • 31.
    Palier suivant (levelup) Mes données sont critiques et j'ai une charge (workload) importante... je voudrais perdre moins d'une seconde en cas de problème ! RTO → heures   RPO → moins d'une seconde Copyright @ 2022 Oracle and/or its affiliates. 22
  • 32.
    Activer les GTIDs Sauvegarderen temps réel les binlogs sur un autre système (OCI Object Storage, S3, ...) VCN 10.0.0.0/16 Public Subnet 10.0.0.0/24 Private Subnet 10.0.1.0/24 MySQL Shell MySQL Database Service Internet Gateway Oracle Cloud Infrastructure Availability Domain 1 Fault Domain 1 mysql-dump-bucket mysql-binlogs-bucket Object Storage dump instance streambinlogs Meilleur Point-in-Time Recovery (PITR) Copyright @ 2022 Oracle and/or its affiliates. 23
  • 33.
    avec redémarrage Activation desGTIDs Copyright @ 2022 Oracle and/or its affiliates. 24
  • 34.
    avec redémarrage sansredémarrage Activation des GTIDs Copyright @ 2022 Oracle and/or its affiliates. 24
  • 35.
    Sauvegardes des Binlogs   Copyright@ 2022 Oracle and/or its affiliates. 25
  • 36.
    Sauvegardes des Binlogs   Surun autre système: mysqlbinlog --raw --read-from-remote-server --stop-never --host 10.0.0.2 --port 3306 -u getbinlog -ppassword --ssl-mode='REQUIRED' binlog.xxxxxx Copyright @ 2022 Oracle and/or its affiliates. 25
  • 37.
    Point-in-Time Recovery :conceptes importants (2) Comme vous avez pu le constater, nous ne pouvons récupérer qu'à l'heure exacte des sauvegardes et nous ne pouvons faire une récupération ponctuelle qu'à partir de la dernière ! C'est pourquoi il est recommandé de délocaliser les binlogs (sur un autre serveur, un NAS, le cloud, ...). Cela perme ra d'e ectuer une restauration ponctuelle à n'importe quel moment dans le temps : Copyright @ 2022 Oracle and/or its affiliates. 26
  • 38.
    Point-in-Time Recovery :conceptes importants (2) Comme vous avez pu le constater, nous ne pouvons récupérer qu'à l'heure exacte des sauvegardes et nous ne pouvons faire une récupération ponctuelle qu'à partir de la dernière ! C'est pourquoi il est recommandé de délocaliser les binlogs (sur un autre serveur, un NAS, le cloud, ...). Cela perme ra d'e ectuer une restauration ponctuelle à n'importe quel moment dans le temps : Copyright @ 2022 Oracle and/or its affiliates. } day 1 BACKUPS Binlogs day 2 day 3 day 4 .001 .002 .003 .004 .005 .001 .002 .003 .004 .005 .006 .007 .008 .009 .010 .006 .007 .008 .009 .010 b i n l o g s t r e a m i n g points possibles de récupération 26
  • 39.
    Une simple instanceMySQL avec sauvegarde journalière et archivage externe des binlogs Copyright @ 2022 Oracle and/or its affiliates. heures < 1 seconde RPO ? ? RTO 27
  • 40.
    Palier suivant (levelup) Mon service est maintenant très important, je voudrais que ma base de données puisse être de nouveau disponible en quelques minutes en cas d'incident. Copyright @ 2022 Oracle and/or its affiliates. 28
  • 41.
    Palier suivant (levelup) Mon service est maintenant très important, je voudrais que ma base de données puisse être de nouveau disponible en quelques minutes en cas d'incident. RTO → minutes Copyright @ 2022 Oracle and/or its affiliates. 28
  • 42.
    Palier suivant (levelup) Mon service est maintenant très important, je voudrais que ma base de données puisse être de nouveau disponible en quelques minutes en cas d'incident. RTO → minutes   RPO → moins d'une seconde Copyright @ 2022 Oracle and/or its affiliates. 28
  • 43.
    Fondé à partirde la réplication asynchrone Mais plus facile... et plus facile, c'est mieux ! Transfert initial des données ("provisioning") inclus (clone) 2 noeuds ou plus Basculement manuel (failover) Routage transparent/automatique des requêtes avec MySQL Router MySQL InnoDB ReplicaSet Copyright @ 2022 Oracle and/or its affiliates. 29
  • 44.
    MySQL InnoDB ReplicaSet Copyright@ 2022 Oracle and/or its affiliates. 30
  • 45.
    MySQL InnoDB ReplicaSet Connectéau serveur actuel: JS > dba.con gureReplicaSetInstance() JS > rs=dba.createReplicaSet('myreplicaset') Sur le nouveau serveur où seul MySQL est installé (serveur et shell): JS > dba.con gureReplicaSetInstance() Et de nouveau sur l'instance principale: JS > rs.addInstance('mysql-2') Copyright @ 2022 Oracle and/or its affiliates. 31
  • 46.
    MySQL InnoDB ReplicaSet- examples Copyright @ 2022 Oracle and/or its affiliates. 32
  • 47.
    MySQL InnoDB ReplicaSet- examples Copyright @ 2022 Oracle and/or its affiliates. 33
  • 48.
    MySQL InnoDB ReplicaSet- examples Copyright @ 2022 Oracle and/or its affiliates. 34
  • 49.
    MySQL Router MySQL Routerest très simple a con gurer, il su t d'utiliser la commande bootstrap! Copyright @ 2022 Oracle and/or its affiliates. 35
  • 50.
    MySQL Router Et commed'habitude visible avec MySQL Shell Copyright @ 2022 Oracle and/or its affiliates. 36
  • 51.
    MySQL InnoDB ReplicaSet- Basculement Manuel Copyright @ 2022 Oracle and/or its affiliates. MySQL Shell est connecté à MySQL InnoDB ReplicaSet via MySQL Router. 37
  • 52.
    MySQL InnoDB ReplicaSet- Basculement Manuel Copyright @ 2022 Oracle and/or its affiliates. 38
  • 53.
    MySQL RelicaSet Copyright @2022 Oracle and/or its affiliates. minutes < 1 seconde RPO ? ? RTO rto > 39
  • 54.
    Palier suivant (levelup) Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours disponible (basculment automatique) et ne jamais perdre de données ! Copyright @ 2022 Oracle and/or its affiliates. 40
  • 55.
    Palier suivant (levelup) Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours disponible (basculment automatique) et ne jamais perdre de données ! RTO → secondes Copyright @ 2022 Oracle and/or its affiliates. 40
  • 56.
    Palier suivant (levelup) Maintenant mon service est très très important, je voudrais qu'il soit quasiment toujours disponible (basculment automatique) et ne jamais perdre de données ! RTO → secondes   RPO → 0 Copyright @ 2022 Oracle and/or its affiliates. 40
  • 57.
    Fondé à partirde Group Replication Mais plus simple... et c'est toujours mieux Transfert des données initiales inclus (clone) 3 noeuds ou plus (un nombre impair est recommandé) Basculement Automatique Utilise MySQL Router Niveaux de consistances des données con gurable MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. 41
  • 58.
    MySQL InnoDB Cluster Copyright@ 2022 Oracle and/or its affiliates. 42
  • 59.
    Sur le serveur"Primary" de notre ReplicaSet: JS > dba.dropMetadataSchema() JS > cluster=dba.createCluster('mycluster') Et sur l'instance "Secondary": SQL > STOP REPLICA; SQL > RESET ALL REPLICA; Et à nouveau sur le nouveau "Primary" du Cluster: JS > cluster.addInstance('mysql-2') MySQL InnoDB Cluster On peut maintenant ajouter un troisième membre pour béné cier du basculement automatique: Copyright @ 2022 Oracle and/or its affiliates. 43
  • 60.
    Sur le serveur"Primary" de notre ReplicaSet: JS > dba.dropMetadataSchema() JS > cluster=dba.createCluster('mycluster') Et sur l'instance "Secondary": SQL > STOP REPLICA; SQL > RESET ALL REPLICA; Et à nouveau sur le nouveau "Primary" du Cluster: JS > cluster.addInstance('mysql-2') JS > dba.con gureInstance() À partir d'une instance du cluster: JS > cluster=dba.getCluster() JS > cluster.addInstance('mysql-3') En n, on peut recon gurer le routeur: # mysqlrouter --bootstrap clusteradmin@single-mysql:3306 --conf-use-gr-noti cations --user mysqlrouter --force # systemctl restart mysqlrouter MySQL InnoDB Cluster On peut maintenant ajouter un troisième membre pour béné cier du basculement automatique: Copyright @ 2022 Oracle and/or its affiliates. 43
  • 61.
    MySQL InnoDB Cluster Copyright@ 2022 Oracle and/or its affiliates. 44
  • 62.
    MySQL InnoDB Cluster Copyright@ 2022 Oracle and/or its affiliates. secondes 0 RPO ? ? RTO rto > 45
  • 63.
    Palier suivant (levelup) Et si quelque chose arrivait à notre centre de données ? Copyright @ 2022 Oracle and/or its affiliates. 46
  • 64.
    Palier suivant (levelup) Et si quelque chose arrivait à notre centre de données ? Comment déployer un plan de reprise en cas de catastrophe (Disaster Recovery) ? Copyright @ 2022 Oracle and/or its affiliates. 46
  • 65.
    Palier suivant (levelup) Et si quelque chose arrivait à notre centre de données ? Comment déployer un plan de reprise en cas de catastrophe (Disaster Recovery) ? Copyright @ 2022 Oracle and/or its affiliates. MySQL InnoDB ClusterSet !! 46
  • 66.
    L'évolution ultime ! disponibledepuis MySQL 8.0.27 support du "fencing" depuis 8.0.28 MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. 47
  • 67.
    Fruit de plusieurstransformations au cours des sorties précédentes: 8.0.22: Automatic Connection Failover (Async Replication Channels) 8.0.23: Automatic Connection Failover (Async Replication Channels using Group Replication) 8.0.24: transformation de skip-replica-start en variable globale, persistante et en lecture-seule 8.0.26: Ajout d'actions pour les membres de Group Replication (ex: super_read_only con gurable) 8.0.26: Ajout d'un UUID spéci que pour les évènements liés aux changements structurels du Groupe (View_change_log_event) 8.0.27: la con guration de l'Asynchronous Replication Channel suit automatiquement le Primary. Copyright @ 2022 Oracle and/or its affiliates. 48
  • 68.
    MySQL InnoDB ClusterSet Copyright@ 2022 Oracle and/or its affiliates. 49
  • 69.
    MySQL InnoDB ClusterSet Copyright@ 2022 Oracle and/or its affiliates. On peut également déployer des architectures plus complexes ! 49
  • 70.
    MySQL InnoDB ClusterSet Copyright@ 2022 Oracle and/or its affiliates. On peut également déployer des architectures plus complexes ! 49
  • 71.
    MySQL InnoDB ClusterSet Copyright@ 2022 Oracle and/or its affiliates. secondes 0 RPO ? ? RTO possible rpo>0 rto > 50
  • 72.
    Extra Depuis MySQL 8.0.19,les connecteurs supportent également dns-srv qui avec un "discovery service" tel que Consul, peut remplacer MySQL Router quand il est impossible de l'installer sur les serveurs d'applications: Copyright @ 2022 Oracle and/or its affiliates. 51
  • 73.
    Extra Depuis MySQL 8.0.19,les connecteurs supportent également dns-srv qui avec un "discovery service" tel que Consul, peut remplacer MySQL Router quand il est impossible de l'installer sur les serveurs d'applications: Copyright @ 2022 Oracle and/or its affiliates. 51
  • 74.
    Des Questions ? Copyright @2022 Oracle and/or its affiliates. 52