MySQL Group Replication (GR) is a MySQL Server
plugin that enables you to create elastic, highly-available,
fault-tolerant replication topologies. Groups can operate in
a
single-primary mode with automatic primary election, where only
one server accepts updates at a time. Alternatively, groups can
be deployed in multi-primary mode, where all servers can accept
updates, even if they are issued concurrently.…
In April, I already posted an article on how to upgrade safely your MySQL InnoDB Cluster, let’s review this procedure now that MySQL 8.0.12 is out.
To upgrade all the members of a MySQL InnoDB Cluster (Group), you need to keep in mind the following points:
- upgrade all the nodes one by one
- always end by the Primary Master in case of Single Primary Mode
- after upgrading the binaries don’t forget to start MySQL
without starting Group Replication
(
group_replication_start_on_boot=0) - to run
mysql_upgrade
Let’s see this in action on the video below:
As you could see, this is quick and easy.
…
[Read more]We received feedback about how a member should act when leaving the group. And the majority of users wanted that when a node drops out of the group, it should kill all connections and shutdown. I totally agree with that behavior and it’s now the default in MySQL 8.0.12.
This new feature is explained in WL#11568.
Before this change, the server goes into super read only mode when dropping out of the group and allows users connected to this server or new connections (if you don’t use the router) to read old data.
Let’s check this out in the following video:
So now in MySQL 8.0.12, there is a mnew option called …
[Read more]I was recently asked a question by mail about MySQL Lossless Semi-Synchronous Replication. As I think the answer could benefit many people, I am answering it in a blog post. The answer brings us to the internals of transaction committing, of semi-synchronous replication, of MySQL (server) crash recovery, and of storage engine (InnoDB) crash recovery. I am also debunking some misconceptions that I have often seen and heard repeated by many. Let’s start by stating one of those misconceptions.
One of those misconceptions is the following (this is NOT true): semi-synchronous enabled slaves are always the most up-to-date slaves (again, this is NOT true). If you hear it yourself, then please call people out on it to avoid this spreading more. Even if some slaves have semi-synchronous replication disabled (I will use semi-sync for …
[Read more]This year again, the MySQL Team is eager to participate in the Oracle Open World conference. This is a great opportunity for our engineers and the entire MySQL Team to highlight what we’ve done, and also what we are working on. Another reason to be excited this year is our new participation to Code One, the Oracle developer focused conference. Oracle Code One will include a full track dedicated to MySQL.
This is very good news for everybody attending, from DBAs to developers, as we will offer even more great content ! This year, in both events, we will highlight how NoSQL+SQL=MySQL.
Our MySQL Engineers will deliver fantastic sessions about …
[Read more]After having explained how to achieve HA for MySQL Router for people who doesn’t want to install the MySQL Router on the application servers and after having illustrated how to use Pacemaker, this article explains how to setup HA for MySQL Router using keepalived.
Keepalived is very popular, maybe because it’s also very easy to use. We can of course use 2 or more servers. The principle is the same as on the previous articles, if the router dies, the virtual IP used by the application server(s) to connect to MySQL is sent to another machine where mysqlrouter is still running.
Let’s have a look at the configuration, in this case we use 2 machines, mysql1 and …
[Read more]This article will explain how to setup HA for MySQL Router as described in a previous article about where should the router stand.
For this setup, I will use Pacemaker (part of RedHat High Availability Add-on and available on RHEL, CentOS, Oracle Linux, …).
Of course we need a MySQL InnoDB Cluster but we won’t really use it for the HA setup of the MySQL Router.
Installing Pacemaker
The first step is to install pacemaker on all the machines we will use for our “MySQL Router Cluster”:
# yum install pacemaker pcs resource-agents
Now we need to start the pcsd service and enable it
at boot (on all machines):
# systemctl start pcsd.service # systemctl enable pcsd.service
It’s time now to setup authentication, this operation is again …
[Read more]As you know, MySQL InnoDB Cluster is composed of 3 elements:
- a group replication cluster of at least 3 servers
- the MySQL Shell used to manage the cluster
- the MySQL Router that send the traffic from the application server(s) to the cluster
When presenting the solution in conferences, one the main question is Where should I put the router ? and the answer is always the same: the best place to install the router is the application server !
The router is a very lightweight process that gets its configuration from the cluster’s metadata and doesn’t require a lot of resources or maintenance.
So the ideal setup is the following:
However for many (obscure?) reasons, sometimes people doesn’t want to have the MySQL …
[Read more]Since MySQL 5.7 we have a new player in the field, MySQL InnoDB Cluster. This is an Oracle High Availability solution that can be easily installed over MySQL to get High Availability with multi-master capabilities and automatic failover.
This solution consists in 3 components: InnoDB Group Replication, MySQL Router and MySQL Shell, you can see how these components interact in this graphic:
In this three blog post series, we will cover each of this components to get a sense of what this tool provides and how it can help with architecture decisions.
Group Replication
This is …
[Read more]As promised, here is a post more detailed on how to create a MySQL InnoDB Cluster using MySQL Shell and the AdminAPI.
First of all, as a good practice is never enough repeated, whatever the version of MySQL you are using, please use the latest MySQL Shell ! So if you are using 5.7, please use MySQL Shell 8.0.11. See this compatibility matrix or this official one.
dba class
The AdminAPI can be accessed by the MySQL Shell via the dba object. The reference manual for this class is here. The Shell …
[Read more]