• MySQL Cluster在线备份和恢复


    备份方式

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

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

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

    • BACKUP-backup-id.node_id.ctl
      ctl控制文件存储表定义以及其他对象的元数据(metadata)。

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

    • BACKUP-backup-id.node_id.log
      log日志文件保存已提交的事物记录。

    上述文件中,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是默认选项。

    实际执行效果如下:

    start backup

    bakcup files

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

    还原测试

    单表还原

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

    drop dept table

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

    shell> 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原创,转载请注明出处 http://www.cnblogs.com/shenfeng/

  • 相关阅读:
    BOM与DOM
    前端基础之JavaScript
    前端基础之css
    前端基础之HTML
    索引与慢查询优化
    视图、触发器、事务、存储过程、函数、流程控制
    pymysql模块
    mysql的基本查询语句及方法
    ie6 select选中问题
    offsetLeft
  • 原文地址:https://www.cnblogs.com/shenfeng/p/mysqlcluster_backup_restore.html
Copyright © 2020-2023  润新知