备份为备份时在线的每个数据节点创建了一组文件。
这些文件位于 BACKUP/BACKUP-[backup-id] 目录中 BackupDataDir 选项指定的目录下,其中 [backup-id] 是备份的备份 ID。
BackupDataDir 默认为 FileSystemPath 的值,后者又默认为 DataDir。
例如,如果 BackupDataDir 设置为 /var/lib/cluster-data,则 backup-id = 1 的备份将位于 /var/lib/cluster-data/BACKUP/BACKUP-1/。
在本文的其余部分,假设备份 id = 1 的备份已恢复,并且备份的位置是 /var/lib/cluster-data/BACKUP/BACKUP-1/。
此外,对于此恢复示例,将假设在创建备份和恢复备份的集群上都有四个数据节点,并且数据节点的 NodeId 为 1. 2. 3 和 4;请调整以反映系统。
最后将 -ndb_connectstring=... 中的 ... 替换为管理节点的正确连接字符串。
考虑到现有备份的这个位置,恢复备份的步骤是:
如有必要,将备份复制到我们需要将备份恢复到的集群。
确保 NDBCluster 表都为空或者不存在。
如果表不存在,则恢复它们。
有两种选择:
- 使用 mysqldump -no-data 备份。如果集群配置在数据节点和/或者 LCP 线程的数量方面发生了变化,我们应该使用此方法,因为它将确保为新配置设置分区数量。
使用 ndb_restore 恢复。
这应该只对一个节点进行,并且必须在继续之前完成:
shell$ ndb_restore --ndb_connectstring=... --nodeid=1 --restore_meta --backupid=1 --backup_path=/var/lib/cluster-data/BACKUP/BACKUP-1 --disable-indexes 4. Restore the data - each of these can be executed in parallel provided the cluster can keep up with the load: NodeId = 1: shell$ ndb_restore --ndb_connectstring=... --nodeid=1 --backupid=1 --restore_data --backup_path=/var/lib/cluster-data/BACKUP/BACKUP-1 --disable-indexes
节点 ID = 2:
shell$ ndb_restore --ndb_connectstring=... --nodeid=2 --backupid=1 --restore_data --backup_path=/var/lib/cluster-data/BACKUP/BACKUP-1 --disable-indexes
节点 ID = 3:
shell$ ndb_restore --ndb_connectstring=... --nodeid=3 --backupid=1 --restore_data --backup_path=/var/lib/cluster-data/BACKUP/BACKUP-1 --disable-indexes
节点 ID = 4:
shell$ ndb_restore --ndb_connectstring=... --nodeid=4 --backupid=1 --restore_data --backup_path=/var/lib/cluster-data/BACKUP/BACKUP-1 --disable-indexes
如果我们正在设置复制从站或者需要执行时间点恢复,则必须为其中一个恢复添加 --restore_epoch。
- 重建索引。
这些被上面的 --disable-indexes 选项禁用。
重新创建索引可避免由于恢复在所有点上不一致而导致的错误。
此外,通过一些配置重建索引可以提高恢复性能。
要重建索引,只需在一个节点上执行:
shell$ ndb_restore --ndb_connectstring=... --nodeid=1 --backupid=1 --backup_path=/var/lib/cluster-data/BACKUP/BACKUP-1 --rebuild-indexes
在此之后,NDBCluster 表就可以使用了。
日期:2020-09-17 00:11:44 来源:oir作者:oir