zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/shenfeng/p/mysqlcluster_backup_restore.html
Copyright © 2011-2022 走看看