MySQL Replication  /  Replication Solutions  /  Handling an Unexpected Halt of a Replication Slave

3.2 Handling an Unexpected Halt of a Replication Slave

In order for replication to be resilient to unexpected halts of the server (sometimes described as crash-safe) it must be possible for the slave to recover its state before halting. This section describes the impact of an unexpected halt of a slave during replication and how to configure a slave for the best chance of recovery to continue replication.

After an unexpected halt of a replication slave, upon restart the slave's SQL thread must recover which transactions have been executed already. The information required for recovery is stored in the slave's relay log info log. In older MySQL Server versions, this log could only be created as a file in the data directory that was updated after the transaction had been applied. This held the risk of losing synchrony with the master depending at which stage of processing a transaction the slave halted at, or even corruption of the file itself. In MySQL 5.7 you can instead use an InnoDB table to store the relay log info log. By using this transactional storage engine the information is always recoverable upon restart. As a table, updates to the relay log info log are committed together with the transactions, meaning that the slave's progress information recorded in that log is always consistent with what has been applied to the database, even in the event of an unexpected server halt.

To configure MySQL 5.7 to store the relay log info log as an InnoDB table, set the system variable relay_log_info_repository to TABLE. The server then stores information required for the recovery of the slave's SQL thread in the mysql.slave_relay_log_info table. For further information on the slave logs, see Section 5.4, “Replication Relay and Status Logs”.

Exactly how a replication slave recovers from an unexpected halt is influenced by the chosen method of replication, whether the slave is single-threaded or multithreaded, the setting of variables such as relay_log_recovery, and whether features such as MASTER_AUTO_POSITION are being used.

The following table shows the impact of these different factors on how a single-threaded slave recovers from an unexpected halt.

Table 3.1 Factors Influencing Single-threaded Replication Slave Recovery

GTID

MASTER_AUTO_POSITION

relay_log_recovery

relay_log_info_repository

Crash type

Recovery guaranteed

Relay log impact

OFF

Any

1

TABLE

Server

Yes

Lost

OFF

Any

1

Any

OS

No

Lost

OFF

Any

0

TABLE

Server

Yes

Remains

OFF

Any

0

TABLE

OS

No

Remains

ON

ON

Any

Any

Any

Yes

Lost

ON

OFF

0

TABLE

Server

Yes

Remains

ON

OFF

0

Any

OS

No

Remains


As the table shows, when using a single-threaded slave the following configurations are most resilient to unexpected halts:

  • When using GTIDs and MASTER_AUTO_POSITION, set relay_log_recovery=1. With this configuration the setting of relay_log_info_repository and other variables does not impact on recovery. Note that to guarantee recovery, sync_binlog=1 (which is the default) must also be set on the slave, so that the slave's binary log is synchronized to disk at each write. Otherwise, committed transactions might not be present in the slave's binary log.

  • When using file position based replication, set relay_log_recovery=1 and relay_log_info_repository=TABLE.

    Note

    During recovery the relay log is lost.

The following table shows the impact of these different factors on how a multithreaded slave recovers from an unexpected halt.

Table 3.2 Factors Influencing Multithreaded Replication Slave Recovery

GTID

sync_relay_log

MASTER_AUTO_POSITION

relay_log_recovery

relay_log_info_repository

Crash type

Recovery guaranteed

Relay log impact

OFF

1

Any

1

TABLE

Any

Yes

Lost

OFF

>1

Any

1

TABLE

Server

Yes

Lost

OFF

>1

Any

1

Any

OS

No

Lost

OFF

1

Any

0

TABLE

Server

Yes

Remains

OFF

1

Any

0

TABLE

OS

No

Remains

ON

Any

ON

Any

Any

Any

Yes

Lost

ON

1

OFF

0

TABLE

Server

Yes

Remains

ON

1

OFF

0

Any

OS

No

Remains


As the table shows, when using a multithreaded slave the following configurations are most resilient to unexpected halts:

It is important to note the impact of sync_relay_log=1, which requires a write of to the relay log per transaction. Although this setting is the most resilient to an unexpected halt, with at most one unwritten transaction being lost, it also has the potential to greatly increase the load on storage. Without sync_relay_log=1, the effect of an unexpected halt depends on how the relay log is handled by the operating system. Also note that when relay_log_recovery=0, the next time the slave is started after an unexpected halt the relay log is processed as part of recovery. After this process completes, the relay log is deleted.

An unexpected halt of a multithreaded replication slave using the recommended file position based replication configuration above may result in a relay log with transaction inconsistencies (gaps in the sequence of transactions) caused by the unexpected halt. See Section 4.1.33, “Replication and Transaction Inconsistencies”. In MySQL 5.7.13 and later, if the relay log recovery process encounters such transaction inconsistencies they are filled and the recovery process continues automatically. In MySQL versions prior to MySQL 5.7.13, this process was not automatic and required starting the server with relay_log_recovery=0, starting the slave with START SLAVE UNTIL SQL_AFTER_MTS_GAPS to fix any transaction inconsistencies, and then restarting the slave with relay_log_recovery=1.

When you are using multi-source replication and relay_log_recovery=1, after restarting due to an unexpected halt all replication channels go through the relay log recovery process. Any inconsistencies found in the relay log due to an unexpected halt of a multithreaded slave are filled.


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.