It seems to be a popular misconception that mk-slave-prefetch is
designed to keep a MySQL replica server “warm” and ready to serve
production traffic in case the master is demoted or fails.
This is not what mk-slave-prefetch does. It’s
related, and easy to confuse, but its purpose is different.
The mk-slave-prefetch tool is designed to try to execute a
read-only approximation of the write workload that the replica is
about to have to perform. It is meant to do this just a little
bit before the replication thread (which can only be true if
replication is lagging), so that when the replica replays writes
to execute replication, it doesn’t have to wait for disk I/O.
Keeping caches warmed up for production traffic requires that the
read workload, which does not flow through relay logs,
is executed on the server. If you point mk-slave-prefetch at a
server, you’re just double-executing the write …
[Read more]