
{"id":3219,"date":"2019-07-11T09:01:35","date_gmt":"2019-07-11T08:01:35","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=3219"},"modified":"2019-09-10T08:44:49","modified_gmt":"2019-09-10T07:44:49","slug":"mysql-innodb-cluster-recovering-and-provisioning-with-mysql-enterprise-backup","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2019\/07\/11\/mysql-innodb-cluster-recovering-and-provisioning-with-mysql-enterprise-backup\/","title":{"rendered":"MySQL InnoDB Cluster &#8211; Recovering and provisioning with MySQL Enterprise Backup"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/Full_Moon_by_olivier_dasini_800x306.png\" alt=\"Full moon by Olivier DASINI\"\/><\/figure><\/div>\n\n\n\n<p>Like I stated in my previous article &#8211; <strong><a href=\"http:\/\/dasini.net\/blog\/2019\/07\/09\/mysql-innodb-cluster-recovering-and-provisioning-with-mysqldump\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">MySQL InnoDB Cluster &#8211; Recovering and provisioning with mysqldump<\/a><\/strong> : <br>\u00ab\u00a0As the administrator of a cluster, among other tasks, you should be able to restore failed nodes and grow (or shrink) your cluster by adding (or removing) new nodes\u00a0\u00bb.<br>Well, I still agree with myself \ud83d\ude42<\/p>\n\n\n\n<p>MySQL customers using a <a href=\"https:\/\/www.mysql.com\/products\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">Commercial Edition<\/a> have access to&nbsp;<strong><a rel=\"noreferrer noopener\" href=\"https:\/\/www.mysql.com\/products\/enterprise\/backup.html\" target=\"_blank\">MySQL Enterprise Backup<\/a><\/strong> (MEB) which provide enterprise-grade <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/glossary.html#glos_physical_backup\" target=\"_blank\">physical backup<\/a> and recovery for MySQL.<\/p>\n\n\n\n<p>MEB delivers hot, online, non-blocking backups on multiple platforms including Linux, Windows, Mac &amp; Solaris.<br>More details <a href=\"https:\/\/www.mysql.com\/products\/enterprise\/backup.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">here<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong><em><a rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/support.oracle.com\/\" target=\"_blank\">Customer Download<\/a><\/em><\/strong><em><a rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/support.oracle.com\/\" target=\"_blank\">&nbsp;\u00bb<\/a>&nbsp;&nbsp;(Select Patches &amp; Updates Tab, Product Search)<\/em><\/li><li><strong><em><a href=\"https:\/\/edelivery.oracle.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">Trial Download<\/a><\/em><\/strong><em><a href=\"https:\/\/edelivery.oracle.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">&nbsp;\u00bb<\/a>&nbsp;&nbsp;(Note &#8211; Select Product Pack: MySQL Database)<\/em><\/li><\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><u><em><strong>Note<\/strong><\/em><\/u>: <br>If you want to know how to recover a node and\/or how to provision nodes with <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/mysqldump.html\" target=\"_blank\"><strong>mysqldump<\/strong><\/a> please read <a href=\"http:\/\/dasini.net\/blog\/2019\/07\/09\/mysql-innodb-cluster-recovering-and-provisioning-with-mysqldump\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"this blog post (opens in a new tab)\">this blog post<\/a>.<\/p><\/blockquote>\n\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mce_6\">Context<\/h2>\n\n\n\n<p>Let&rsquo;s make it as simple as possible \ud83d\ude42<br>I&rsquo;m using MySQL <strong>Enterprise<\/strong> <strong>8.0.16<\/strong>, available for MySQL customers on <a href=\"http:\/\/support.oracle.com\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">My Oracle Support<\/a> or on <a rel=\"noreferrer noopener\" aria-label=\"Oracle Software Delivery Cloud (opens in a new tab)\" href=\"https:\/\/edelivery.oracle.com\" target=\"_blank\">Oracle Software Delivery Cloud<\/a>.<\/p>\n\n\n\n<p>I have an <strong>InnoDB Cluster <\/strong><a rel=\"noreferrer noopener\" href=\"http:\/\/dasini.net\/blog\/2018\/08\/30\/tutoriel-deployer-mysql-8-0-innodb-cluster\/\" target=\"_blank\">setup<\/a>, up and running.<br>So my main assumption is that you already know what is <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/group-replication.html\" target=\"_blank\">MySQL Group Replication<\/a> &amp; <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/mysql-innodb-cluster-userguide.html\" target=\"_blank\">MySQL InnoDB Cluster<\/a>.<br>Additionally you can read <a href=\"http:\/\/dasini.net\/blog\/2019\/09\/03\/tutoriel-deployer-mysql-8-0-innodb-cluster-09-2019\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">this tutorial<\/a> and this <a rel=\"noreferrer noopener\" href=\"https:\/\/lefred.be\/content\/mysql-innodb-cluster-howto-install-it-from-scratch\/\" target=\"_blank\">article<\/a> from my colleague <a rel=\"noreferrer noopener\" href=\"https:\/\/lefred.be\/\" target=\"_blank\">lefred<\/a> or <a rel=\"noreferrer noopener\" href=\"http:\/\/mysqlhk.blogspot.com\/2019\/05\/mysql-innodb-cluster-setup-on-windows.html\" target=\"_blank\">this one on Windows Platform<\/a> from my colleague <a rel=\"noreferrer noopener\" href=\"http:\/\/mysqlhk.blogspot.com\/\" target=\"_blank\">Ivan<\/a>. <\/p>\n\n\n\n<p>All nodes must have the right MySQL Enterprise Backup privileges.<br>Details <a href=\"https:\/\/dev.mysql.com\/doc\/mysql-enterprise-backup\/8.0\/en\/mysqlbackup.privileges.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">here<\/a>.<\/p>\n\n\n\n<p>All nodes must have same values respectively for <em>log-bin<\/em> &amp; <em>relay-log<\/em>:<br>For example: log-bin=binlog &amp; relay-log=relaylog (on all nodes)<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><em><u>Note<\/u><\/em>:<br>Depending on how you configured your MySQL InnoDB Cluster, some steps could be slightly different.<\/p><\/blockquote>\n\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mce_9\">Scenario 1 &#8211; Node Recovering<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>A 3 nodes MySQL InnoDB Cluster &#8211; M1 \/ M2 \/ M3, in single primary mode<\/li><li>MySQL Router is configured to enable R\/W connections on 3306 and RO connections on 3307<\/li><li>M1 is currently the primary (that is in Read\/Write mode)<\/li><li>M2 &amp; M3 are currently the secondaries (that is Read Only mode)<\/li><li>M1 failed! Assuming it is <u>irreconcilably corrupted<\/u> :'(<\/li><li>M2 &amp; M3 are now the (new temporary) cluster<\/li><\/ul>\n\n\n\n<p>The goal then is to rebuild M1 and put it back to the cluster.<\/p>\n\n\n\n\n\n<p>So like I said before we have a 3 nodes MySQL Enterprise 8.0.16 InnoDB Cluster up and running:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mysqlsh clusterAdmin@{mysqlRouterIP}:3306 --cluster\n...\n\nMySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M1:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M1:3306\"\n}\n<\/code><\/pre>\n\n\n\n<p>Then node M1 crashed&#8230; (status is \u00ab\u00a0<em>MISSING<\/em>\u00ab\u00a0) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK_NO_TOLERANCE\", \n        \"statusText\": \"Cluster is NOT tolerant to any failures. 1 member is not active\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"n\/a\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"(MISSING)\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}<\/code><\/pre>\n\n\n\n<p>M1 was the primary. <br>The cluster initiated an automatic database failover to elect a new primary&#8230; blablabla<br>Well you already know the story \ud83d\ude42<\/p>\n\n\n\n<p>After a while M1 is <u>fixed<\/u> and ready to be part of the cluster again.<br>To minimize the recovery time instead of using the last backup we prefer to  take a fresh one.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Speaking of backup, I recommend reading the excellent blog post from my colleague <a rel=\"noreferrer noopener\" href=\"https:\/\/mysql.wisborg.dk\/\" target=\"_blank\">Jesper<\/a>  &#8211;  <a rel=\"noreferrer noopener\" href=\"https:\/\/mysql.wisborg.dk\/2019\/03\/31\/mysql-backup-best-practices\/\" target=\"_blank\">MySQL Backup Best Practices<\/a>.<\/p><\/blockquote>\n\n\n\n<p>Let&rsquo;s take a fresh backup on a secondary node (we could also used the primary).<\/p>\n\n\n\n<p>MySQL Enterprise Backup is a very versatile tool and has many different configuration options. <br>For clarity I&rsquo;ll use a simplistic command. Please read the <a rel=\"noreferrer noopener\" aria-label=\"MEB documentation (opens in a new tab)\" href=\"https:\/\/dev.mysql.com\/doc\/mysql-enterprise-backup\/8.0\/en\/\" target=\"_blank\"><strong>MEB documentation<\/strong><\/a> for a more \u00ab\u00a0production style\u00a0\u00bb commande.<br>The backup will roughly looks like :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mysqlbackup --defaults-file=\/etc\/my.cnf  --with-timestamp --messages-logdir=\/data\/backups\/ --backup-image=\/data\/backups\/db.mbi backup-to-image\n...\n-------------------------------------------------------------\n   Parameters Summary         \n-------------------------------------------------------------\n   Start LSN                  : 44603904\n   End LSN                    : 44607630\n-------------------------------------------------------------\n\nmysqlbackup completed OK! with 1 warnings<\/code><\/pre>\n\n\n\n<p>Please note that it is <u>highly recommended<\/u>, in addition to the <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/glossary.html#glos_my_cnf\" target=\"_blank\"><em>my.cnf<\/em><\/a><\/strong> to include in your backup process a copy of the <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/option-files.html\" target=\"_blank\"><strong><em>auto.cnf<\/em><\/strong><\/a> and <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/persisted-system-variables.html\" target=\"_blank\"><strong><em>mysqld-auto.cnf<\/em><\/strong><\/a> configuration files for all nodes.<\/p>\n\n\n\n<p>If you \u00ab\u00a0lose\u00a0\u00bb your <em>auto.cnf<\/em> file, don&rsquo;t worry the server will generate a new one for you. <br>However the recovery process will be slightly different&#8230; (more on that below). <\/p>\n\n\n\n<p>Now it&rsquo;s time to restore this backup on node M1.<\/p>\n\n\n\n<p>Because this server is part of a MySQL InnoDB Cluster, obviously there are some extra steps compare to a standalone server restoration.<\/p>\n\n\n\n\n\n<h3 class=\"wp-block-heading\" id=\"mce_8\">Node Recovering<\/h3>\n\n\n\n<p>The node recovering process is simple:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Delete all contents of the MySQL Server data directory<\/li><li>Restore the backup<\/li><li>Restore the auto.cnf file<\/li><li>Restore the mysqld-auto.cnf file (if there is one)<\/li><li>Start the MySQL instance<\/li><\/ul>\n\n\n\n<p>This gives us on M1 , something like (simplified version, please adapt to your context) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Delete all contents of the MySQL Server data directory\n$ rm -rf \/var\/lib\/mysql\/*\n\n\n# Restore the backup\n$ mysqlbackup --backup-dir=\/exp\/bck --datadir=\/var\/lib\/mysql --backup-image=\/data\/backups\/db.mbi copy-back-and-apply-log\n\n\n# Restore the auto.cnf file\n$ cp -p \/data\/backups\/auto.cnf  \/var\/lib\/mysql\n\n\n# Restore the mysqld-auto.cnf file \n$ cp -p \/data\/backups\/mysqld-auto.cnf  \/var\/lib\/mysql\n\n\n# Start the MySQL instance\nservice mysql start <\/code><\/pre>\n\n\n\n<p>Then you can connect to the cluster and&#8230; see that the node M1 is recovering (\u00ab\u00a0status: RECOVERING\u00a0\u00bb) or if you&rsquo;re not fast enough that the node is again part of the cluster (\u00ab\u00a0status: ONLINE\u00a0\u00bb):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mysqlsh clusterAdmin@{mysqlRouterIP}:3306 --cluster\n...\n\nMySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"n\/a\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"RECOVERING\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}\n\n\n\/\/ After a while \n\n\nMySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}<\/code><\/pre>\n\n\n\n\n\n<h3 class=\"wp-block-heading\" id=\"mce_17\">Lost the auto.cnf file<\/h3>\n\n\n\n<p>As promised, the case when the <em><strong>auto.cnf<\/strong><\/em> configuration file is not restored. <br>In fact, in this case the cluster would see this node as a new node (because the server will have a new UUID).<br>So the process for putting it back is different.<\/p>\n\n\n\n<p>Also note that if you loose the <strong><em>mysqld-auto.cnf<\/em><\/strong> file you&rsquo;ll probably need to configure (again) the server to be Group Replication aware.<\/p>\n\n\n\n<p>To begin, you must stop the Group Replication plugin on the node that needs to be restored (M1):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mysqlsh root@M1 --sql -e\"STOP GROUP_REPLICATION;\"<\/code><\/pre>\n\n\n\n<p>Then <u>if necessary<\/u> you can check the configuration and\/or configure the node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL JS> dba.checkInstanceConfiguration(\"root@M1:3306\")\n...\n\n\nMySQL JS> dba.configureInstance(\"root@M1:3306\")\n...<\/code><\/pre>\n\n\n\n<p>You need to remove the old node from the InnoDB Cluster metadata:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL JS> cluster.rescan()\nRescanning the cluster...\n\nResult of the rescanning operation for the 'default' ReplicaSet:\n{\n    \"name\": \"default\", \n    \"newTopologyMode\": null, \n    \"newlyDiscoveredInstances\": [], \n    \"unavailableInstances\": [\n        {\n            \"host\": \"M1:3306\", \n            \"label\": \"M1:3306\", \n            \"member_id\": \"6ad8caed-9d90-11e9-96e5-0242ac13000b\"\n        }\n    ]\n}\n\nThe instance 'M1:3306' is no longer part of the ReplicaSet.\nThe instance is either offline or left the HA group. You can try to add it to the cluster again with the cluster.rejoinInstance('M1:3306') command or you can remove it from the cluster configuration.\nWould you like to remove it from the cluster metadata? [Y\/n]: Y\nRemoving instance from the cluster metadata...\nThe instance 'M1:3306' was successfully removed from the cluster metadata.<\/code><\/pre>\n\n\n\n<p>Add the \u00ab\u00a0new\u00a0\u00bb node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL JS> cluster.addInstance(\"clusterAdmin@M1:3306\")\nA new instance will be added to the InnoDB cluster. Depending on the amount of\ndata on the cluster this might take from a few seconds to several hours.\n\nAdding instance to the cluster ...\n\nValidating instance at M1:3306...\n\nThis instance reports its own address as M1\n\nInstance configuration is suitable.\nThe instance 'clusterAdmin@M1:3306' was successfully added to the cluster.<\/code><\/pre>\n\n\n\n<p>Check &#8211; and after the recovery stage, the \u00ab\u00a0new\u00a0\u00bb node is online:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"n\/a\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"RECOVERING\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}\n\n\/\/ After a while...\n\nMySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}<\/code><\/pre>\n\n\n\n<p>Et voil\u00e0!<\/p>\n\n\n\n\n\n<p>An simple alternative to deal with this \u00ab\u00a0<em>unpleasantness<\/em>\u00ab\u00a0, if you don&rsquo;t need to configure the node, is basically to remove the node and add it again.<br>Below an example with M3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK_PARTIAL\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"n\/a\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"(MISSING)\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}\n\n\nMySQL JS> cluster.removeInstance(\"root@M3:3306\")\nThe instance will be removed from the InnoDB cluster. Depending on the instance\nbeing the Seed or not, the Metadata session might become invalid. If so, please\nstart a new session to the Metadata Storage R\/W instance.\n\nInstance 'M3:3306' is attempting to leave the cluster...\n\nThe instance 'M3:3306' was successfully removed from the cluster.\n\n\nMySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK_NO_TOLERANCE\", \n        \"statusText\": \"Cluster is NOT tolerant to any failures.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}\n\n\nMySQL JS> cluster.addInstance(\"root@M3:3306\")\nA new instance will be added to the InnoDB cluster. Depending on the amount of\ndata on the cluster this might take from a few seconds to several hours.\n\nAdding instance to the cluster ...\n\nValidating instance at M3:3306...\n\nThis instance reports its own address as M3\n\nInstance configuration is suitable.\nThe instance 'root@M3:3306' was successfully added to the cluster.\n\n\nMySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}<\/code><\/pre>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mce_16\">Scenario 2 &#8211; Node Provisioning<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>A 3 nodes MySQL InnoDB Cluster &#8211; M1 \/ M2 \/ M3 in single primary mode<\/li><li>MySQL Router is configured to enable R\/W connections on port 3306 and RO connections on port 3307<\/li><li>M2 is currently the primary (that is Read\/Write mode)<\/li><li>M1 &amp; M3 are currently the secondaries (that is Read Only mode)<\/li><\/ul>\n\n\n\n<p>The goal then is to add 2 new nodes: M4 &amp; M5<\/p>\n\n\n\n\n\n<p>So we have the 3 nodes MySQL 8.0.16 InnoDB Cluster that we used in the first part of this article. And it is up and running.<\/p>\n\n\n\n<p>Actually adding new nodes is very close to what we have done previously.<\/p>\n\n\n\n<p>The process is :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Deploy the new MySQL instance preferably already configured for Group Replication<\/li><li>Restore the data in the way that we have seen previously<\/li><\/ul>\n\n\n\n\n\n<p>Check the configuration and the configuration itself can be done respectively with <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/dev\/mysqlsh-api-javascript\/8.0\/classmysqlsh_1_1dba_1_1_dba.html#aef7387e5a7be5b449af2559bb4e66099\" target=\"_blank\">dba.checkInstanceConfiguration<\/a>() and <a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/dev\/mysqlsh-api-javascript\/8.0\/classmysqlsh_1_1dba_1_1_dba.html#af4510380474d531a9fb775693e94eaac\" target=\"_blank\">dba.configure<\/a>() functions (and it could also be useful to use <em><strong><a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/dev\/mysqlsh-api-javascript\/8.0\/classmysqlsh_1_1dba_1_1_cluster.html#ae589dbf4e07c85108ab47b3735c3114a\" target=\"_blank\">checkInstanceState<\/a>()<\/strong><\/em> &#8211; <a rel=\"noreferrer noopener\" href=\"http:\/\/dasini.net\/blog\/2018\/08\/30\/tutoriel-deployer-mysql-8-0-innodb-cluster\/\" target=\"_blank\">see this article<\/a>).<br>e.g. on node M4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mysqlsh clusterAdmin@M4:3306 -- dba checkInstanceConfiguration\nValidating MySQL instance at M4:3306 for use in an InnoDB cluster...\n\nThis instance reports its own address as M4\n\nChecking whether existing tables comply with Group Replication requirements...\nNo incompatible tables detected\n\nChecking instance configuration...\nInstance configuration is compatible with InnoDB cluster\n\nThe instance 'M4:3306' is valid for InnoDB cluster usage.\n\n{\n    \"status\": \"ok\"\n}<\/code><\/pre>\n\n\n\n\n\n<p>Restore the backup on M4, the new node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Restore the backup on M4\n$ mysqlbackup --backup-dir=\/exp\/bck --datadir=\/var\/lib\/mysql --backup-image=\/data\/backups\/db.mbi copy-back-and-apply-log<\/code><\/pre>\n\n\n\n\n\n<p>An finally add the new node (M4):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Add the new instance\nMySQL JS> cluster.addInstance(\"clusterAdmin@M4:3306\")\n\n\n\/\/ Check\nMySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to ONE failure.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M4:3306\": {\n                \"address\": \"M4:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}<\/code><\/pre>\n\n\n\n\n\n<p>Same process for the last node, M5.<\/p>\n\n\n\n<p>You end up with a 5 nodes MySQL InnoDB Cluster \\o\/:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL JS> cluster.status()\n{\n    \"clusterName\": \"pocCluster\", \n    \"defaultReplicaSet\": {\n        \"name\": \"default\", \n        \"primary\": \"M2:3306\", \n        \"ssl\": \"REQUIRED\", \n        \"status\": \"OK\", \n        \"statusText\": \"Cluster is ONLINE and can tolerate up to 2 failures.\", \n        \"topology\": {\n            \"M1:3306\": {\n                \"address\": \"M1:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M2:3306\": {\n                \"address\": \"M2:3306\", \n                \"mode\": \"R\/W\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M3:3306\": {\n                \"address\": \"M3:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M4:3306\": {\n                \"address\": \"M4:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }, \n            \"M5:3306\": {\n                \"address\": \"M5:3306\", \n                \"mode\": \"R\/O\", \n                \"readReplicas\": {}, \n                \"role\": \"HA\", \n                \"status\": \"ONLINE\", \n                \"version\": \"8.0.16\"\n            }\n        }, \n        \"topologyMode\": \"Single-Primary\"\n    }, \n    \"groupInformationSourceMember\": \"M2:3306\"\n}<\/code><\/pre>\n\n\n\n\n\n<p>This is one way to do node recovery and provisioning using <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/www.mysql.com\/products\/enterprise\/backup.html\" target=\"_blank\">MySQL Enterprise Backup<\/a><\/strong>.<\/p>\n\n\n\n<p>You may also take a look on this article: <a rel=\"noreferrer noopener\" aria-label=\"InnoDB Cluster: Recovering an instance with MySQL Enterprise Backup (opens in a new tab)\" href=\"https:\/\/mysqlmed.wordpress.com\/2019\/05\/31\/innodb-cluster-recovering-an-instance-with-mysql-enterprise-backup\/\" target=\"_blank\">InnoDB Cluster: Recovering an instance with MySQL Enterprise Backup<\/a> &#8211; from my colleague <a href=\"https:\/\/mysqlmed.wordpress.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Keith (opens in a new tab)\">Keith<\/a>.<\/p>\n\n\n\n<p>If you are not yet a MySQL <a rel=\"noreferrer noopener\" aria-label=\"customer (opens in a new tab)\" href=\"https:\/\/www.mysql.com\/customers\/\" target=\"_blank\">customer<\/a>, and therefore you are not able to enjoy <a rel=\"noreferrer noopener\" aria-label=\"our advanced features\/tools and technical support (opens in a new tab)\" href=\"https:\/\/www.mysql.com\/products\/enterprise\/\" target=\"_blank\">our advanced features\/tools and technical support<\/a>,  so probably that <a rel=\"noreferrer noopener\" aria-label=\"mysqldump (opens in a new tab)\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/glossary.html#glos_mysqldump\" target=\"_blank\">mysqldump<\/a> could fit here. Please read: <a href=\"http:\/\/dasini.net\/blog\/2019\/07\/09\/mysql-innodb-cluster-recovering-and-provisioning-with-mysqldump\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"MySQL InnoDB Cluster \u2013 Recovering and provisioning with mysqldump (opens in a new tab)\">MySQL InnoDB Cluster \u2013 Recovering and provisioning with mysqldump<\/a>.<\/p>\n\n\n\n<p>Note that some new features are coming in this area&#8230; \ud83d\ude42<br>Stay tuned! <\/p>\n\n\n\n\n\n<h3 class=\"wp-block-heading\" id=\"mce_13\">References<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/mysql-innodb-cluster-userguide.html\" target=\"_blank\">MySQL InnoDB Cluster<\/a> <\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/group-replication.html\" target=\"_blank\">MySQL Group Replication<\/a> <\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/\" target=\"_blank\">MySQL Shell<\/a> <\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/dev.mysql.com\/doc\/mysql-router\/8.0\/en\/\" target=\"_blank\">MySQL Router<\/a> <\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" aria-label=\"MySQL Enterprise Backup Overview (opens in a new tab)\" href=\"https:\/\/www.mysql.com\/products\/enterprise\/backup.html\" target=\"_blank\">MySQL Enterprise Backup Overview<\/a> <\/li><li><a rel=\"noreferrer noopener\" aria-label=\"MySQL Enterprise Backup User's Guide (Version 8.0.16) (opens in a new tab)\" href=\"https:\/\/dev.mysql.com\/doc\/mysql-enterprise-backup\/8.0\/en\/\" target=\"_blank\">MySQL Enterprise Backup User&rsquo;s Guide (Version 8.0.16)<\/a> <\/li><li><a rel=\"noreferrer noopener\" aria-label=\"Using MySQL Enterprise Backup with Group Replication (opens in a new tab)\" href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/group-replication-enterprise-backup.html\" target=\"_blank\">Using MySQL Enterprise Backup with Group Replication<\/a> <\/li><li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/glossary.html#glos_physical_backup\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">Physical backup<\/a> <\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/dasini.net\/blog\/2019\/09\/03\/tutoriel-deployer-mysql-8-0-innodb-cluster-09-2019\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">Tutoriel \u2013 D\u00e9ployer MySQL 8.0 InnoDB Cluster (09-2019)<\/a><\/li><li><a rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\" href=\"http:\/\/dasini.net\/blog\/2019\/09\/10\/mysql-innodb-cluster-easy-recovering-and-provisioning\/\" target=\"_blank\">MySQL InnoDB Cluster \u2013 Easy Recovering and provisioning<\/a><\/li><li><a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"http:\/\/dasini.net\/blog\/2019\/07\/09\/mysql-innodb-cluster-recovering-and-provisioning-with-mysqldump\/\" target=\"_blank\">MySQL InnoDB Cluster \u2013 Recovering and provisioning with mysqldump<\/a><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/dasini.net\/blog\/2019\/04\/11\/mysql-innodb-cluster-howto-1-monitor-your-cluster\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (s\u2019ouvre dans un nouvel onglet)\">MySQL InnoDB Cluster \u2013 HowTo #1 \u2013 Monitor your cluster<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"http:\/\/dasini.net\/blog\/2019\/05\/21\/mysql-innodb-cluster-howto-2-validate-an-instance\/\" target=\"_blank\">MySQL InnoDB Cluster \u2013 HowTo #2 \u2013 Validate an instance<\/a> <\/li><\/ul>\n\n\n\n\n\n<p><strong><u>Misc<\/u><\/strong><br>Node 3 &#8211; Group Replication configuration<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SQL> SHOW VARIABLES LIKE 'group_replication%';\n+-----------------------------------------------------+--------------------------------------+\n| Variable_name                                       | Value                                |\n+-----------------------------------------------------+--------------------------------------+\n| group_replication_allow_local_lower_version_join    | OFF                                  |\n| group_replication_auto_increment_increment          | 7                                    |\n| group_replication_autorejoin_tries                  | 0                                    |\n| group_replication_bootstrap_group                   | OFF                                  |\n| group_replication_communication_debug_options       | GCS_DEBUG_NONE                       |\n| group_replication_communication_max_message_size    | 10485760                             |\n| group_replication_components_stop_timeout           | 31536000                             |\n| group_replication_compression_threshold             | 1000000                              |\n| group_replication_consistency                       | EVENTUAL                             |\n| group_replication_enforce_update_everywhere_checks  | OFF                                  |\n| group_replication_exit_state_action                 | READ_ONLY                            |\n| group_replication_flow_control_applier_threshold    | 25000                                |\n| group_replication_flow_control_certifier_threshold  | 25000                                |\n| group_replication_flow_control_hold_percent         | 10                                   |\n| group_replication_flow_control_max_quota            | 0                                    |\n| group_replication_flow_control_member_quota_percent | 0                                    |\n| group_replication_flow_control_min_quota            | 0                                    |\n| group_replication_flow_control_min_recovery_quota   | 0                                    |\n| group_replication_flow_control_mode                 | QUOTA                                |\n| group_replication_flow_control_period               | 1                                    |\n| group_replication_flow_control_release_percent      | 50                                   |\n| group_replication_force_members                     |                                      |\n| group_replication_group_name                        | 28f66c86-9d66-11e9-876e-0242ac13000b |\n| group_replication_group_seeds                       | M1:33061,M2:33061                    |\n| group_replication_gtid_assignment_block_size        | 1000000                              |\n| group_replication_ip_whitelist                      | AUTOMATIC                            |\n| group_replication_local_address                     | M3:33061                             |\n| group_replication_member_expel_timeout              | 0                                    |\n| group_replication_member_weight                     | 50                                   |\n| group_replication_message_cache_size                | 1073741824                           |\n| group_replication_poll_spin_loops                   | 0                                    |\n| group_replication_recovery_complete_at              | TRANSACTIONS_APPLIED                 |\n| group_replication_recovery_get_public_key           | OFF                                  |\n| group_replication_recovery_public_key_path          |                                      |\n| group_replication_recovery_reconnect_interval       | 60                                   |\n| group_replication_recovery_retry_count              | 10                                   |\n| group_replication_recovery_ssl_ca                   |                                      |\n| group_replication_recovery_ssl_capath               |                                      |\n| group_replication_recovery_ssl_cert                 |                                      |\n| group_replication_recovery_ssl_cipher               |                                      |\n| group_replication_recovery_ssl_crl                  |                                      |\n| group_replication_recovery_ssl_crlpath              |                                      |\n| group_replication_recovery_ssl_key                  |                                      |\n| group_replication_recovery_ssl_verify_server_cert   | OFF                                  |\n| group_replication_recovery_use_ssl                  | ON                                   |\n| group_replication_single_primary_mode               | ON                                   |\n| group_replication_ssl_mode                          | REQUIRED                             |\n| group_replication_start_on_boot                     | ON                                   |\n| group_replication_transaction_size_limit            | 150000000                            |\n| group_replication_unreachable_majority_timeout      | 0                                    |\n+-----------------------------------------------------+--------------------------------------+<\/code><\/pre>\n\n\n\n\n\n<div style=\"height:75px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-vivid-red-color has-text-color\"><strong>Thanks for using MySQL!<\/strong><\/p>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><a href=\"https:\/\/www.linkedin.com\/groups\/12524512\/\" target=\"_blank\" rel=\"noopener\" title=\"Olivier DASINI on Linkedin\">Follow me on Linkedin<\/a><\/p>\n\n\n\n<p>Watch my videos on my <a href=\"https:\/\/www.youtube.com\/channel\/UC12TulyJsJZHoCmby3Nm3WQ\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Olivier's MySQL Channel\">YouTube channel<\/a> and <a href=\"https:\/\/www.youtube.com\/channel\/UC12TulyJsJZHoCmby3Nm3WQ\/?sub_confirmation=1\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Subscribe\">subscribe<\/a>.<\/p>\n\n\n\n<p>My <a href=\"https:\/\/www.slideshare.net\/freshdaz\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Olivier DASINI on Slideshare\">Slideshare account<\/a>.<\/p>\n\n\n\n<p>My <a href=\"https:\/\/speakerdeck.com\/freshdaz\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Olivier DASINI on Speaker Deck\">Speaker Deck account<\/a>.<\/p>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-vivid-red-color has-text-color\"><strong>Thanks for using HeatWave &amp; MySQL!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Like I stated in my previous article &#8211; MySQL InnoDB Cluster &#8211; Recovering and provisioning with mysqldump :<br \/>\n\u00ab\u00a0As the administrator of a cluster, among others tasks, you should be able to restore failed nodes and to add (or remove) new nodes\u00a0\u00bb.<br \/>\nWell, I still agree with myself \ud83d\ude42<br \/>\nMySQL customers using a Commercial Edition have access to MySQL Enterprise Backup (MEB) which provide enterprise-grade physical backup and recovery for MySQL.<br \/>\nMEB delivers hot, online, non-blocking backups on multiple platforms including Linux, Windows, Mac &#038; Solaris.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[351,355,203,339],"tags":[413,343,345,349],"class_list":["post-3219","post","type-post","status-publish","format-standard","hentry","category-group-replication-en","category-high-availability","category-mysql-en","category-tuto-en","tag-cluster-en","tag-group-replication-en","tag-high-availability-en","tag-tuto-en"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-PV","jetpack-related-posts":[{"id":3193,"url":"https:\/\/dasini.net\/blog\/2019\/07\/09\/mysql-innodb-cluster-recovering-and-provisioning-with-mysqldump\/","url_meta":{"origin":3219,"position":0},"title":"MySQL InnoDB Cluster &#8211;  Recovering and provisioning with mysqldump","author":"Olivier DASINI","date":"9 juillet 2019","format":false,"excerpt":"As the administrator of a cluster, among other tasks, you should be able to restore failed nodes and grow (or shrink) your cluster by adding (or removing) new nodes. In MySQL, as a backup tool (and if your amount of data is not too big), you can use mysqldump a\u2026","rel":"","context":"Dans &quot;Group Replication&quot;","block_context":{"text":"Group Replication","link":"https:\/\/dasini.net\/blog\/category\/group-replication-en\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3360,"url":"https:\/\/dasini.net\/blog\/2019\/09\/10\/mysql-innodb-cluster-easy-recovering-and-provisioning\/","url_meta":{"origin":3219,"position":1},"title":"MySQL InnoDB Cluster &#8211; Easy Recovering and provisioning","author":"Olivier DASINI","date":"10 septembre 2019","format":false,"excerpt":"Up to MySQL 8.0.16, to perform these tasks you could: - Use MySQL Enterprise Backup : - Use mysqldump Starting with MySQL 8.0.17, the easiest and recommended method is to use the CLONE feature.","rel":"","context":"Dans &quot;Group Replication&quot;","block_context":{"text":"Group Replication","link":"https:\/\/dasini.net\/blog\/category\/group-replication-en\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3086,"url":"https:\/\/dasini.net\/blog\/2019\/05\/21\/mysql-innodb-cluster-howto-2-validate-an-instance\/","url_meta":{"origin":3219,"position":2},"title":"MySQL InnoDB Cluster &#8211; HowTo #2 &#8211; Validate an instance","author":"Olivier DASINI","date":"21 mai 2019","format":false,"excerpt":"Q: Validate an instance for MySQL InnoDB Cluster usage? A: Use check_instance_configuration()","rel":"","context":"Dans &quot;Group Replication&quot;","block_context":{"text":"Group Replication","link":"https:\/\/dasini.net\/blog\/category\/group-replication-en\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2090,"url":"https:\/\/dasini.net\/blog\/2018\/01\/09\/setting-up-proxysql-1-4-with-mysql-5-7-group-replication\/","url_meta":{"origin":3219,"position":3},"title":"Setting up ProxySQL 1.4 with MySQL 5.7 Group Replication","author":"Olivier DASINI","date":"9 janvier 2018","format":false,"excerpt":"There are 3\u00a0pillars for a database architecture: Monitoring, Backup \/ Restore process, High Availability This blog post is about database High Availability; more precisely about one of the best combo of the moment : MySQL 5.7 Group Replication\u00a0: the only native HA solution for MySQL, it's a\u00a0Single\/Multi-master update everywhere replication\u2026","rel":"","context":"Dans &quot;Group Replication&quot;","block_context":{"text":"Group Replication","link":"https:\/\/dasini.net\/blog\/category\/group-replication-en\/"},"img":{"alt_text":"MySQL","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/mysql_300x161.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2951,"url":"https:\/\/dasini.net\/blog\/2019\/04\/11\/mysql-innodb-cluster-howto-1-monitor-your-cluster\/","url_meta":{"origin":3219,"position":4},"title":"MySQL InnoDB Cluster &#8211; HowTo #1 &#8211; Monitor your cluster","author":"Olivier DASINI","date":"11 avril 2019","format":false,"excerpt":"MySQL InnoDB Cluster - HowTo #1 - Monitor your cluster Q: How do I monitor the status & the configuration of my cluster? A: Use status() or status({extended:true}) or status({queryMembers:true})?","rel":"","context":"Dans &quot;Group Replication&quot;","block_context":{"text":"Group Replication","link":"https:\/\/dasini.net\/blog\/category\/group-replication-en\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3488,"url":"https:\/\/dasini.net\/blog\/2019\/12\/16\/webinar-migrating-from-mariadb-to-mysql\/","url_meta":{"origin":3219,"position":5},"title":"Webinar &#8211; Migrating from MariaDB to MySQL","author":"Olivier DASINI","date":"16 d\u00e9cembre 2019","format":false,"excerpt":"This webinar will cover the advantages and process for migrating from MariaDB\/Galera cluster to MySQL InnoDB Cluster.","rel":"","context":"Dans &quot;High Availability&quot;","block_context":{"text":"High Availability","link":"https:\/\/dasini.net\/blog\/category\/high-availability\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/3219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=3219"}],"version-history":[{"count":31,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/3219\/revisions"}],"predecessor-version":[{"id":3458,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/3219\/revisions\/3458"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=3219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=3219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=3219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}