如何为 MySQL 集群备份生成唯一 ID

每个在线 MySQL Cluster 备份都会收到一个唯一的标识号。
这是为了确保备份目录中有活动历史记录。
但是,这可能会导致问题。
例如,如果系统重新启动,此 ID 计数器将重置并从数字 1 重新开始,如果我们不移动较早的备份,则会导致问题。
这篇文章将讨论如何生成唯一的备份 ID。

最好的方法是在每次在线备份操作后将创建的备份目录移动到另一个位置(例如文件服务器)。
这将确保数据节点本身上的重复备份 ID 永远不会出现问题。
此外,我们可以生成自己的备份 ID,并使用 ndb_mgm 客户端工具将它们传递给 START BACKUP 语句。
从 MySQL Cluster 版本 6.2.17、6.3.23 和 7.0.3 开始,此 ID 的上限为 4294967296 (232)。
早期版本最多只支持 2147483648 (231)。

如何生成我们自己的备份 ID 的一个示例是使用 Unix 或者 POSIX 时间。
这样做的好处是它已经是一个 32 位的数字,每次运行 START BACKUP 时都会是当前时间,除非你篡改系统时钟,否则这是唯一的。
我们可以从命令行输入如下内容:

$ TS=$(date +%s) && ndb_mgm -e "START BACKUP ${TS}"
Connected to Management Server at: localhost:1186
Waiting for completed, this may take several minutes
Node 1: Backup 1455575258 started from node 49
Node 1: Backup 1455575258 started from node 49 completed
 StartGCP: 2596 StopGCP: 2599
 #Records: 7378 #LogRecords: 0
 Data: 501128 bytes Log: 0 bytes

另一个示例是使用进行备份的实际日期和时间。
这样做的好处是更容易阅读,并且可以直接看到备份是从哪一天开始的。
但是,以下示例每小时只能运行一次——它也是从命令行输入的:

$ TS=$(date +%Y%m%d%H) && ndb_mgm -e "START BACKUP ${TS}"
Connected to Management Server at: localhost:1186
Waiting for completed, this may take several minutes
Node 1: Backup 2016021609 started from node 49
Node 1: Backup 2016021609 started from node 49 completed
 StartGCP: 2665 StopGCP: 2668
 #Records: 7378 #LogRecords: 0
 Data: 501128 bytes Log: 0 bytes

有许多可能的方法来生成备份 ID,而不仅限于时间戳。
我们可以生成一个计数器,该计数器存储在备份服务器上运行的中央数据库中。
如何生成 ID 取决于我们。

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