备份方式

一般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是默认选项。

实际执行效果如下:

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

还原测试

单表还原

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

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

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/

MySQL Cluster在线备份和恢复的更多相关文章

  1. [MySQL] innobackupex在线备份及恢复(全量和增量)

    安装percona-xtrabackup 方法1: percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz(D:\share\src\linux-mysql) ...

  2. 从MySQL全库备份中恢复某个库和某张表【转】

    从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [root@mha2 backup]#mysqldump -uroot -p123456 --default-character-set=u ...

  3. mysql数据库的备份和恢复

    Mysql数据库的备份和恢复 1.备份单个数据库 mysql数据库自带了一个很好用的备份命令,就是mysqldump,它的基本使用如下: 语法:mysqldump –u <用户名> -p ...

  4. 一、MySQL中的索引 二、MySQL中的函数 三、MySQL数据库的备份和恢复 四、数据库设计和优化(重点)

    一.MySQL中的索引###<1>索引的概念 索引就是一种数据结构(高效获取数据),在mysql中以文件的方式存在.存储建立了索引列的地址或者指向. 文件 :(以某种数据 结构存放) 存放 ...

  5. Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁

    Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...

  6. 我的MYSQL学习心得 备份和恢复(详细)

    备份 逻辑备份方法 使用MYSQLDUMP命令备份 MYSQLDUMP是MYSQL提供的一个非常有用的数据库备份工具.mysqldump命令执行时将数据库备份成一个文本文件, 该文件中实际上包含了多个 ...

  7. MySQL优化之——备份和恢复

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46766919 备份 逻辑备份方法 使用MYSQLDUMP命令备份 MYSQLDUM ...

  8. MySQL中的备份和恢复

    MySQL备份 MySQL中的逻辑备份是将数据库中的数据备份为一个文本文件,备份的文件可以被查看和编辑.在MySQL中,使用mysaldump工具来完成备份.有以下3种来调用mysqldump: 备份 ...

  9. MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

随机推荐

  1. 谷歌官方SwipeRefreshLayout下拉刷新的用法。

    <Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新> 下拉刷新在如今移动开发中应用如此广泛和普遍,以至于谷歌干脆在SDK中给予支持.在android-su ...

  2. 常用的正则表达式(例如:匹配中文、匹配html)(转载)

    匹配中文字符的正则表达式: [u4e00-u9fa5]    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了  匹配双字节字符(包括汉字在内):[^x00-xff]  评注:可以用来计算字符串 ...

  3. JSON初步

    1.什么是JSON (1)JSON(Java Script Object Notation)是一种轻量级的数据交换语言, 以文本字符串为基础,且易于让人阅读 XML就是一个重量级的数据交换语言 (2) ...

  4. c# 读取excel 出现数字读取成“”空

    读取excel用到的方法: /// <summary> /// Excel导入数据源 /// </summary> /// <param name="sheet ...

  5. mac终端下运行shell脚本

    最近公司要弄关于IOS下自动化打包的东西,研究了用命令行的形式来代替手工的方式来处理.即: 用xcodebuild 和xcrun  语法来进行脚本实现.    但由于语法的结构够了,另一个问题产生了, ...

  6. 将Ajax 中数组转换成字符串 封装成类

    <?php class Ajax{ //ajax调用的方法 //sql是要执行的语句 //$type是SQL语句的类型,0代表增删改,1代表查询 //$db代表要操作的数据 public fun ...

  7. ios上架

    1.登录developer.apple.com 2.点击member center后 进下图 3.点击certificates Identifiers进下图 4.点击Certificates进下图,首 ...

  8. operation not possible due to RF-kill

    使用mdk3时出现这个问题operation not possible due to RF-kill 就是输入第一条命令 后出现 operation not possible due to RF-ki ...

  9. ubuntu命令chmod755

    使用方式 : 在终端切换到文件目录 输入 chmod775 hello.py 这样就将hello.py变成了可执行文件 当然作为 python文件 还需要再开头加上 #!/usr/bin/env py ...

  10. Python变量与常量

    变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内存区域,常量一旦被初始化就不能被 ...