Replication is asynchronous by default. The master is not aware of whether the writes have reached the slaves or not. If there is a delay between master and slave, and if the master crashes, you will lose the data that has not reached the slave. To overcome this situation, you can use semi-synchronous replication.
In semi-synchronous replication, the master waits until at least one slave has received the writes. By default, the value of rpl_semi_sync_master_wait_point
is AFTER_SYNC
; this means that the master syncs the transaction to the binary log, which is consumed by the slave.
After that, the slave sends an acknowledgement to the master, then the master commits the transaction and returns the result to the client. So, it is enough if the writes have reached the relay log; the slave need not commit the transaction. You can change this behavior by changing the variable rpl_semi_sync_master_wait_point
to AFTER_COMMIT
. In this, the master commits the...