Rechercher dans le manuel MySQL
17.4.1.21 Replication and MEMORY Tables
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 be emptied by writing a
DELETE
statement for that table
to the binary log. This generated event is identifiable by a
comment in the binary log, and if GTIDs are in use on the
server, it has a GTID assigned.
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 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.
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.
(The method just described is not applicable in NDB Cluster,
where slave_exec_mode
is always
IDEMPOTENT
, and cannot be changed.)
The size of MEMORY
tables is
limited by the value of the
max_heap_table_size
system
variable, which is not replicated (see
Section 17.4.1.38, “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 16.3, “The MEMORY Storage Engine”, for more
information about MEMORY
tables.
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 26/06/2006 gemaakt, de laatste keer de 26/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/mysql-rf-replication-features-memory.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.
Referenties
Deze verwijzingen en links verwijzen naar documenten die geraadpleegd zijn tijdens het schrijven van deze pagina, of die aanvullende informatie kunnen geven, maar de auteurs van deze bronnen kunnen niet verantwoordelijk worden gehouden voor de inhoud van deze pagina.
De auteur Deze site is als enige verantwoordelijk voor de manier waarop de verschillende concepten, en de vrijheden die met de referentiewerken worden genomen, hier worden gepresenteerd. Vergeet niet dat u meerdere broninformatie moet doorgeven om het risico op fouten te verkleinen.