MySQL Cluster在线备份和恢复

MirtaMuirde 8年前

来自: http://www.cnblogs.com/shenfeng/p/mysqlcluster_backup_restore.html

备份方式

一般MySQL数据库都是用 mysqldump 命令进行数据备份,其生成的文件实际上是创建对象和导入对象的sql语句。

在MySQL Cluster集群上,可以在管理节点上使用 start backup 命令实现数据库的在线备份,在还原时可以使用 ndb_restore 命令来进行数据库的还原。

使用MySQL Cluster的 start backup ,可以生成以下三种格式的备份文件:

  • BACKUP- backup-id . node_id .ctl

    ctl控制文件存储表定义以及其他对象的元数据(metadata)。

    </li>
  • BACKUP- backup-id . node_id .data

    data数据文件,保存的是表中的记录行,由于数据节点分片的原因,没有节点上文件的数据是不一致的。

  • BACKUP- backup-id . node_id .log

    log日志文件保存已提交的事物记录。

  • </ul>

    上述文件中, backup-id 是备份标识, node_id 是数据节点的唯一编号。

    备份命令

    在ndb_mgm交互模式下,可以执行如下命令进行备份。

     START BACKUP [backup_id] [wait_option] [snapshot_option]

    wait_option:WAIT {STARTED | COMPLETED} | NOWAIT

    snapshot_option:

    SNAPSHOTSTART | SNAPSHOTEND

    命令后面带3个参数,在交互模式下都是可选的。其中backuop_id如果添加,需要保持唯一。wait_option是指在ndb_mgm交互模式下,执行命令后是否将命令控制权返回给用户。

    wait_option: WAIT STARTED表示一旦备份开始,就把控制交给用户;NOTWAIT表示用户一执行命令,就把控制权返回给用户;WAIT COMPLETED表示需要等备份全部结束才把控制权交还给用户。默认的选项是WAIT COMPLETED。

    snapshot_option: SNAPSHOTSTART表示备份文件的内容同开始备份时的数据库快照一致,SNAPSHOTEND表示备份文件的内容同备份结束时的数据库快照一致。SNAPSHOTEND是默认选项。

    实际执行效果如下:

    从上图我们可以得出默认的backup_id是从1开始递增的,备份文件会放在datadir的BACKUP目录下,每一次备份都会子目录BACKUP- backup_id 。因此备份转移可以通过打包压缩这个目录然后转移到备份服务器。

    还原测试

    单表还原

    首先我在数据库删除一个测试表,然后通过 ndb_restore 命令来对数据进行还原。

    还原单个表,需要一次在每个数据节点运行以下命令。

    shell&gt; ndb_restore [...] --include-databases=db1,db2 --include-tables=db3.t1,db3.t2

    在执行单个节点还原后查询数据,可以发现会有部分数据可以查询到,说明还原的节点存储了该表的部分数据。

    shell> ndb_restore -c 192.168.1.131 -n 1 -b 1 -m -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1 --include-tables=testdb.dept    mysql> select count(*) from dept;  +----------+  | count(*) |  +----------+  |       25 |  +----------+  1 row in set (0.00 sec)

    在后续节点上还原时就不需要指定 -m 选项来还原metadata,否则还原时会报 Restore: Failed to restore table: testdb/def/dept ... Exiting 错误。

    整库还原

    首先进入单用户模式。

     ndb_mgm> ENTER SINGLE USER MODE 9    ndb_mgm> EXIT SINGLE USER MODE

    USER MODE 9表示只有一个还原程序通过nodeid为9的api节点连接。

    假设集群中由于同一nodegroup的所有节点都宕机,且硬盘上的数据也无法恢复。则所有节点通过 ndbmtd --initial 启动后,存放在ndb引擎上的数据都会丢失。此时,就需要调用ndb_restore进行数据库的还原。

    同时,为了防止其他用户的接入操作,在完全操作前可以将集群进入上面所述的单用户模式。

    然后根据备份文件的位置,依次进行还原。其中只有第一个节点还原时要使用 -m 命令。

    ndb_restore -c 192.168.1.131 -n 1 -b 1 -m -r --backup_path=/opt/backupfiles/BACKUP-1/1  ndb_restore -c 192.168.1.131 -n 2 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1  ndb_restore -c 192.168.1.131 -n 3 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1  ndb_restore -c 192.168.1.131 -n 4 -b 1 -r --backup_path=/opt/backupfiles/BACKUP-1/1

    注意:所有数据节点的备份文件可以放到一个备份目录下,还原程序会根据还原命令自行寻找对应的备份文件。

    版权说明:camash原创,转载请注明出处

    </div>