欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql ndb集群备份数据库和还原数据库的方法

程序员文章站 2023-12-20 22:49:58
1、在管理节点上进行备份。 ndb_mgm> start backup nowait ndb_mgm> node 3: backup 4 started fro...

1、在管理节点上进行备份。
ndb_mgm> start backup nowait
ndb_mgm> node 3: backup 4 started from node 1
node 3: backup 4 started from node 1 completed
startgcp: 43010 stopgcp: 43013
#records: 2138 #logrecords: 0
data: 53068 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.
ndb cluster node(s) have shutdown.
disconnecting to allow management server to shutdown.
ndb_mgm> exit
2、删掉sql节点的数据。
drop database test_cluster;
、关闭mysqld服务器。
[root@localhost bin]# service mysqld stop
shutting down mysql... success!
3、重新顺序启动所有节点。
[root@localhost mysql]# /usr/local/mysql/ndb_mgmd -f /etc/config.ini
[root@localhost data]# /usr/local/mysql/bin/ndbd --initial
我发现如果不带这个 --initial选项的话,恢复会失败。
[root@localhost bin]# service mysqld start
starting mysql success!
4、在ndbd节点上进行恢复。(每个节点都得执行一次,因为数据分散在两个节点上)
第一个节点:
[root@localhost backup]# /usr/local/mysql/bin/ndb_restore -n3 -b4 -r -m --backup_path=/usr/local/mysql/data/backup/backup-4/
-r开关是记录集合。
-m是元数据。就是表和库的schema。
nodeid = 3
backup id = 4
backup path = /usr/local/mysql/data/backup/backup-4/
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 -b4 -r --backup_path=/usr/local/mysql/data/backup/backup-4/
nodeid = 4
backup id = 4
backup path = /usr/local/mysql/data/backup/backup-4/
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 |
+--------------------+
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 |
| ... |
+------------------------------+
rows in set (0.11 sec)

mysql> select * from cs_comment;
empty set (0.00 sec)

不过mysql的backup 程序现在还只能进行完全备份。
[root@localhost backup]# du -h
k ./backup-2
k ./backup-6
k ./backup-4
k ./backup-3
k ./backup-1
k ./backup-5
k .
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)
既忽略表空间和分组空间

上一篇:

下一篇: