MySQL cluster备份恢复

备注:如果你有时间你应该阅读这个备注,如果没有时间你更要阅读以下备注。

在网络上找了很多相关备份和还原的教程,大多都是互相抄袭,按照他们的教程能够成功备份,还原就很让人揪心了。谈谈思路和注意点吧。

首先,第一步不用说,肯定是备份数据库。最简单,打开管理节点的ndb_mgm控制台,输入start backup backupID(backupid用任意数字,比如日期20100106,注意,不能和以前的备份ID相同)。在你的所有存储节点的$datadir/BACKUP下会生成相应备份目录BACKUP-backupid

第二步,ndb_mgm中输入shutdown来关闭所有的存储节点和所有的管理节点(包括它本身)。

第三步,在所有的sql节点中删除数据库,留下系统自带的

//备注,第三步是不是一定需要做呢,目前还没测试过,不过至少制造了一个数据丢失的现象

第四步,按顺序启动mysql集群,所有管理节点,然后所有存储节点(启动时候需要加上参数--initial),最后所有sql节点。

第五步,在存储节点Master(192.168.16.10)上执行ndb_restore还原命令/usr/local/mysql/bin/ndb_restore -n11 -b20100106 -r -m --backup_path=/opt/mydata/BACKUP/BACKUP-20100106/ --ndb-connectstring=nodeid=27,192.168.16.8,192.168.16.9

Master如下。(id=11)

id=11 @192.168.16.10 (mysql-5.1.39 ndb-7.0.9, Nodegroup: 0, Master)

id=12 @192.168.16.11 (mysql-5.1.39 ndb-7.0.9, Nodegroup: 0)

id=13 @192.168.16.12 (mysql-5.1.39 ndb-7.0.9, Nodegroup: 0)

id=14 @192.168.16.13 (mysql-5.1.39 ndb-7.0.9, Nodegroup: 0)

命令解释:/usr/local/mysql/bin/ndb_restore 还原命令

-n 当前存储节点的nodeid

-b 要还原的backupid

-r 数据开关,也就是还原数据了

-m 还原表结构

--ndb-connectstring=nodeid=27,192.168.16.8,192.168.16.9 192.168.16.8,192.168.16.9是两个管理节点的ip,27是什么呢,看看管理节点的config.ini内的mysqld配置,其中有一段如下:

[mysqld]

HostName=192.168.16.24

Id= 25

[mysqld]

HostName=192.168.16.25

Id= 26

[mysqld]

[mysqld]

必须留两个空余的[mysqld],最后一个有指定HostName的mysqld ID=26,那么下一个空白的mysqld的ID默认就是27了。这个前面nodeid=27也就是这么来的,其实改成nodeid=28也是可以的。

第六步,在存储节点slave(除192.168.16.10以外)上执行ndb_restore还原命令/usr/local/mysql/bin/ndb_restore -n12 -b20100106 -r -d --backup_path=/opt/mydata/BACKUP/BACKUP-20100106/ --ndb-connectstring=nodeid=27,192.168.16.8,192.168.16.9

注释:和master差别在把参数-m替换成-d,-n12要相应更换

第七部,接近尾声了,在sql节点上show databases,没看到任何数据库,是不是失败了,不是,create database 你备份的数据.然后在这新库中show表,可以看到数据都回来了。

具体操作请看下面这篇文章。

中午刚刚弄明白了MYSQL集群的备份与恢复。
写下来,以后就不用为这个问题浪费时间了。
1、在管理节点上进行备份。
ndb_mgm> start backup 20100106

Waiting for completed, this may take several minutes

Node 11: Backup 20100106 started from node 1

Node 11: Backup 20100106 started from node 1 completed

StartGCP: 2340 StopGCP: 2343

#Records: 3318 #LogRecords: 0

