When a master server shuts down and restarts, its
MEMORY
(HEAP) 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. For example,
INSERT INTO ...
SELECT FROM
may 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.
The size of MEMORY tables is
limited by the value of the
max_heap_table_size system
variable, which is not replicated (see
Section 16.4.1.28, “Replication and Variables”). A change in
max_heap_table_size takes effect for
MEMORY tables that are created or updated
using ALTER TABLE
... ENGINE = MEMORY or TRUNCATE
TABLE following the change, or for all
MEMORY tables following a server
restart. If you increase the value of this variable on the
master without doing so on the slave, it becomes possible for a
table on the master to grow larger than its counterpart on the
slave, leading to inserts that succeed on the master but fail on
the slave with Table is full errors. This
is a known issue (Bug #48666). In such cases, you must set the
global value of
max_heap_table_size on the
slave as well as on the master, then restart replication. It is
also recommended that you restart both the master and slave
MySQL servers, to insure that the new value takes complete
(global) effect on each of them.
See Section 14.4, “The MEMORY (HEAP) Storage Engine”, for more
information about MEMORY tables.