Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1734910
  • 博文数量: 391
  • 博客积分: 8464
  • 博客等级: 中将
  • 技术积分: 4589
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 15:12
个人简介

狮子的雄心,骆驼的耐力,孩子的执著!

文章分类

全部博文(391)

文章存档

2023年(4)

2018年(9)

2017年(13)

2016年(18)

2014年(7)

2013年(29)

2012年(61)

2011年(49)

2010年(84)

2009年(95)

2008年(22)

分类: Mysql/postgreSQL

2010-07-17 10:33:50

mysql-cluster备份恢复

msyql-cluster的备份恢复是使用管理节点命令和ndb_restore程序完成的


下面进行一次备份恢复的操作演示


.mysql-cluster环境介绍:


mysql-cluster版本: mysql-cluster-7.0


簇节点分布情况:


一个管理节点(node1),2数据节点(node2,node3),3sql节点(node4,node5,node6)


所有节点安装在一个机器上,这比在单机器单节点上环境复杂(学习目的,越复杂越好)


分布情况显示如下


[ndbd(NDB)]     2 node(s)
id=2    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0, Master)
id=3    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)

[mysqld(API)]   3 node(s)
id=4    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)
id=5    @127.0.0.1  (mysql-5.1.34 ndb-7.0.6)
id=6 (not connected, accepting connect from localhost)


管理节点总配置文件内容如下,(供理解备份恢复命令使用)

[ndbd default]
noofreplicas=2
[ndbd]
datadir=/usr/local/mysql/logs_2
backupdatadir=/usr/local/mysql/backup_2
hostname=localhost
id=2
[ndbd]
datadir=/usr/local/mysql/logs_3
backupdatadir=/usr/local/mysql/backup_3
hostname=localhost
id=3
[ndb_mgmd]
id = 1
hostname=localhost
[mysqld]
id=4
hostname=localhost
[mysqld]
id=5
hostname=localhost
[mysqld]
id=6
hostname=localhost


基本环境介绍完


备份恢复步骤:


1 启动mysql-cluster,


注意: 在执行恢复命令的数据节点上保留需要一个sql节点, 供恢复进程使用,否则会报错显示无法为恢复进程分配空余节点(这么说要执行恢复,数据节点上必须存在sql节点,待考)


如本例中sql节点 6没有启动, 供恢复进程使用



2 准备数据


登陆sql节点.执行下面的操作,准备数据


root:test> create table dante_ndb(
    -> name varchar(4,
    -> id int)engine=ndb;
Query OK, 0 rows affected (0.84 sec)

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)



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


StartGCP: 339 StopGCP: 342


#Records: 2064 #LogRecords: 0


Data: 51544 bytes Log: 0 bytes


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 在大数据量的情况下,这种备份恢复方式速度如何?

来源:

阅读(1013) | 评论(0) | 转发(0) |
0

上一篇:MySQL NDB 6.3.20集群安装

下一篇:mysql+proxy+mmm

给主人留下些什么吧!~~