Data: 427692 bytes Log: 0 bytes
ndb_mgm> shutdown
Node 3: Cluster shutdown initiated
Node 4: Cluster shutdown initiated
Node 4: Node shutdown completed.
Node 3: Node shutdown completed.
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
ndb_mgm> exit
2、删掉SQL节点的数据。一个个节点删过去
DROP DATABASE TEST_CLUSTER;
3、关闭MYSQLD服务器。
[root@localhost bin]# service mysqld stop
Shutting down MySQL... SUCCESS!
4、重新顺序启动所有节点。管理节点(所有的)--存储节点(所有的)--SQL节点(所有的)
[root@localhost mysql]# /usr/local/bin/ndb_mgmd -f /usr/local/mysql-cluster/config.ini --configdir=/usr/local/mysql-cluster/
[root@localhost data]# /usr/local/mysql/bin/ndbd --initial
//我发现如果不带这个 --initial选项的话,恢复会失败。慎重使用--initial,使用这个选项之后发所有数据库中的表都丢了
[root@localhost bin]# service mysqld start
Starting MySQL SUCCESS!
4、在NDBD节点上进行恢复。(每个节点都得执行一次,因为数据分散在两个节点上)
第一个节点NDB的master节点:
[root@localhost BACKUP]# /usr/local/mysql/bin/ndb_restore -n11 -b20100106 -r -m --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-20100106/
-r开关是记录集合。
-m是元数据。就是表和库的SCHEMA。插一句.就是表结构
Nodeid = 11
Backup Id = 20100106
backup path = /usr/local/mysql/data/BACKUP/BACKUP-20100106/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
Successfully restored table `test_cluster/def/lk4_test`
...
Successfully created index `PRIMARY` on `lk4_test`
...
_____________________________________________________
Processing data in table: test_cluster/def/lk4_test54) fragment 1
_____________________________________________________
...
Restored 37 tuples and 0 log entries
NDBT_ProgramExit: 0 - OK
第二个节点:
[root@localhost BACKUP-1]# /usr/local/mysql/bin/ndb_restore -n4 -b20100106 -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-20100106/ --ndb-connectstring=nodeid=27,192.168.16.8,192.168.16.9
Nodeid = 4
Backup Id = 4
backup path = /usr/local/mysql/data/BACKUP/BACKUP-20100106/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(4) fragment 1
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_2_3(3) fragment 1
_____________________________________________________
Processing data in table: test/def/t11(5) fragment 1
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(0) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(2) fragment 1
Restored 2 tuples and 0 log entries
NDBT_ProgramExit: 0 - OK
这里完成。
5、查看一下有没有数据,为了安全起见。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
没有恢复的数据库?
MYSQL现在必须重新建立SCHEMA。也就是数据有了,库还没有。库建起来了自然可以看到内容了

mysql> create database test_cluster;
Query OK, 1 row affected (0.33 sec)
mysql> use test_cluster;
Database changed
mysql> show tables;
+------------------------------+
| Tables_in_test_cluster |
+------------------------------+
| lk4_test |
| ... |
+------------------------------+
27 rows in set (0.11 sec)
mysql> select * from cs_comment;
Empty set (0.00 sec)
不过MYSQL的backup 程序现在还只能进行完全备份.7.0.9貌似也是个样子的。
[root@TM-0182 BACKUP]# du -h

28K ./BACKUP-2

224K ./BACKUP-20100105

36K ./BACKUP-10

36K ./BACKUP-12

28K ./BACKUP-210

36K ./BACKUP-7

32K ./BACKUP-1

36K ./BACKUP-20091217

36K ./BACKUP-11

216K ./BACKUP-20100106

28K ./BACKUP-3

36K ./BACKUP-56

36K ./BACKUP-111

28K ./BACKUP-13

840K .
以下内容未作修改。
6、在NDBD节点上进行恢复的时候有一个要注意的问题。
因为NDBD节点以 --initial 方式启动的时候不会自动删除undo 和 data 文件(即保存到磁盘上的表数据),所以得手动在每个NDBD节点上进行RM操作:
[root@node239 ndb_6_fs]# rm -rf *.dat
然后开始备份。
在MASTER上备份的时候要加 -m 开关。
在SLAVE上要加-d 而且不要-m开关。
具体步骤如下:
MASTER :
[root@localhost ndb_3_fs]# /usr/local/mysql/bin/ndb_restore -n3 -b1 -r -m --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/
Nodeid = 3
Backup Id = 1
backup path = /usr/local/mysql/data/BACKUP/BACKUP-1/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
Creating logfile group: lg_1...done
Creating tablespace: ts_1...done
Creating datafile "data_1.dat"...done
Creating undofile "undo_1.dat"...done
Successfully restored table `test/def/t11`
Successfully restored table event REPL$test/t11
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 0
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_2_3(3) fragment 0
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(0) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(2) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(4) fragment 0
_____________________________________________________
Processing data in table: test/def/t11(10) fragment 0
Restored 26 tuples and 0 log entries
NDBT_ProgramExit: 0 - OK
其他的SLAVE上的操作:
[root@node239 ndb_6_fs]# /usr/local/mysql/bin/ndb_restore -n6 -b1 -r -d --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/
Nodeid = 6
Backup Id = 1
backup path = /usr/local/mysql/data/BACKUP/BACKUP-1/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 3
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_2_3(3) fragment 3
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(0) fragment 3
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(2) fragment 3
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(4) fragment 3
_____________________________________________________
Processing data in table: test/def/t11(10) fragment 3
Restored 20 tuples and 0 log entries
NDBT_ProgramExit: 0 - OK
-d 开关的意思即:
-d, --no-restore-disk-objects
Dont restore disk objects (tablespace/logfilegroups etc)
既忽略表空间和分组空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值