MySQL Cluster 集群环境下的业务数据,采用了分布式的方式存储在数据节点上的,在这种架构下因为MySQL Cluster 中存储的数据是分散存放在多个数据节点上的,所以我们没办法采用传统的 MySQL 物理备份方式(传统的备份方式如 XtraBackup)来进行备份。不过在 MySQL Cluster 集群环境中的管理节点上,集成了对整个集群环境下业务数据的物理备份能。
我们可以先看一下管理节点上的帮助信息。
[mysql@mysql03 mydata]$ ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> help NDB Cluster -- Management Client -- Help HELP Print help text HELP COMMAND Print detailed help for COMMAND(e.g. SHOW) SHOW Print information about cluster CREATE NODEGROUP <id>,<id>… Add a Nodegroup containing nodes DROP NODEGROUP <NG> Drop nodegroup with id NG START BACKUP [NOWAIT | WAIT STARTED | WAIT COMPLETED] START BACKUP [<backup id>] [NOWAIT | WAIT STARTED | WAIT COMPLETED] START BACKUP [<backup id>] [SNAPSHOTSTART | SNAPSHOTEND] [NOWAIT | WAIT STARTED | WAIT COMPLETED] Start backup (default WAIT COMPLETED,SNAPSHOTEND) ABORT BACKUP <backup id> Abort backup SHUTDOWN Shutdown all processes in cluster PROMPT [<prompt-string>] Toggle the prompt between string specified or default prompt if no string specified CLUSTERLOG ON [<severity>] … Enable Cluster logging CLUSTERLOG OFF [<severity>] … Disable Cluster logging CLUSTERLOG TOGGLE [<severity>] … Toggle severity filter on/off CLUSTERLOG INFO Print cluster log information <id> START Start data node (started with -n) <id> RESTART [-n] [-i] [-a] [-f] Restart data or management server node <id> STOP [-a] [-f] Stop data or management server node <id> NODELOG DEBUG ON Enable Debug logging in node log <id> NODELOG DEBUG OFF Disable Debug logging in node log ENTER SINGLE USER MODE <id> Enter single user mode EXIT SINGLE USER MODE Exit single user mode <id> STATUS Print status <id> CLUSTERLOG {<category>=<level>}+ Set log level for cluster log PURGE STALE SESSIONS Reset reserved nodeid's in the mgmt server CONNECT [<connectstring>] Connect to management server (reconnect if already connected) <id> REPORT <report-type> Display report for <report-type> QUIT Quit management client <severity> = ALERT | CRITICAL | ERROR | WARNING | INFO | DEBUG <category> = STARTUP | SHUTDOWN | STATISTICS | CHECKPOINT | NODERESTART | CONNECTION | INFO | ERROR | CONGESTION | DEBUG | BACKUP | SCHEMA <report-type> = BACKUPSTATUS | MEMORYUSAGE | EVENTLOG <level> = 0 - 15 <id> = ALL | Any database node id For detailed help on COMMAND, use HELP COMMAND.
从上面的帮助信息中,可以清晰地看到,在 ndb_mgm 控制台中可以实现对业务数据的备份。具体如何操作呢?
如何进行物理备份
最简单的备份命令,可以直接使用 start backup 命令来调起对集群中数据的备份任务,如下面代码所示:
ndb_mgm> start backup; Connected to Management Server at: localhost:1186 Waiting for completed, this may take several minutes Node 3: Backup 1 started from node 1 Node 3: Backup 1 started from node 1 completed StartGCP: 69133 StopGCP: 69136 #Records: 2070 #LogRecords: 0 Data: 52644 bytes Log: 0 bytes
当看到 completed 字样时,说明备份任务完成了,但是备份好的数据存储在哪里了呢?
其实对于 MySQL Cluster 集群环境下的数据备份,由于其原生数据存放在数据节点上,为了保证备份任务的高效执行,所以备份好的数据同样存储在了相应的数据节点上。所以我们可以在数据节点上找到刚才备份作业生成的备份数据。
[mysql@mysql06 BACKUP-1]$ cd /mysql/mydata/ [mysql@mysql06 mydata]$ ls BACKUP ndb_2_fs ndb_2_out.log ndb_2.pid [mysql@mysql06 mydata]$ cd BACKUP/ [mysql@mysql06 BACKUP]$ ls BACKUP-1 [mysql@mysql06 BACKUP]$ cd BACKUP-1/ [mysql@mysql06 BACKUP-1]$ ls BACKUP-1-0.2.Data BACKUP-1.2.ctl BACKUP-1.2.log [mysql@mysql07 BACKUP-1]$ ls -l /mysql/mydata/BACKUP/BACKUP-1/ total 56 -rw-rw-r-- 1 mysql mysql 26248 Mar 10 16:53 BACKUP-1-0.3.Data -rw-rw-r-- 1 mysql mysql 23312 Mar 10 16:53 BACKUP-1.3.ctl -rw-rw-r-- 1 mysql mysql 52 Mar 10 16:53 BACKUP-1.3.log
当执行了数据备份后,会在每个数据节点上自动创建目录 $datadir/BACKUP,备份好的数据默认就存储在这个目录下。
其实在 BACKUP 目录下我们可以看到,还存在一个名为 BACKUP-1 的目录,这个目录名字的含义是当前目录下存储的是第一次备份作业生成的备份数据。如果再执行一次备份任务后,会在$datadir/BACKUP 目录下生成一个名字为 BACKUP-2 的目录。
接下来,我们来看下具体生成的备份数据。在BACKUP-1目录下存在以下三个文件。
[mysql@mysql06 BACKUP-1]$ ls BACKUP-1-0.2.Data BACKUP-1.2.ctl BACKUP-1.2.log
- ctl 文件是存储着数据库中表或者其他对象的元数据信息。
- data 文件是存储着数据库中实际备份的数据信息。
- log 文件时存储着已经提交的事务记录。
以上是关于 MySQL Cluster 集群环境中数据备份操作方面的讲解。接下来,为了全面掌握 MySQL Cluster的备份作业调度,需要了解 start backup 备份命令可能使用到的参数。
比如在工作中 MySQL Cluster 集群环境中存储的数据比较大,备份作业需要耗时 30 分钟才可以执行完毕,但是在这 30 分钟的时间里,MySQL Cluster 里的数据还是动态变化的。这里存在一个问题,就是备份好的数据是 30 分钟前备份作业开始时的数据,还是30分钟备份结束时的数据呢?这就要在执行备份命令时添加一些其他参数来控制了。
ndb_mgm 控制台中的相关参数
我们在对 MySQL Cluster 集群环境中的数据进行备份时,常用到的参数有两类:wait_option和snapshot_option。
wait_option:
- wait started 参数表示一旦备份开始,就把命令行控制交给用户。
- notwait 参数表示用户从执行备份命令到结束,就把控制权返回给用户。
- wait completed 参数表示需要等备份全部结束才把控制权交还给用户。在执行备份命令时,如果什么参数都不加,默认的选项是 wait completed。
snapshot_option:
- snapshotstart 参数表示备份文件的内容同开始备份时的数据库快照一致。
- snapshotend 参数表示备份文件的内容同备份结束时的数据库快照一致。在执行备份命令时,如果什么参数都不加,默认的选项是 snapshotend。
好了,以上就是 MySQL Cluster 集群环境下业务数据的物理备份方面内容的讲解。在工作中,数据的备份是至关重要的,大家要多多练习,有了有效的数据备份,才可以当数据库环境出现了意外故障时进行及时数据恢复,而关于数据恢复方面的内容,我们会在下一小节中进行详细讲解和演示。