如何使用备份恢复集群的从服务器

MySQL Cluster 提供了所谓的地理复制,即集群在两个数据中心运行的情况:一个作为 Master,另一个作为 Slave。
这允许我们使用 MySQL Cluster 的在线备份功能进行备份。
通常,当slave服务器不同步时,我们只需使用主站的新快照将其重置为新的从服务器。
但是,作为替代方案,我们可以使用 Slave 的备份。
这可能被证明是重新安装从站的更快方法,因为它不需要通过网络检索数据并因此耗尽资源。

https://onitroad.com 更多教程

步骤

从 MySQL Cluster 6.3.23 开始,使用备份恢复 Slave 更容易。
它仍然被认为是实验性的,因为一些切换到 ndb_restore 可能会改变(例如 -f 或者 -dont_ignore_systab_0 )。
因此,使用 Master 的直接备份仍然被认为是最佳实践。
但是,在继续使用此解决方案之前,请记住,要使其正常工作,主端应仍可使用二进制日志。

  1. 首先,重置从站,以便我们在 mysql 客户端使用 RESET SLAVE 语句有一个干净的开始。
    作为另外的预防措施,最好使用 -skip-slave-start 选项集重新启动 Slave SQL 节点,这样复制就不会自动启动。

  2. 接下来,像往常一样使用ndb_restore工具恢复Slave的备份。
    恢复元信息和数据时无需使用 -e(或者 -restore_epoch )选项。
    MySQL Cluster 6.3.23 附带的 ndb_restore 版本有一些新开关,允许我们包含或者排除数据库或者表。
    这是我们将用于恢复 mysql.ndb_apply_status 表的内容。
    我们还将使用新的实验性开关 -dont-ignore_systab_0 来恢复数据。
    例如,在最初重新启动它们后,在 2 个数据节点上恢复 ID 为 1 的备份:

ndb_restore -n 3 -b 1 -r /path/to/BACKUP-1 -f --include-table='mysql.ndb_apply_status'
ndb_restore -n 4 -b 1 -r /path/to/BACKUP-1 -f --include-table='mysql.ndb_apply_status'

我们不必使用 -m 或者 -restore_meta 选项,因为该表应该已经存在了。

3.下一步是连接到从属SQL节点并在从属上执行以下操作:

SELECT * FROM mysql.ndb_apply_status;
+-----------+-----------------+-------------------+-----------+---------+
| server_id | epoch           | log_name          | start_pos | end_pos |
+-----------+-----------------+-------------------+-----------+---------+
|         1 | 217458489163782 | master-bin.000001 |    305572 |  305976 |
+-----------+-----------------+-------------------+-----------+---------+

当然,服务器的值会有所不同。

  1. 取你的Master的server_id(本例中为1)旁边的epoch值,并在下面的SQL语句中使用它,你需要在Master上执行:
SELECT SUBSTRING_INDEX(File, '/', -1) AS Master_Log_File , Position AS Master_Log_Pos
FROM mysql.ndb_binlog_index WHERE epoch > 217458489163782
ORDER BY epoch ASC LIMIT 1;
+-------------------+----------------+
| Master_Log_File   | Master_Log_Pos |
+-------------------+----------------+
| master-bin.000001 |         305976 |
+-------------------+----------------+
  1. 回到从站,我们必须使用来自主站的信息更改主站信息。
    我们必须提供更多选项,例如主机、用户和密码。
CHANGE MASTER TO MASTER_LOG_FILE="master-bin.00001",MASTER_LOG_POS=305976;
  1. 现在我们已准备好启动 Slave。
    在 Slave 上使用 START SLAVE 语句。
    它应该开始同步。
    我们可以按照此从 Slave 输入以下 SQL 语句几次,直到我们对一切顺利进行感到满意为止:
SHOW SLAVE STATUS \G

如果我们使用 mysql 客户端发出此语句,则可以使用 \G 语句终止符而不是分号来获得更易读的垂直布局。

日期:2020-09-17 00:11:43 来源:oir作者:oir