When a master server shuts down and restarts, its
MEMORY tables become empty. To
replicate this effect to slaves, the first time that the master
uses a given MEMORY table after
startup, it logs an event that notifies slaves that the table
must to be emptied by writing a
DELETE statement for that table
to the binary log.
When a slave server shuts down and restarts, its
MEMORY tables become empty. This
causes the slave to be out of synchrony with the master and may
lead to other failures or cause the slave to stop:
Row-format updates and deletes received from the master may fail with
Can't find record in '.memory_table'Statements such as
INSERT INTO ... SELECT FROMmay insert a different set of rows on the master and slave.memory_table
The safe way to restart a slave that is replicating
MEMORY tables is to first drop or
delete all rows from the MEMORY
tables on the master and wait until those changes have
replicated to the slave. Then it is safe to restart the slave.
An alternative restart method may apply in some cases. When
binlog_format=ROW, you can
prevent the slave from stopping if you set
slave_exec_mode=IDEMPOTENT
before you start the slave again. This allows the slave to
continue to replicate, but its
MEMORY tables will still be
different from those on the master. This can be okay if the
application logic is such that the contents of
MEMORY tables can be safely lost
(for example, if the MEMORY tables
are used for caching).
slave_exec_mode=IDEMPOTENT
applies globally to all tables, so it may hide other replication
errors in non-MEMORY tables.
See Section 13.9, “The MEMORY Storage Engine”, for more
information about MEMORY tables.