Successfully reported this slideshow.
Your SlideShare is downloading. ×

LinuxFest Northwest 2022 - The Evolution of a MySQL Database System

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 80 Ad

LinuxFest Northwest 2022 - The Evolution of a MySQL Database System

Download to read offline

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.

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.

Advertisement
Advertisement

More Related Content

Similar to LinuxFest Northwest 2022 - The Evolution of a MySQL Database System (20)

More from Frederic Descamps (20)

Advertisement

Recently uploaded (20)

LinuxFest Northwest 2022 - The Evolution of a MySQL Database System

  1. 1. Frédéric Descamps Community Manager MySQL The Evolution of a MySQL Database System from single instance to mutli-region DR
  2. 2. Frédéric Descamps Community Manager MySQL The Evolution of a MySQL Database System from single instance to mutli-region DR
  3. 3. The Journey To MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. 2
  4. 4. Who am I ? about.me/lefred Copyright @ 2022 Oracle and/or its affiliates. 3
  5. 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. 6. Best Practices in 2022 configuration parameters Copyright @ 2022 Oracle and/or its affiliates. 5
  7. 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. 8. Evolution to High Availability MySQL 8.0 Copyright @ 2022 Oracle and/or its affiliates. 7
  9. 9. Copyright @ 2022 Oracle and/or its affiliates. 8
  10. 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. 11. One single MySQL instance Copyright @ 2022 Oracle and/or its affiliates. / / RPO ? ? RTO 10
  12. 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. 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. 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. 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. 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. 17. One single MySQL instance with daily backups Copyright @ 2022 Oracle and/or its affiliates. hours 1 day RPO ? ? RTO 13
  18. 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. 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. 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. 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. 22. One single MySQL instance with daily backups and binlogs Copyright @ 2022 Oracle and/or its affiliates. hours minutes RPO ? ? RTO 16
  23. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  35. 35. with MySQL restart Enabling GTIDs Copyright @ 2022 Oracle and/or its affiliates. 25
  36. 36. with MySQL restart without MySQL restart Enabling GTIDs Copyright @ 2022 Oracle and/or its affiliates. 25
  37. 37. Saving Binlogs   Copyright @ 2022 Oracle and/or its affiliates. 26
  38. 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. 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. 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. 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. 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. 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. 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. 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
  46. 46. MySQL InnoDB ReplicaSet Copyright @ 2022 Oracle and/or its affiliates. 31
  47. 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
  48. 48. MySQL InnoDB ReplicaSet - examples Copyright @ 2022 Oracle and/or its affiliates. 33
  49. 49. MySQL InnoDB ReplicaSet - examples Copyright @ 2022 Oracle and/or its affiliates. 34
  50. 50. MySQL InnoDB ReplicaSet - examples Copyright @ 2022 Oracle and/or its affiliates. 35
  51. 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. 52. MySQL Router As usual, this is also visible in MySQL Shell Copyright @ 2022 Oracle and/or its affiliates. 37
  53. 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
  54. 54. MySQL InnoDB ReplicaSet - Manual Failover Copyright @ 2022 Oracle and/or its affiliates. 39
  55. 55. MySQL RelicaSet Copyright @ 2022 Oracle and/or its affiliates. minutes < 1 second RPO ? ? RTO rto > 40
  56. 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. 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. 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. 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
  60. 60. MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. 43
  61. 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. 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
  63. 63. MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. 45
  64. 64. MySQL InnoDB Cluster Copyright @ 2022 Oracle and/or its affiliates. seconds 0 RPO ? ? RTO rto > 46
  65. 65. Next Level (level up) And if something happens to our data center ?? Copyright @ 2022 Oracle and/or its affiliates. 47
  66. 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. 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. 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. 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
  70. 70. MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. 50
  71. 71. MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. More complex architectures can be deployed ! 50
  72. 72. MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. More complex architectures can be deployed ! 50
  73. 73. MySQL InnoDB ClusterSet Copyright @ 2022 Oracle and/or its affiliates. seconds 0 RPO ? ? RTO possible rpo>0 rto > 51
  74. 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. 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. 76. MySQL Shell is now included in Visual Studio Code: Copyright @ 2022 Oracle and/or its affiliates. 53
  77. 77. Copyright @ 2022 Oracle and/or its affiliates. 54
  78. 78. Try MySQL HeatWave for Free: https://www.oracle.com/mysql/heatwave/ Copyright @ 2022 Oracle and/or its affiliates. 55
  79. 79. Share your ❤️to MySQL #mysql Join our slack channel! bit.ly/mysql-slack Copyright @ 2022 Oracle and/or its affiliates. 56
  80. 80. Questions ? Copyright @ 2022 Oracle and/or its affiliates. 57

×