mysql-cluster备份恢复简单示例
时间:2010-07-17 来源:ygl23
msyql-cluster的备份恢复是使用管理节点命令和ndb_restore程序完成的
下面进行一次备份恢复的操作演示
一 .mysql-cluster环境介绍:
mysql-cluster版本: mysql-cluster-7.0
簇节点分布情况:
一个管理节点(node1),2个数据节点(node2,node3),3个sql节点(node4,node5,node6)
所有节点安装在一个机器上,这比在单机器单节点上环境复杂(学习目的,越复杂越好)
分布情况显示如下
[ndbd(NDB)] 2 node(s) |
[ndb_mgmd(MGM)] 1 node(s) |
[mysqld(API)] 3 node(s) |
管理节点总配置文件内容如下,(供理解备份恢复命令使用)
[ndbd default] |
基本环境介绍完
二备份恢复步骤:
1 启动mysql-cluster簇,
注意: 在执行恢复命令的数据节点上保留需要一个sql节点, 供恢复进程使用,否则会报错显示无法为恢复进程分配空余节点(这么说要执行恢复,数据节点上必须存在sql节点,待考)
如本例中sql节点 6没有启动, 供恢复进程使用
2 准备数据
登陆sql节点.执行下面的操作,准备数据
root:test> create table dante_ndb( |
root:test> select * from dante_ndb; |
3 登陆管理节点客户端,执行备份
ndb_mgm> start backup; Waiting for completed, this may take several minutes Node 2: Backup 1 started from node 1 Node 2: Backup 1 started from node 1 completed
|
4 登陆sql节点,清空数据
root:test> truncate table dante_ndb;
Query OK, 0 rows affected (1.02 sec)
root:test>select * from dante_ndb; Empty set (0.00 sec) |
5 进入每个数据节点,执行恢复,因为数据存放在所有的数据节点上,所以需要到每个节点上执行ndb_restore命令,简单介绍restore命令的几个选项
-n 恢复的数据节点id
-b 使用的备份id
-r 备份数据的目录
登陆数据节点3,执行恢复命令,
[/app/mysql]# bin/ndb_restore -n 3 -b 1 -r backup_3/BACKUP/BACKUP-1/
登陆数据节点2,执行恢复命令
[/app/mysql]# bin/ndb_restore -n 2 -b 1 -r backup_2/BACKUP/BACKUP-1/
-r 参数很重要,这里-r backup_3/ BACKUP/BACKUP-1/正是我前面配置的数据节点3的备份目录,节点2同理,
如果在一台机器上有多个数据节点,最好指定各自的备份目录和文件系统目录,因为我首次操作没有指定时,他们共用了一个数据目录,但只有一个节点的备份数据.导致恢复失败.
6 查看恢复的数据,发现恢复成功
root:test> select * from dante_ndb; +-------------+------+ | name | id | +-------------+------+ | dante | 1 | | nobody | 1 | | helly sorry | 1 | | nigoles.kiq | 1 | | angle | 1 | +-------------+------+ 5 rows in set (0.00 sec) |
另外备份恢复的其他问题还有待继续测试
1 官方强烈建议在single user mode下进行恢复操作,以保证数据库的一致性
问题是:这种模式要求断开其他sql节点,线上业务的sql节点不是轻易可以断的.
2 在大数据量的情况下,这种备份恢复方式速度如何?