Skip to main content

MySQL multi thread master slave replication

MySQL multi thread master slave replication:

In Multi-thread slave replication transactions are split per MTS thread (multiple sql threads processing events from the relay log) based on the database/schema. If you have one schema there will be no benefit as there is nothing or little to split between worker threads. Multi-thread replication helps environments with lots of databases, each database is writing heavily and the writes can be split between worker threads. Order of updates on a database are the same as they are on the master.
For cross-database transactions, the slave waits until all preceding transactions that are working on the same database set are over.

Enable Multi-thread Master slave replication:
01. Set following parameters on Slave in /etc/my.cnf file:
master-info-repository = TABLE
slave-parallel-workers = 2
relay-log-info-repository = TABLE
02. Check exisiting parameter value
mysql> show global variables like "%repository%";
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| master_info_repository | TABLE |
| relay_log_info_repository | TABLE |
+---------------------------+-------+
03. Set slave paraller workers.
mysql> set global slave_parallel_workers=4;
mysql> stop slave;
mysql> start slave;
mysql> show slave status \G;

Preserver Master commit order on slave require following parameters:
01. Enable slave_perserver_commit_order on slave ensures the order which transactions were committed on the master is preserved on the slave.
mysql>  set global slave_perserver_commit_order=ON;
02. Make sure binlog_order_commits is ON.
mysql> show variables like '%binlog_order%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| binlog_order_commits | ON    |
+----------------------+-------+
03. Enable slave paraller workers
mysql> set global slave_parallel_workers=4;
mysql> stop slave;
mysql> start slave;
mysql> show slave status \G;

Ref. https://mysqlhighavailability.com/preserve-masters-commit-order-on-slave/






Comments

  1. MySQL multi-threaded master-slave replication significantly improves performance by allowing concurrent processing of multiple replication threads. Explore the benefits and implementation strategies to optimize your database setup with hostingmella!

    ReplyDelete

Post a Comment

Popular posts from this blog

MySQL InnoDB cluster troubleshooting | commands

Cluster Validation: select * from performance_schema.replication_group_members; All members should be online. select instance_name, mysql_server_uuid, addresses from  mysql_innodb_cluster_metadata.instances; All instances should return same value for mysql_server_uuid SELECT @@GTID_EXECUTED; All nodes should return same value Frequently use commands: mysql> SET SQL_LOG_BIN = 0;  mysql> stop group_replication; mysql> set global super_read_only=0; mysql> drop database mysql_innodb_cluster_metadata; mysql> RESET MASTER; mysql> RESET SLAVE ALL; JS > var cluster = dba.getCluster() JS > var cluster = dba.getCluster("<Cluster_name>") JS > var cluster = dba.createCluster('name') JS > cluster.removeInstance('root@<IP_Address>:<Port_No>',{force: true}) JS > cluster.addInstance('root@<IP add>,:<port>') JS > cluster.addInstance('root@ <IP add>,:<port> ') JS > dba.getC...

InnoDB cluster Remove Instance Force | Add InnoDB instance

InnoDB cluster environment UUID is different on node: To fix it stop group replication, remove instance (use force if require), add instance back Identify the node which is not in sync: Execute following SQL statement on each node and identify the node has different UUID on all nodes. mysql> select * from mysql_innodb_cluster_metadata.instances; Stop group replication: Stop group replication on the node which does not have same UUID on all nodes. mysql > stop GROUP_REPLICATION; Remove instances from cluster: Remove all secondary node from the cluster and add them back if require. $mysqlsh JS >\c root@<IP_Address>:<Port_No> JS > dba.getCluster().status() JS > dba.getCluster () <Cluster:cluster_name> JS > var cluster = dba.getCluster("cluster_name"); JS >  cluster.removeInstance('root@<IP_Address>:<Port_No>'); If you get "Cluster.removeInstance: Timeout reached waiting......" JS > cluster.removeInstance(...

Oracle E-Business Suite Online Patch Phases executing adop

Following description about Oracle E-Business Suite is high level and from documentation https://docs.oracle.com/cd/E26401_01/doc.122/e22954/T202991T531062.htm#5281339 for in depth and detail description refer it. The online patching cycle phases: Prepare Apply Finalize Cutover Cleanup Prepare phase: Start a new online patching cycle, Prepares the environment for patching. $ adop phase=prepare Apply phase: Applies the specified patches to the environment. Apply one or more patches to the patch edition. $ adop phase=apply patches=123456,789101 workers=8 Finalize phase: Performs any final steps required to make the system ready for cutover. Perform the final patching operations that can be executed while the application is still online. $ adop phase=finalize Cutover phase: Shuts down application tier services, makes the patch edition the new run edition, and then restarts application tier services. This is the only phase that involves a brief ...