At the beginning of a project, the database is just a single MySQL instance (maybe not even running on its own hardware)... but with the evolution of the business requirements, the database must change to also meet the new targets of data loss and uptime. During this session we will follow the journey of a single MySQL server from the simple instance to a High Available Architecture with multi-site Disaster Recovery. We will discover easy manageable native solutions like MySQL InnoDB ReplicaSet, MySQL InnoDB Cluster and MySQL InnoDB ClusterSet. The session is also illustrated with commands and examples.
1 of 80
Downloaded 10 times
More Related Content
LinuxFest Northwest 2022 - The Evolution of a MySQL Database System
3. The Journey To
MySQL InnoDB
ClusterSet
Copyright @ 2022 Oracle and/or its affiliates.
2
4. Who am I ?
about.me/lefred
Copyright @ 2022 Oracle and/or its affiliates.
3
5. @lefred
MySQL Evangelist
using MySQL since version 3.21
devops believer
likes 🏀
living in 🇧🇪
https://lefred.be
Frédéric Descamps
Copyright @ 2022 Oracle and/or its affiliates.
4
6. Best Practices in 2022
configuration parameters
Copyright @ 2022 Oracle and/or its affiliates.
5
7. During this presentation I assume that...
your system is MySQL 8.0.28 or more recent
you are using only InnoDB
you have the binary logs enabled
the binary logs format is ROW
you are using GTIDs
Copyright @ 2022 Oracle and/or its affiliates.
6
8. Evolution to High Availability
MySQL 8.0
Copyright @ 2022 Oracle and/or its affiliates.
7
10. This is where it all begins...
reminder:
we use ONLY InnoDB
we keep the default durability settings
One single MySQL instance
Copyright @ 2022 Oracle and/or its affiliates.
9
11. One single MySQL instance
Copyright @ 2022 Oracle and/or its affiliates.
/
/
RPO ?
?
RTO
10
12. Next Level (level up)
The database becomes more important, loosing it might be an issue...
Copyright @ 2022 Oracle and/or its affiliates.
11
13. Next Level (level up)
The database becomes more important, loosing it might be an issue...
RTO → hours
Copyright @ 2022 Oracle and/or its affiliates.
11
14. Next Level (level up)
The database becomes more important, loosing it might be an issue...
RTO → hours
RPO → 1 day
Copyright @ 2022 Oracle and/or its affiliates.
11
15. Next Level (level up)
The database becomes more important, loosing it might be an issue...
RTO → hours
RPO → 1 day
RTO: Recovery Time Objective (how long to recover)
RPO: Recovery Point Objective (how much data can be lost)
Copyright @ 2022 Oracle and/or its affiliates.
11
16. Physical Backups
Logical Backups
For logical backups, please use MySQL
Shell Dump & Load Utility !
Backups
Copyright @ 2022 Oracle and/or its affiliates.
12
17. One single MySQL instance with daily backups
Copyright @ 2022 Oracle and/or its affiliates.
hours
1 day
RPO ?
?
RTO
13
18. Next Level (level up)
1 day RPO ? Really ?? We want to reduce it to minutes at least !
Copyright @ 2022 Oracle and/or its affiliates.
14
19. Next Level (level up)
1 day RPO ? Really ?? We want to reduce it to minutes at least !
RTO → hours
Copyright @ 2022 Oracle and/or its affiliates.
14
20. Next Level (level up)
1 day RPO ? Really ?? We want to reduce it to minutes at least !
RTO → hours
RPO → minutes
Copyright @ 2022 Oracle and/or its affiliates.
14
21. These are the defaults in MySQL 8.0:
Durable Binlogs
We enable binary logs allowing to replay the modifications since the last backup:
Copyright @ 2022 Oracle and/or its affiliates.
15
22. One single MySQL instance with daily backups and
binlogs
Copyright @ 2022 Oracle and/or its affiliates.
hours
minutes
RPO ?
?
RTO
16
23. Point-in-Time Recovery (PITR)
PITR is the technique by which an administrator can restore or recover a data set to a
certain point in the past.
With MySQL, point-in-time recovery involves restoring a dump of the data and then
replaying the binlogs from and to a specific point.
This technique is used to:
solve an issue
perform a live migration
Copyright @ 2022 Oracle and/or its affiliates.
17
24. Point-in-Time Recovery : how does it work ?
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
Copyright @ 2022 Oracle and/or its affiliates.
18
25. Point-in-Time Recovery : how does it work ?
day 1
BACKUPS
Binlogs
day 2
we want to recover
up to this point
day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
Copyright @ 2022 Oracle and/or its affiliates.
19
26. Point-in-Time Recovery : how does it work ?
day 1
BACKUPS
Binlogs
day 2
we want to recover
up to this point
day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
1. we restore the dump of day 3
Copyright @ 2022 Oracle and/or its affiliates.
20
27. Point-in-Time Recovery : how does it work ?
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
2
.
w
e
r
e
p
l
a
y
the
binlog
(.008)
1. we restore the du,p of day 3
Copyright @ 2022 Oracle and/or its affiliates.
21
28. Point-in-Time Recovery : important concepts
Usually, after a backup (and its verification), the binary log files are purged from the MySQL
server:
Copyright @ 2022 Oracle and/or its affiliates.
22
29. Point-in-Time Recovery : important concepts
Usually, after a backup (and its verification), the binary log files are purged from the MySQL
server:
Copyright @ 2022 Oracle and/or its affiliates.
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
22
30. Point-in-Time Recovery : important concepts
Usually, after a backup (and its verification), the binary log files are purged from the MySQL
server:
Copyright @ 2022 Oracle and/or its affiliates.
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
day 1
BACKUPS
pontential recovery
points
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005 .006 .007 .008 .009 .010
}
22
31. Next Level (level up)
My data is very important and I've a heavy workload... I would like to loose less than a
second in case of a problem !
Copyright @ 2022 Oracle and/or its affiliates.
23
32. Next Level (level up)
My data is very important and I've a heavy workload... I would like to loose less than a
second in case of a problem !
RTO → hours
Copyright @ 2022 Oracle and/or its affiliates.
23
33. Next Level (level up)
My data is very important and I've a heavy workload... I would like to loose less than a
second in case of a problem !
RTO → hours
RPO → less than a second
Copyright @ 2022 Oracle and/or its affiliates.
23
34. Enable GTIDs (they should be already !)
Save in realtime the binary logs to a
different system (OCI Object Storage, S3,
...)
VCN
10.0.0.0/16
Public Subnet
10.0.0.0/24
Private Subnet
10.0.1.0/24
MySQL Shell
MySQL
Database Service
Internet
Gateway
Oracle Cloud Infrastructure
Availability Domain 1
Fault Domain 1
mysql-dump-bucket
mysql-binlogs-bucket
Object Storage
dump instance
streambinlogs
Improved Point-in-Time Recovery (PITR)
Copyright @ 2022 Oracle and/or its affiliates.
24
38. Saving Binlogs
On another system:
mysqlbinlog --raw --read-from-remote-server --stop-never --host 10.0.0.2
--port 3306 -u getbinlog -ppassword
--ssl-mode='REQUIRED' binlog.xxxxxx
Copyright @ 2022 Oracle and/or its affiliates.
26
39. Point-in-Time Recovery : important conceptes (2)
As you may have noticed, we can only recover at the exact time of the backups and we can
only do a one-off recovery from the last one!
This is why it is recommended to relocate/offload the binlogs (to another server, a NAS, the
cloud, ...).
This will allow for a point-in-time recovery at any moment in time:
Copyright @ 2022 Oracle and/or its affiliates.
27
40. Point-in-Time Recovery : important conceptes (2)
As you may have noticed, we can only recover at the exact time of the backups and we can
only do a one-off recovery from the last one!
This is why it is recommended to relocate/offload the binlogs (to another server, a NAS, the
cloud, ...).
This will allow for a point-in-time recovery at any moment in time:
Copyright @ 2022 Oracle and/or its affiliates.
}
day 1
BACKUPS
Binlogs
day 2 day 3 day 4
.001
.002
.003 .004 .005
.001
.002
.003
.004
.005
.006 .007 .008 .009 .010
.006
.007
.008
.009
.010
b
i
n
l
o
g
s
t
r
e
a
m
i
n
g
possible recovery
points
27
41. One single MySQL instance with daily backups and
external binlogs archiving
Copyright @ 2022 Oracle and/or its affiliates.
hours
< 1 second
RPO ?
?
RTO
28
42. Next Level (level up)
My service is now very important, I would like my database to be available again within
minutes in case of an incident.
Copyright @ 2022 Oracle and/or its affiliates.
29
43. Next Level (level up)
My service is now very important, I would like my database to be available again within
minutes in case of an incident.
RTO → minutes
Copyright @ 2022 Oracle and/or its affiliates.
29
44. Next Level (level up)
My service is now very important, I would like my database to be available again within
minutes in case of an incident.
RTO → minutes
RPO → less than a second
Copyright @ 2022 Oracle and/or its affiliates.
29
45. Based on the well known Asynchronous
Replication
But easier... easier is always better !
Data provisioning included (clone)
2 or more nodes
Manual Failover
Transparent/Automatic query routing
with MySQL Router
MySQL InnoDB ReplicaSet
Copyright @ 2022 Oracle and/or its affiliates.
30
47. MySQL InnoDB ReplicaSet
Connected to the actual server (our single instance):
JS > dba.configureReplicaSetInstance()
JS > rs=dba.createReplicaSet('myreplicaset')
On the new extra server where only MySQL is installed (server and shell):
JS > dba.configureReplicaSetInstance()
And again on the main instance (our single instance):
Et de nouveau sur l'instance
principale:
JS > rs.addInstance('mysql-2')
Copyright @ 2022 Oracle and/or its affiliates.
32
51. MySQL Router
MySQL Router is very easy to configure, you only need to use the bootstrap command !
Copyright @ 2022 Oracle and/or its affiliates.
36
52. MySQL Router
As usual, this is also visible in MySQL Shell
Copyright @ 2022 Oracle and/or its affiliates.
37
53. MySQL InnoDB ReplicaSet - Manual Failover
Copyright @ 2022 Oracle and/or its affiliates.
MySQL Shell is connected to MySQL InnoDB ReplicaSet via MySQL Router.
38
56. Next Level (level up)
Now my service is very important, I would like to be almost always up (automatic failover)
and never loose data !
Copyright @ 2022 Oracle and/or its affiliates.
41
57. Next Level (level up)
Now my service is very important, I would like to be almost always up (automatic failover)
and never loose data !
RTO → seconds
Copyright @ 2022 Oracle and/or its affiliates.
41
58. Next Level (level up)
Now my service is very important, I would like to be almost always up (automatic failover)
and never loose data !
RTO → seconds
RPO → 0
Copyright @ 2022 Oracle and/or its affiliates.
41
59. Based on native Group Replication
But easier.... easier is always better !
Data provisioning included (clone)
3 or more nodes (odd number)
Automatic Failover
Uses MySQL Router
Configurable Consistency Levels
MySQL InnoDB Cluster
Copyright @ 2022 Oracle and/or its affiliates.
42
61. On the ReplicaSet's Primary Instance:
JS > dba.dropMetadataSchema()
JS > cluster=dba.createCluster('mycluster')
On the Secondary one:
SQL > STOP REPLICA;
SQL > RESET ALL REPLICA;
And back on the Primary:
JS > cluster.addInstance('mysql-2')
MySQL InnoDB Cluster
We can now add a third instance to benefit
from the automatic failover:
Copyright @ 2022 Oracle and/or its affiliates.
44
62. On the ReplicaSet's Primary Instance:
JS > dba.dropMetadataSchema()
JS > cluster=dba.createCluster('mycluster')
On the Secondary one:
SQL > STOP REPLICA;
SQL > RESET ALL REPLICA;
And back on the Primary:
JS > cluster.addInstance('mysql-2')
JS > dba.configureInstance()
From any member of the cluster:
JS > cluster=dba.getCluster()
JS > cluster.addInstance('mysql-3')
Finally, we can configure MySQL Router
again:
# mysqlrouter --bootstrap
clusteradmin@single-mysql:3306
--conf-use-gr-notifications
--user mysqlrouter --force
# systemctl restart mysqlrouter
MySQL InnoDB Cluster
We can now add a third instance to benefit
from the automatic failover:
Copyright @ 2022 Oracle and/or its affiliates.
44
65. Next Level (level up)
And if something happens to our data center ??
Copyright @ 2022 Oracle and/or its affiliates.
47
66. Next Level (level up)
And if something happens to our data center ??
How can we deploy a Disaster Recovery solution ?
Copyright @ 2022 Oracle and/or its affiliates.
47
67. Next Level (level up)
And if something happens to our data center ??
How can we deploy a Disaster Recovery solution ?
Copyright @ 2022 Oracle and/or its affiliates.
MySQL InnoDB ClusterSet !!
47
68. The Ultimate Evolution !
available since MySQL 8.0.27
fencing support since 8.0.28
MySQL InnoDB ClusterSet
Copyright @ 2022 Oracle and/or its affiliates.
48
69. The result of several transformations during previous releases:
8.0.22: Automatic Connection Failover (Async Replication Channels)
8.0.23: Automatic Connection Failover (Async Replication Channels using Group
Replication)
8.0.24: transformation of skip-replica-start en global, persistent and read-only
variable
8.0.26: Actions added for Group Replication's members (ex: super_read_only
configurable)
8.0.26: Specific UUID added for structural events change of the Group
(View_change_log_event)
8.0.27: Asynchronous Replication Channel automatically follows the Primary.
Copyright @ 2022 Oracle and/or its affiliates.
49
74. Extra
Since MySQL 8.0.19, the connectors also support dns-srv which, together with a discovery
service such as Consul, can replace MySQL Router when it is impossible to install it on the
application servers:
Copyright @ 2022 Oracle and/or its affiliates.
52
75. Extra
Since MySQL 8.0.19, the connectors also support dns-srv which, together with a discovery
service such as Consul, can replace MySQL Router when it is impossible to install it on the
application servers:
Copyright @ 2022 Oracle and/or its affiliates.
52
76. MySQL Shell is now included in Visual Studio Code:
Copyright @ 2022 Oracle and/or its affiliates.
53
78. Try MySQL HeatWave for Free:
https://www.oracle.com/mysql/heatwave/
Copyright @ 2022 Oracle and/or its affiliates.
55
79. Share your ❤️to MySQL
#mysql
Join our slack channel!
bit.ly/mysql-slack
Copyright @ 2022 Oracle and/or its affiliates.
56