<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Database &#8211; abdulrahmanuk.com</title>
	<atom:link href="https://www.abdulrahmanuk.com/category/database/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.abdulrahmanuk.com</link>
	<description>All about Cloud and DevOps</description>
	<lastBuildDate>Thu, 17 Apr 2025 23:13:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.abdulrahmanuk.com/wp-content/uploads/2023/02/icons8-devops-60.png</url>
	<title>Database &#8211; abdulrahmanuk.com</title>
	<link>https://www.abdulrahmanuk.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Creating a Highly Available MySQL InnoDB Cluster</title>
		<link>https://www.abdulrahmanuk.com/creating-a-highly-available-mysql-innodb-cluster/</link>
					<comments>https://www.abdulrahmanuk.com/creating-a-highly-available-mysql-innodb-cluster/#comments</comments>
		
		<dc:creator><![CDATA[Abdul Rahman UK]]></dc:creator>
		<pubDate>Thu, 17 Apr 2025 22:31:28 +0000</pubDate>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[devops]]></category>
		<guid isPermaLink="false">https://www.abdulrahmanuk.com/?p=517</guid>

					<description><![CDATA[<p>Setting up a highly available MySQL InnoDB Cluster with MySQL Router, group replication, automatic failover, and point-in-time recovery can be complex, but I’ll break everything down into step-by-step instructions with explanations, suitable for beginners. This guide summarizes my real-world setup journey for a production-ready MySQL cluster with a dedicated MySQL Router VM, backups, and failover [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.abdulrahmanuk.com/creating-a-highly-available-mysql-innodb-cluster/">Creating a Highly Available MySQL InnoDB Cluster</a> appeared first on <a rel="nofollow" href="https://www.abdulrahmanuk.com">abdulrahmanuk.com</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Setting up a <strong>highly available MySQL InnoDB Cluster</strong> with <strong>MySQL Router</strong>, <strong>group replication</strong>, <strong>automatic failover</strong>, and <strong>point-in-time recovery</strong> can be complex, but I’ll break everything down into <strong>step-by-step instructions with explanations</strong>, suitable for beginners. This guide summarizes my real-world setup journey for a production-ready MySQL cluster with a dedicated MySQL Router VM, backups, and failover handling.</p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> MySQL InnoDB Cluster Architecture</h2>



<ol class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>3 MySQL Nodes</strong>: 1 primary (writer) + 2 secondaries (readers)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Group Replication</strong> for HA</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6aa.png" alt="🚪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>MySQL Router</strong> (deployed on a separate VM for better failover control)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Backups</strong> (dump + binary logs) for PITR</li>
</ol>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Pre-requisites</strong><br>Ubuntu VMs (each with at least 2 vCPUs and 4GB RAM recommended)<br>All VMs must be reachable via an internal network.<br>MySQL port (3306) and Group Replication ports (33061, 33062) must be open.</p>



<p>I had created 3 VMs on Azure Cloud to create the MySQL Cluster architecture</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="2560" height="1213" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-scaled.png" alt="image 9 scaled" class="wp-image-527" title="Creating a Highly Available MySQL InnoDB Cluster 1" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-scaled.png 2560w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-768x364.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-1536x728.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-2048x971.png 2048w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-150x71.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-300x142.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-696x330.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-1068x506.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-1920x910.png 1920w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-9-600x284.png 600w" sizes="(max-width: 2560px) 100vw, 2560px" /></figure>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Install MySQL on All Nodes</h5>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo apt update &amp;&amp; sudo apt install mysql-server net-tools -y
wget https://repo.mysql.com//mysql-apt-config_0.8.34-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.34-1_all.deb
sudo apt update &amp;&amp; sudo apt install mysql-shell -y
" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">sudo apt update &amp;&amp; sudo apt install mysql-server net-tools -y</span></span>
<span class="line"><span style="color: #A6ACCD">wget https:</span><span style="color: #767C9DB0; font-style: italic">//repo.mysql.com//mysql-apt-config_0.8.34-1_all.deb</span></span>
<span class="line"><span style="color: #A6ACCD">sudo dpkg -i mysql-apt-config_</span><span style="color: #5DE4C7">0.8</span><span style="color: #A6ACCD">.</span><span style="color: #5DE4C7">34-1</span><span style="color: #A6ACCD">_all.deb</span></span>
<span class="line"><span style="color: #A6ACCD">sudo apt update &amp;&amp; sudo apt install mysql-shell -y</span></span>
<span class="line"></span></code></pre></div>



<p>Check that MySQL is running and listening on 3306 on each node (especially node01):</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo netstat -tulnp | grep 3306" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">sudo netstat -tulnp | grep </span><span style="color: #5DE4C7">3306</span></span></code></pre></div>



<pre class="wp-block-code"><code>#You should see something like:
**tcp &nbsp; 0&nbsp; 0 0.0.0.0:3306 &nbsp; 0.0.0.0:* &nbsp; LISTEN &nbsp; 1234/mysqld**</code></pre>



<pre class="wp-block-code"><code>If it only shows 127.0.0.1:3306, then MySQL is **not listening on external IPs**.
&#x1f449; **To fix that:**
Edit your mysqld.cnf (location: /etc/mysql/mysql.conf.d/mysqld.cnf):

**bind-address = 0.0.0.0**</code></pre>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Set bind-address to:
bind-address = 0.0.0.0
" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf</span></span>
<span class="line"><span style="color: #A6ACCD"># Set bind-address to:</span></span>
<span class="line"><span style="color: #A6ACCD">bind-address = </span><span style="color: #5DE4C7">0.0</span><span style="color: #A6ACCD">.</span><span style="color: #5DE4C7">0.0</span></span>
<span class="line"></span></code></pre></div>



<p>Then restart:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo systemctl restart mysql" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">sudo systemctl restart mysql</span></span></code></pre></div>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Configure Each MySQL Node</h5>



<p>Create a config file <code>/etc/mysql/mysql.conf.d/group_replication.cnf</code> on each node.<br><strong>Example (for node01):</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="[mysqld]
# Server identity (must be unique for each node)
server-id=1  # node01 = 1, node02 = 2, node03 = 3 (change accordingly)

# Enable binary logging
log_bin = mysql-bin
binlog_format = ROW
binlog_checksum = NONE
transaction_write_set_extraction = XXHASH64

# Enable GTID
gtid_mode = ON
enforce_gtid_consistency = ON

# Group Replication settings
loose-group_replication_group_name=&quot;aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee&quot;
loose-group_replication_start_on_boot=off
loose-group_replication_bootstrap_group=off
loose-group_replication_local_address=&quot;node01:33061&quot;  # Change per node
loose-group_replication_group_seeds=&quot;node01:33061,node02:33061,node03:33061&quot;
loose-group_replication_single_primary_mode=ON
loose-group_replication_enforce_update_everywhere_checks=OFF

# Networking
report_host=node01  # change for each node
bind-address=0.0.0.0
mysqlx-bind-address=0.0.0.0

# InnoDB settings
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">[</span><span style="color: #D0679D">mysqld</span><span style="color: #A6ACCD">]</span></span>
<span class="line"><span style="color: #A6ACCD"># Server identity (must be unique for each node)</span></span>
<span class="line"><span style="color: #A6ACCD">server-id=</span><span style="color: #5DE4C7">1</span><span style="color: #A6ACCD">  # node</span><span style="color: #5DE4C7">01</span><span style="color: #A6ACCD"> = </span><span style="color: #5DE4C7">1</span><span style="color: #A6ACCD">, node</span><span style="color: #5DE4C7">02</span><span style="color: #A6ACCD"> = </span><span style="color: #5DE4C7">2</span><span style="color: #A6ACCD">, node</span><span style="color: #5DE4C7">03</span><span style="color: #A6ACCD"> = </span><span style="color: #5DE4C7">3</span><span style="color: #A6ACCD"> (change accordingly)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A6ACCD"># Enable binary logging</span></span>
<span class="line"><span style="color: #A6ACCD">log_bin = mysql-bin</span></span>
<span class="line"><span style="color: #A6ACCD">binlog_format = ROW</span></span>
<span class="line"><span style="color: #A6ACCD">binlog_checksum = NONE</span></span>
<span class="line"><span style="color: #A6ACCD">transaction_write_set_extraction = XXHASH</span><span style="color: #5DE4C7">64</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A6ACCD"># Enable GTID</span></span>
<span class="line"><span style="color: #A6ACCD">gtid_mode = ON</span></span>
<span class="line"><span style="color: #A6ACCD">enforce_gtid_consistency = ON</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A6ACCD"># Group Replication settings</span></span>
<span class="line"><span style="color: #A6ACCD">loose-group_replication_group_name=</span><span style="color: #A6ACCD">&quot;</span><span style="color: #5DE4C7">aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee</span><span style="color: #A6ACCD">&quot;</span></span>
<span class="line"><span style="color: #A6ACCD">loose-group_replication_start_on_boot=off</span></span>
<span class="line"><span style="color: #A6ACCD">loose-group_replication_bootstrap_group=off</span></span>
<span class="line"><span style="color: #A6ACCD">loose-group_replication_local_address=</span><span style="color: #A6ACCD">&quot;</span><span style="color: #5DE4C7">node01:33061</span><span style="color: #A6ACCD">&quot;</span><span style="color: #A6ACCD">  # Change per node</span></span>
<span class="line"><span style="color: #A6ACCD">loose-group_replication_group_seeds=</span><span style="color: #A6ACCD">&quot;</span><span style="color: #5DE4C7">node01:33061,node02:33061,node03:33061</span><span style="color: #A6ACCD">&quot;</span></span>
<span class="line"><span style="color: #A6ACCD">loose-group_replication_single_primary_mode=ON</span></span>
<span class="line"><span style="color: #A6ACCD">loose-group_replication_enforce_update_everywhere_checks=OFF</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A6ACCD"># Networking</span></span>
<span class="line"><span style="color: #A6ACCD">report_host=node</span><span style="color: #5DE4C7">01</span><span style="color: #A6ACCD">  # change for each node</span></span>
<span class="line"><span style="color: #A6ACCD">bind-address=</span><span style="color: #5DE4C7">0.0</span><span style="color: #A6ACCD">.</span><span style="color: #5DE4C7">0.0</span></span>
<span class="line"><span style="color: #A6ACCD">mysqlx-bind-address=</span><span style="color: #5DE4C7">0.0</span><span style="color: #A6ACCD">.</span><span style="color: #5DE4C7">0.0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A6ACCD"># InnoDB settings</span></span>
<span class="line"><span style="color: #A6ACCD">innodb_flush_log_at_trx_commit = </span><span style="color: #5DE4C7">1</span></span>
<span class="line"><span style="color: #A6ACCD">sync_binlog = </span><span style="color: #5DE4C7">1</span></span>
<span class="line"></span></code></pre></div>



<p>Make sure each node has a <strong>unique <code>server-id</code></strong> and correct <code>report_host</code>.</p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f464.png" alt="👤" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Create a Cluster Admin User</h5>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="CREATE USER 'clusteradmin'@'%' IDENTIFIED BY 'StrongPass!123';
GRANT ALL PRIVILEGES ON *.* TO 'clusteradmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">CREATE USER &#39;clusteradmin&#39;@&#39;%&#39; IDENTIFIED BY &#39;StrongPass!</span><span style="color: #5DE4C7">123</span><span style="color: #A6ACCD">&#39;;</span></span>
<span class="line"><span style="color: #A6ACCD">GRANT ALL PRIVILEGES ON *.* TO &#39;clusteradmin&#39;@&#39;%&#39; WITH GRANT OPTION;</span></span>
<span class="line"><span style="color: #A6ACCD">FLUSH PRIVILEGES;</span></span></code></pre></div>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 4: Configure InnoDB Cluster</h5>



<p>On <strong>node01</strong>, use MySQL Shell:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="mysqlsh --uri clusteradmin@localhost" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">mysqlsh --uri clusteradmin@localhost</span></span></code></pre></div>



<p>Please enter clusteradmin password &#8220;StrongPass!123&#8221; once it pops up on your terminal</p>



<figure class="wp-block-image size-full"><img decoding="async" width="2068" height="588" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image.png" alt="image" class="wp-image-518" title="Creating a Highly Available MySQL InnoDB Cluster 2" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image.png 2068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-768x218.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1536x437.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2048x582.png 2048w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-150x43.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-300x85.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-696x198.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1068x304.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1920x546.png 1920w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-600x171.png 600w" sizes="(max-width: 2068px) 100vw, 2068px" /></figure>



<p>Then: Run the following command one by one on node01 </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="dba.configureInstance('clusteradmin@node01')
dba.configureInstance('clusteradmin@node02')
dba.configureInstance('clusteradmin@node03')" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">dba.configureInstance(&#39;clusteradmin@node</span><span style="color: #5DE4C7">01</span><span style="color: #A6ACCD">&#39;)</span></span>
<span class="line"><span style="color: #A6ACCD">dba.configureInstance(&#39;clusteradmin@node</span><span style="color: #5DE4C7">02</span><span style="color: #A6ACCD">&#39;)</span></span>
<span class="line"><span style="color: #A6ACCD">dba.configureInstance(&#39;clusteradmin@node</span><span style="color: #5DE4C7">03</span><span style="color: #A6ACCD">&#39;)</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img decoding="async" width="2276" height="720" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1.png" alt="image 1" class="wp-image-519" title="Creating a Highly Available MySQL InnoDB Cluster 3" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1.png 2276w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-768x243.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-1536x486.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-2048x648.png 2048w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-150x47.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-300x95.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-696x220.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-1068x338.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-1920x607.png 1920w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-1-600x190.png 600w" sizes="(max-width: 2276px) 100vw, 2276px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2196" height="1698" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2.png" alt="image 2" class="wp-image-520" title="Creating a Highly Available MySQL InnoDB Cluster 4" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2.png 2196w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-768x594.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-1536x1188.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-2048x1584.png 2048w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-150x116.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-300x232.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-696x538.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-1068x826.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-1920x1485.png 1920w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-2-600x464.png 600w" sizes="auto, (max-width: 2196px) 100vw, 2196px" /></figure>



<p>After once you have completed above command, then run following command on node01</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="var cluster = dba.createCluster('wordpressCluster')
cluster.addInstance('clusteradmin@node02')
cluster.addInstance('clusteradmin@node03')" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">var cluster = dba.createCluster(&#39;wordpressCluster&#39;)</span></span>
<span class="line"><span style="color: #A6ACCD">cluster.addInstance(&#39;clusteradmin@node</span><span style="color: #5DE4C7">02</span><span style="color: #A6ACCD">&#39;)</span></span>
<span class="line"><span style="color: #A6ACCD">cluster.addInstance(&#39;clusteradmin@node</span><span style="color: #5DE4C7">03</span><span style="color: #A6ACCD">&#39;)</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2260" height="634" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3.png" alt="image 3" class="wp-image-521" title="Creating a Highly Available MySQL InnoDB Cluster 5" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3.png 2260w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-768x215.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-1536x431.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-2048x575.png 2048w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-150x42.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-300x84.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-696x195.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-1068x300.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-1920x539.png 1920w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-3-600x168.png 600w" sizes="auto, (max-width: 2260px) 100vw, 2260px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1519" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-scaled.png" alt="image 5 scaled" class="wp-image-523" title="Creating a Highly Available MySQL InnoDB Cluster 6" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-scaled.png 2560w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-768x456.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-1536x911.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-2048x1215.png 2048w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-150x89.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-300x178.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-696x413.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-1068x634.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-1920x1139.png 1920w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-5-600x356.png 600w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1491" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-scaled.png" alt="image 6 scaled" class="wp-image-524" title="Creating a Highly Available MySQL InnoDB Cluster 7" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-scaled.png 2560w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-768x447.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-1536x895.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-2048x1193.png 2048w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-150x87.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-300x175.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-696x405.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-1068x622.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-1920x1118.png 1920w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-6-600x350.png 600w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<p>Finally, you can check the cluster status.  </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="cluster.status()" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">cluster.status()</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1732" height="1596" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7.png" alt="image 7" class="wp-image-525" title="Creating a Highly Available MySQL InnoDB Cluster 8" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7.png 1732w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7-768x708.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7-1536x1415.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7-150x138.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7-300x276.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7-696x641.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7-1068x984.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-7-600x553.png 600w" sizes="auto, (max-width: 1732px) 100vw, 1732px" /></figure>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> At this point, the cluster is formed, and MySQL group replication is working.<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Success!</strong> You now have a functional InnoDB Cluster <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f389.png" alt="🎉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Step 5: Setup <code>mysqldump</code> Cron Job for Daily Backups</strong></h5>



<p>Create a script <code>/usr/local/bin/mysql_backup.sh</code>:<br>You can mount a volume to this directory <strong>/mnt/mysql_backup.</strong> This way, you can make sure your backup will be safe if the server has any issues.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="#!/bin/bash
DATE=$(date +%F_%H-%M)
mysqldump -u root --all-databases &gt; /mnt/mysql_backup/db_backup_$DATE.sql" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">#!/bin/bash</span></span>
<span class="line"><span style="color: #A6ACCD">DATE=$(date +%F_%H-%M)</span></span>
<span class="line"><span style="color: #A6ACCD">mysqldump -u root --all-databases &gt; /mnt/mysql_backup/db_backup_$DATE.sql</span></span></code></pre></div>



<p>Make it executable:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="chmod +x /usr/local/bin/mysql_backup.sh" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">chmod +x /usr/local/bin/mysql_backup.sh</span></span></code></pre></div>



<p>Add a cron job:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="crontab -e

0 2 * * * /usr/local/bin/mysql_backup.sh" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">crontab -e</span></span>
<span class="line"></span>
<span class="line"><span style="color: #5DE4C7">0</span><span style="color: #A6ACCD"> </span><span style="color: #5DE4C7">2</span><span style="color: #A6ACCD"> * * * /usr/local/bin/mysql_backup.sh</span></span></code></pre></div>



<p>This runs daily at 2 AM.</p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Step 6: Backup Binary Logs Every Minute</strong></h5>



<p>Use <code>mysqlbinlog</code> to extract binlog content every minute:<br>Create <code>/usr/local/bin/binlog_backup.sh</code>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="#!/bin/bash
DATE=$(date +%F_%H-%M)
BINLOG_PATH=&quot;/mnt/mysql_binlog&quot;
DEST_PATH=&quot;/mnt/mysql_backup/binlogs&quot;
mkdir -p &quot;$DEST_PATH&quot;
cp $BINLOG_PATH/mysql-bin.* &quot;$DEST_PATH/binlog_$DATE&quot;" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">#!/bin/bash</span></span>
<span class="line"><span style="color: #A6ACCD">DATE=$(date +%F_%H-%M)</span></span>
<span class="line"><span style="color: #A6ACCD">BINLOG_PATH=</span><span style="color: #A6ACCD">&quot;</span><span style="color: #5DE4C7">/mnt/mysql_binlog</span><span style="color: #A6ACCD">&quot;</span></span>
<span class="line"><span style="color: #A6ACCD">DEST_PATH=</span><span style="color: #A6ACCD">&quot;</span><span style="color: #5DE4C7">/mnt/mysql_backup/binlogs</span><span style="color: #A6ACCD">&quot;</span></span>
<span class="line"><span style="color: #A6ACCD">mkdir -p </span><span style="color: #A6ACCD">&quot;</span><span style="color: #5DE4C7">$DEST_PATH</span><span style="color: #A6ACCD">&quot;</span></span>
<span class="line"><span style="color: #A6ACCD">cp $BINLOG_PATH/mysql-bin.* </span><span style="color: #A6ACCD">&quot;</span><span style="color: #5DE4C7">$DEST_PATH/binlog_$DATE</span><span style="color: #A6ACCD">&quot;</span></span></code></pre></div>



<p>Add to crontab:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="* * * * * /usr/local/bin/binlog_backup.sh" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">* * * * * /usr/local/bin/binlog_backup.sh</span></span></code></pre></div>



<p>This ensures you can do <strong>point-in-time recovery</strong> using full dump + binlogs.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Important Concepts to Know </strong></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Concept</th><th>Description</th></tr></thead><tbody><tr><td><strong>InnoDB Cluster</strong></td><td>A high-availability solution using Group Replication and MySQL Shell</td></tr><tr><td><strong>Group Replication</strong></td><td>Ensures all nodes are in sync using GTID-based replication</td></tr><tr><td><strong>MySQL Router</strong></td><td>Middle layer that routes read/write traffic to correct nodes</td></tr><tr><td><strong>Single Primary Mode</strong></td><td>Only one node accepts writes; automatic failover is supported</td></tr><tr><td><strong>Backup Strategy</strong></td><td><code>mysqldump</code> for full backups, <code>mysqlbinlog</code> for PITR</td></tr><tr><td><strong>GTID</strong></td><td>Global Transaction IDs used to track transactions in replication</td></tr><tr><td><strong>Failover</strong></td><td>If primary fails, a new primary is elected from secondaries</td></tr></tbody></table></figure>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> MySQL Router – On a Dedicated VM<br>For better <strong>failover and load balancing</strong>, deploy MySQL Router separately:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo apt install mysql-router -y
mysqlrouter --bootstrap clusteradmin@node01:3306 --directory /etc/mysqlrouter
sudo systemctl start mysqlrouter" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">sudo apt install mysql-router -y</span></span>
<span class="line"><span style="color: #A6ACCD">mysqlrouter --bootstrap clusteradmin@node</span><span style="color: #5DE4C7">01</span><span style="color: #A6ACCD">:</span><span style="color: #5DE4C7">3306</span><span style="color: #A6ACCD"> --directory /etc/mysqlrouter</span></span>
<span class="line"><span style="color: #A6ACCD">sudo systemctl start mysqlrouter</span></span></code></pre></div>



<p>It ensures connections always route to the right node. <strong>no manual switching needed</strong> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Failover Test</h2>



<p>Try stopping MySQL on node01:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo systemctl stop mysql" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">sudo systemctl stop mysql</span></span></code></pre></div>



<p>Once you stop MySQL services, to see the failover, you have to connect to the MySQL shell. For that, follow the commands below </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#a6accd;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1b1e28"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="mysqlsh --uri clusteradmin@localhost

var cluster = dba.getCluster('wordpressCluster')

cluster.status()" style="color:#a6accd;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki poimandres" style="background-color: #1b1e28" tabindex="0"><code><span class="line"><span style="color: #A6ACCD">mysqlsh --uri clusteradmin@localhost</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A6ACCD">var cluster = dba.getCluster(&#39;wordpressCluster&#39;)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #A6ACCD">cluster.status()</span></span></code></pre></div>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1906" height="1532" src="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8.png" alt="image 8" class="wp-image-526" title="Creating a Highly Available MySQL InnoDB Cluster 9" srcset="https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8.png 1906w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8-768x617.png 768w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8-1536x1235.png 1536w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8-150x121.png 150w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8-300x241.png 300w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8-696x559.png 696w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8-1068x858.png 1068w, https://www.abdulrahmanuk.com/wp-content/uploads/2025/04/image-8-600x482.png 600w" sizes="auto, (max-width: 1906px) 100vw, 1906px" /></figure>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f51a.png" alt="🔚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Wrapping Up</strong></h3>



<p>Setting up a MySQL InnoDB Cluster <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> isn&#8217;t just about replication. It&#8217;s about building a resilient, production-ready database architecture with automatic failover, dedicated routing, and reliable backups. With 3 MySQL nodes, a separate MySQL Router VM, binary logs, and regular dumps, you&#8217;re all set for high availability and peace of mind. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4be.png" alt="💾" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>The post <a rel="nofollow" href="https://www.abdulrahmanuk.com/creating-a-highly-available-mysql-innodb-cluster/">Creating a Highly Available MySQL InnoDB Cluster</a> appeared first on <a rel="nofollow" href="https://www.abdulrahmanuk.com">abdulrahmanuk.com</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.abdulrahmanuk.com/creating-a-highly-available-mysql-innodb-cluster/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
