Replicating your MySQL databases makes moving a database from one server to another easy. There are many types of replication methods that MySQl supports, including master-master, master-slave, and group replication.
In this guide, we'll explore the different types of replication and the prerequisites to the process.
The first replication method ever offered for MySQL databases, master-slave replication requires a single master server to accept read requests and write requests along with at least one read-only server, which is dubbed the slave.
Data is asynchronously replicated from the master server to the slave server(s).
The advantages of master-slave replication start with speed, as this method doesn't have any restrictions on server performance. You can also split read and write requests to multiple servers, further improving performance.
However, there are cons--like the fact that it's not highly reliable due to asynchronous replication.
A committed master transaction may not be available for a slave to complete if the master node fails.
Moreover, write requests are difficult to scale, as doing so requires you to increase RAM and CPU for the master node. Lastly, the failover process is largely a manual one.
Master-master replication evolved from the master-slave process and works to solve the biggest issues presented by the latter.
To use this replication method, it's assumed you have at least two master nodes capable of accepting read requests and write requests.
Replication amongst master nodes is asynchronous.
The biggest pros of master-master replication include the option to scale write requests by adding more master nodes or by scaling the computing capacity of a given master node.
Failover is also semi-automatic since you're working with multiple master nodes, as the chance of all master nodes failing is slim.
The most major downsides to master-master replication is that you can lose some transactions if a master node fails due to the asynchronous replication process.
This also means you can't be sure that your backups contain the same data across all master nodes.
Additionally, failover isn't fully automated, as there is a chance you may need to promote a slave node to a master.
If you're using a MySQL Server plugin, you can make use of the group replication feature, which is a whole new method based around the architecture of distributed state machines.
With group replication, you're able to create a fault-tolerant system that adds redundancy, guaranteeing that even if a minority of the servers fail, the cluster remains available.
Group replication also gives you built-in resolution for recovery and conflict. Some of the other advantages include automatic failover since the group will elect a new master if the assigned master fails.
You can also endlessly scale read and write requests with the addition of new master and slave nodes. Plus, there are no major limitations on performance.
The downsides of group replication mainly come down to two things.
First, you can only have nine nodes in a group. Second, group replication is only available for MySQL, so forks like Percona and MariaDB cannot utilize it.
Aside from choosing the right replication method for your environment and goals, it's also important to follow the best practices of MySQL replication to ensure that you get the results you're expecting.
Here's an overview of those best practices;
Avoid Large Updates During Replication
Housekeeping batch jobs can easily stall your replications if you aren't careful.
Since jobs create a lot of database activity, typically generating many write requests to the database, the replication stream's activity will also increase.
The impact is not only found in statement-based replication, but also for row-based replication.
Avoid this issue with the use of parallel replication, which can speed up the replication stream if you're dealing with a lot of write requests.
This option is available in both MySQL and MariaDB.
Memory tables are not persistent, meaning the table structure will remain, but the data will disappear when MySQL is re-started.
You can create a memory table on a master and slave node, but as soon as one gets re-started, the table will empty and you will begin to get replication errors.
Row-based replication breaks with memory tables when the slave node gets different results.
Statement-based replication breaks with memory tables when it tries to insert data that's already there.
To fix, make a copy of your data and switch to InnoDB, and now you can avoid the replication errors.
If you're ever in doubt about how to proceed with MySQL replication or any other aspect of your database management, it's important to consult with an expert.
Not only will their input help you avoid costly mistakes, but they can also get you out of the trial-and-error phase, avoiding common pitfalls along the way so that you can get the results you're after.
Learn other MySQL performance tips here.
Consider reaching out Adservio for assistance, with our expertise and professionalism you will get the needed help.