mysql-cluster備份恢復(fù) msyql-cluster的備份恢復(fù)是使用管理節(jié)點(diǎn)命令和ndb_restore程序完成的
下面進(jìn)行一次備份恢復(fù)的操作演示
一 .mysql-cluster環(huán)境介紹:
mysql-cluster版本: mysql-cluster-7.0
簇節(jié)點(diǎn)分布情況:
一個(gè)管理節(jié)點(diǎn)(node1),2個(gè)數(shù)據(jù)節(jié)點(diǎn)(node2,node3),3個(gè)sql節(jié)點(diǎn)(node4,node5,node6)
所有節(jié)點(diǎn)安裝在一個(gè)機(jī)器上,這比在單機(jī)器單節(jié)點(diǎn)上環(huán)境復(fù)雜(學(xué)習(xí)目的,越復(fù)雜越好)
分布情況顯示如下
[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) |
管理節(jié)點(diǎn)總配置文件內(nèi)容如下,(供理解備份恢復(fù)命令使用)
[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 |
基本環(huán)境介紹完
二備份恢復(fù)步驟:
1 啟動(dòng)mysql-cluster簇,
注意: 在執(zhí)行恢復(fù)命令的數(shù)據(jù)節(jié)點(diǎn)上保留需要一個(gè)sql節(jié)點(diǎn), 供恢復(fù)進(jìn)程使用,否則會(huì)報(bào)錯(cuò)顯示無法為恢復(fù)進(jìn)程分配空余節(jié)點(diǎn)(這么說要執(zhí)行恢復(fù),數(shù)據(jù)節(jié)點(diǎn)上必須存在sql節(jié)點(diǎn),待考)
如本例中sql節(jié)點(diǎn) 6沒有啟動(dòng), 供恢復(fù)進(jìn)程使用
2 準(zhǔn)備數(shù)據(jù)
登陸sql節(jié)點(diǎn).執(zhí)行下面的操作,準(zhǔn)備數(shù)據(jù)
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 登陸管理節(jié)點(diǎn)客戶端,執(zhí)行備份
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節(jié)點(diǎn),清空數(shù)據(jù)
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 進(jìn)入每個(gè)數(shù)據(jù)節(jié)點(diǎn),執(zhí)行恢復(fù),因?yàn)閿?shù)據(jù)存放在所有的數(shù)據(jù)節(jié)點(diǎn)上,所以需要到每個(gè)節(jié)點(diǎn)上執(zhí)行ndb_restore命令,簡單介紹restore命令的幾個(gè)選項(xiàng)
-n 恢復(fù)的數(shù)據(jù)節(jié)點(diǎn)id
-b 使用的備份id
-r 備份數(shù)據(jù)的目錄
登陸數(shù)據(jù)節(jié)點(diǎn)3,執(zhí)行恢復(fù)命令,
[/app/mysql]# bin/ndb_restore -n 3 -b 1 -r backup_3/BACKUP/BACKUP-1/
登陸數(shù)據(jù)節(jié)點(diǎn)2,執(zhí)行恢復(fù)命令
[/app/mysql]# bin/ndb_restore -n 2 -b 1 -r backup_2/BACKUP/BACKUP-1/
-r 參數(shù)很重要,這里-r backup_3/ BACKUP/BACKUP-1/正是我前面配置的數(shù)據(jù)節(jié)點(diǎn)3的備份目錄,節(jié)點(diǎn)2同理,
如果在一臺(tái)機(jī)器上有多個(gè)數(shù)據(jù)節(jié)點(diǎn),最好指定各自的備份目錄和文件系統(tǒng)目錄,因?yàn)槲沂状尾僮鳑]有指定時(shí),他們共用了一個(gè)數(shù)據(jù)目錄,但只有一個(gè)節(jié)點(diǎn)的備份數(shù)據(jù).導(dǎo)致恢復(fù)失敗.
6 查看恢復(fù)的數(shù)據(jù),發(fā)現(xiàn)恢復(fù)成功
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) |
另外備份恢復(fù)的其他問題還有待繼續(xù)測試
1 官方強(qiáng)烈建議在single user mode下進(jìn)行恢復(fù)操作,以保證數(shù)據(jù)庫的一致性
問題是:這種模式要求斷開其他sql節(jié)點(diǎn),線上業(yè)務(wù)的sql節(jié)點(diǎn)不是輕易可以斷的.
2 在大數(shù)據(jù)量的情況下,這種備份恢復(fù)方式速度如何?
[ 本帖最后由 la19850302 于 2009-11-10 15:08 編輯 ] |