Point-in-time recovery — that is,
recovery of data changes made since a given point in time
— is performed after restoring a full backup that returns
the server to its state when the backup was made. Performing
point-in-time recovery of MySQL Cluster tables with MySQL
Cluster and MySQL Cluster Replication can be accomplished using
a native NDB
data backup (taken by
issuing CREATE BACKUP
in the
ndb_mgm client) and restoring the
ndb_binlog_index
table (from a dump made
using mysqldump).
To perform point-in-time recovery of MySQL Cluster, it is necessary to follow the steps shown here:
Back up all NDB
databases in the cluster,
using the START BACKUP
command in the
ndb_mgm client (see
Section 5.3, “Online Backup of MySQL Cluster”).
At some later point, prior to restoring the cluster, make a
backup of the mysql.ndb_binlog_index
table. It is probably simplest to use
mysqldump for this task. Also back up the
binary log files at this time.
This backup should be updated regularly — perhaps even hourly — depending on your needs.
(Catastrophic failure or error occurs.)
Locate the last known good backup.
Clear the data node filesystems (using
ndbd
--initial
or, in MySQL Cluster
NDB 7.0 and later, ndbmtd
--initial
).
MySQL Cluster Disk Data tablespace and log files are not
removed by --initial
. You
must delete these manually.
Use DROP TABLE
or
TRUNCATE TABLE
with the
mysql.ndb_binlog_index
table.
Execute ndb_restore, restoring all data.
You must include the
--restore_epoch
option
when you run ndb_restore, so that the
ndb_apply_status
table is populated
correctly. (See
Section 4.17, “ndb_restore — Restore a MySQL Cluster Backup”, for
more information.)
Restore the ndb_binlog_index
table from
the output of mysqldump and restore the
binary log files from backup, if necessary.
Find the epoch applied most recently — that is, the
maximum epoch
column value in the
ndb_apply_status
table — as the
user variable @LATEST_EPOCH
(emphasized):
SELECT @LAST_EPOCH:=MAX(epoch)
FROM mysql.ndb_apply_status;
Find the latest binary log file
(@FIRST_FILE
) and position
(Position
column value) within this file
that correspond to @LATEST_EPOCH
in the
ndb_binlog_index
table:
SELECT Position, @FIRST_FILE:=File FROM mysql.ndb_binlog_index WHERE epoch > @LAST_EPOCH ORDER BY epoch ASC LIMIT 1;
Using mysqlbinlog, replay the binary log events from the given file and position up to the point of the failure. (See mysqlbinlog.)
See also Point-in-Time (Incremental) Recovery Using the Binary Log, for more information about the binary log, replication, and incremental recovery.