在前面几篇文章已经详细介绍了MySQL Cluster的搭建,配置讲解。而且相信大家都掌握了基本用法。现在我们来看看Cluster的日常维护。熟悉日常维护,将有助于工作中更好的管理和使用Cluster。

一. 数据备份

相信大家都熟悉mysql的日常备份工具,比如mysqldump对数据库进行逻辑备份。这个方法同样适用MySQL Cluster,备份方法和其他存储引擎一样,唯一的区别是在任意的SQL节点备份数据。我们来看一个例子。

我这里在SQL节点192.168.0.70上面使用mysqldump备份test库:

[root@192.168.0.70 ~]# mysqldump  --single-transaction --skip-comments test > /data/bak.sql
DROP TABLE IF EXISTS `t1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t1` (
`name` varchar(20) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */; LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES ('yayun'),('atlas');
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

可以看见导出的SQL和其他引擎没有区别,这里就不详细介绍了。我们重点介绍cluster的物理备份方法。还是以前面搭建的cluster环境为例子。当集群全部启动以后,进入管理节点执行start backup命令启动备份。输入?可以查看各种帮助选项。

ndb_mgm> ?
---------------------------------------------------------------------------
NDB Cluster -- Management Client -- Help
---------------------------------------------------------------------------
HELP Print help text
HELP COMMAND Print detailed help for COMMAND(e.g. SHOW)
SHOW Print information about cluster
CREATE NODEGROUP <id>,<id>... Add a Nodegroup containing nodes
DROP NODEGROUP <NG> Drop nodegroup with id NG
START BACKUP [NOWAIT | WAIT STARTED | WAIT COMPLETED]
START BACKUP [<backup id>] [NOWAIT | WAIT STARTED | WAIT COMPLETED]
START BACKUP [<backup id>] [SNAPSHOTSTART | SNAPSHOTEND] [NOWAIT | WAIT STARTED | WAIT COMPLETED]
Start backup (default WAIT COMPLETED,SNAPSHOTEND)
ABORT BACKUP <backup id> Abort backup
SHUTDOWN Shutdown all processes in cluster
CLUSTERLOG ON [<severity>] ... Enable Cluster logging
CLUSTERLOG OFF [<severity>] ... Disable Cluster logging
CLUSTERLOG TOGGLE [<severity>] ... Toggle severity filter on/off
CLUSTERLOG INFO Print cluster log information
<id> START Start data node (started with -n)
<id> RESTART [-n] [-i] [-a] [-f] Restart data or management server node
<id> STOP [-a] [-f] Stop data or management server node
ENTER SINGLE USER MODE <id> Enter single user mode
EXIT SINGLE USER MODE Exit single user mode
<id> STATUS Print status
<id> CLUSTERLOG {<category>=<level>}+ Set log level for cluster log
PURGE STALE SESSIONS Reset reserved nodeid's in the mgmt server
CONNECT [<connectstring>] Connect to management server (reconnect if already connected)
<id> REPORT <report-type> Display report for <report-type>
QUIT Quit management client <severity> = ALERT | CRITICAL | ERROR | WARNING | INFO | DEBUG
<category> = STARTUP | SHUTDOWN | STATISTICS | CHECKPOINT | NODERESTART | CONNECTION | INFO | ERROR | CONGESTION | DEBUG | BACKUP | SCHEMA
<level> = -
<id> = ALL | Any database node id For detailed help on COMMAND, use HELP COMMAND.
ndb_mgm>

输入start backup启动备份,如下:

ndb_mgm> START BACKUP
Waiting for completed, this may take several minutes
Node : Backup started from node
Node : Backup started from node completed
StartGCP: StopGCP:
#Records: #LogRecords:
Data: bytes Log: bytes
ndb_mgm>

在备份日志中,需要注意"Backup 1",它表示该备份的唯一ID,如果做第二次备份,备份ID会变成"Backup 2"。当日志中显示"Node 2: Backup 1 started from node 1 completed"时,本次备份结束。备份的数据保存在每个NDB(数据节点)下,具体的备份路径是$MYSQL_HOME/data/BACKUP/BACKUP-ID。这是默认的,我的数据放在/data/mysql-cluster/data/,所以备份也在该目录下面。上面的备份可以在两个数据节点都可以看到:

[root@192.168.0.40 BACKUP-]# pwd
/data/mysql-cluster/data/BACKUP/BACKUP-
[root@192.168.0.40 BACKUP-]# ll
total
-rw-r--r-- root root Apr : BACKUP--0.3.Data
-rw-r--r-- root root Apr : BACKUP-1.3.ctl
-rw-r--r-- root root Apr : BACKUP-1.3.log
[root@192.168.0.40 BACKUP-]#
[root@192.168.0.50 BACKUP-]# pwd
/data/mysql-cluster/data/BACKUP/BACKUP-
[root@192.168.0.50 BACKUP-]# ll
total
-rw-r--r-- root root Apr : BACKUP--0.2.Data
-rw-r--r-- root root Apr : BACKUP-1.2.ctl
-rw-r--r-- root root Apr : BACKUP-1.2.log
[root@192.168.0.50 BACKUP-]#

大家或许发现了以上两个节点的备份文件名不一样,一个包含".2",另外一个包含".3",这个数字表明了此备份是哪个数据节点上的数据。下面清楚的显示了ID号。

[ndbd(NDB)]      node(s)
id= @192.168.0.50 (mysql-5.5. ndb-7.2., Nodegroup: , Master)
id= @192.168.0.40 (mysql-5.5. ndb-7.2., Nodegroup: )

对于大数据量的备份,MySQL Cluster还提供了几个备份的参数可供调整,这些参数需要写在config.ini的[NDBD DEFAULT]或者[NDBD]组中,对各参数的具体说明如下:

(1)BackupDataBufferSize:将数据写入磁盘之前用于对数据进行缓冲处理的内存量。

(2)BackupLogBufferSzie: 将日志记录写入磁盘之前用于对其进行缓冲处理的内存量。

(3)BackupMemory:          在数据库节点中为备份分配的总内存。它应是分配给备份数据缓冲的内存和分配给日志缓冲的内存之和。

(4)BackupWriteSize:        每次写入磁盘的块大小,适用于备份数据缓冲和备份日志缓冲。

二. 数据恢复

对于用"start backup" 进行备份的cluster,必须使用ndb_restore工具进行数据恢复。ndb_restore是mysql cluster带的管理工具,在shell中执行,而不是ndb_mgm工具中的一个命令。

我们上面已经备份数据了,我们人为删除test库下面的表t1,然后恢复数据:

mysql> drop table test.t1;
Query OK, 1 row affected (0.64 sec)
mysql>

(1)在数据节点2(192.168.0.50)的shell命令中执行如下命令:

[root@192.168.0.50 ~]# ndb_restore -b  -n  -c host=192.168.0.30: -m -r /data/mysql-cluster/data/BACKUP/BACKUP-/
Backup Id =
Nodeid =
backup path = /data/mysql-cluster/data/BACKUP/BACKUP-/
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.2.ctl'
File size bytes
Backup version in files: ndb-6.3. ndb version: mysql-5.5. ndb-7.2.
Stop GCP of Backup:
Connected to ndb!!
Successfully restored table `test/def/t1`
Successfully restored table event REPL$test/t1
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1-0.2.Data'
File size bytes
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_7_3() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_sample() fragment
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_head() fragment
_____________________________________________________
Processing data in table: test/def/t1() fragment
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_schema() fragment
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.2.log'
File size bytes
Restored tuples and log entries NDBT_ProgramExit: - OK [root@192.168.0.50 ~]#

其中命令行中的各参数意义如下:

参数                    说明
-b 备份id
-n NDB节点id
-m 恢复表定义
-r 备份路径
-c cluster管理节点连接

因为是第一个节点恢复,所以需要加参数-m来恢复表定义,这样在其他节点恢复时就不需要再加该参数,否则会报如下错误:

Unable to find table: `t1`
Restore: Failed to restore table: `test/def/t1` ... Exiting

(2)在节点3(192.168.0.40)再进行恢复:

[root@192.168.0.40 ~]# ndb_restore -b  -n  -c host=192.168.0.30: -r /data/mysql-cluster/data/BACKUP/BACKUP-/
Backup Id =
Nodeid =
backup path = /data/mysql-cluster/data/BACKUP/BACKUP-/
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.3.ctl'
File size bytes
Backup version in files: ndb-6.3. ndb version: mysql-5.5. ndb-7.2.
Stop GCP of Backup:
Connected to ndb!!
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1-0.3.Data'
File size bytes
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_7_3() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_sample() fragment
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_index_stat_head() fragment
_____________________________________________________
Processing data in table: test/def/t1() fragment
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0() fragment
_____________________________________________________
Processing data in table: mysql/def/ndb_schema() fragment
Opening file '/data/mysql-cluster/data/BACKUP/BACKUP-1/BACKUP-1.3.log'
File size bytes
Restored tuples and log entries NDBT_ProgramExit: - OK [root@192.168.0.40 ~]#

(4)查看数据是否恢复(任意SQL节点,这里选择192.168.0.70):

mysql> select * from t1;
+-------+
| name |
+-------+
| yayun |
| atlas |
+-------+
rows in set (0.05 sec) mysql>

此时数据已经恢复正常。

三 .日志管理

MySQL Cluster提供了两种日志,分别是集群日志(cluster log)和节点日志(node log)。前者记录了所有Cluster节点生成的日志,后者仅仅记录了数据节点的本地事件。在大多数情况下,一般推荐使用集群日志,因为它在一个地方记录了所有节点的数据,更方便进行管理。节点日志一般在开发过程中使用,或者用来调试程序代码。

clusterlog一般记录在配置文件(config.ini)所在的目录下,文件名格式为ndb_<nodeid>_cluster.log,其中nodeid为管理节点号。

下面是测试环境中的一段clusterlog:

[root@192.168.0.30 mysql-cluster]# tail -n  ndb_1_cluster.log
#Tablespaces: #Logfilegroups: #datafiles: #undofiles:
-- :: [MgmtSrvr] INFO -- Node : Restore data: backup from node #Records: Data: bytes
-- :: [MgmtSrvr] INFO -- Node : Restore log: backup from node #Records: Data: bytes
-- :: [MgmtSrvr] INFO -- Node : Restore completed: backup from node
-- :: [MgmtSrvr] ALERT -- Node : Node Disconnected
-- :: [MgmtSrvr] INFO -- Node : Communication to Node closed
-- :: [MgmtSrvr] INFO -- Node : Communication to Node closed
-- :: [MgmtSrvr] ALERT -- Node : Node Disconnected
-- :: [MgmtSrvr] INFO -- Node : Communication to Node opened
-- :: [MgmtSrvr] INFO -- Node : Communication to Node opened
[root@192.168.0.30 mysql-cluster]#

可以使用ndb_mgm客户端管理工具打开或者关闭日志,具体操作如下:

[root@192.168.0.30 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> clusterlog info
Connected to Management Server at: localhost:
Severities enabled: INFO WARNING ERROR CRITICAL ALERT
ndb_mgm>

当前日志是打开的,可以用clusterlog off命令关闭日志:

ndb_mgm> clusterlog off
Cluster logging is disabled
ndb_mgm>

查看日志状态发现已关闭:

ndb_mgm> clusterlog info
Cluster logging is disabled.
ndb_mgm>

执行命令clusterlog on将日志打开:

ndb_mgm> clusterlog on
Cluster logging is enabled.
ndb_mgm> clusterlog info
Severities enabled: INFO WARNING ERROR CRITICAL ALERT
ndb_mgm>

cluster中的日志有很多类型,可以按照如下类别进行过滤,使得日志只记录我们关心的信息。

(1)Category(类别):可以是STARTUP,SHUTDOWN,STATISTICS,CHECKPOINT,NODERESTART,CONNECTION,ERROR或者INFO中的任意值。具体的信息大家可以查阅mysql相关文档。

(2)Priority(优先级):由从1-15的数字表示,1表示最重要,而15表示最不重要。每种Category都有一个 默认的优先级阀值,如下面所示,优先级阀值以下的日志将被记录,反之,优先级阀值以上的日志将不会被记录。

类别            默认阀值(所有数据节点)
STARTUP
SHUTDOWN
STATISTICS
CHECKPOINT
NODERESTART
CONNECTION
ERROR
INFO

(3)Severity Level(严重级别):可以是下面的值之一,ALERT,CRITICAL,ERROR,WARNING,INFO或DEBUG。这些值的含义如下:

严重级别                        事件定义
ALERT 应立刻更正的情况,如损坏的系统数据库
CRITICAL 临界状况,如设备错误或资源不足
ERROR 应予以更正的状况,如配置错误
WARNING 不能称为错误的情况,但仍需要特别处理
INFO 通报性信息
DEBUG 调试信息,用于NDB Cluster开发

这3种分类可以让我们从3个不同的角度来对日志进行过滤。过滤的方法可以用ndb_mgm工具来完成,具体设置方法如下。

(1)node_id CLUSTERLOG category=threshold:用于小于等于threshold的优先级将category事件记录到cluster日志。node_id可以为ALL(所有节点)。或者只指定某个节点。

(2)CLUSTERLOG TOGGLE severity_level:使得指定的severity_level打开或者关闭。

例如,要将测试环境中的节点2的STARTUP事件只记录级别为3以下的日志,可以进入ndb_mgm后执行命令:

ndb_mgm>  clusterlog startup=
Executing CLUSTERLOG STARTUP= on node OK! ndb_mgm>

如果要在cluster中过滤掉DEBUG和INFO信息,可以执行如下命令:

ndb_mgm> clusterlog toggle debug info
DEBUG enabled
INFO disabled
ndb_mgm>

然后查看日志状态,发现DEBUG和INFO信息已经不存在了。

ndb_mgm> clusterlog info
Severities enabled: DEBUG WARNING ERROR CRITICAL ALERT
ndb_mgm>

总结:

通过几天学习,对mysql cluster有了初步了解,后续还会进一步的学习,虽然目前企业应用的并不多。我相信在将来一定会完善。功能会越来越强大。详细的参考还请大家阅读mysql的官方文档。

MySQL Cluster 日常维护的更多相关文章

  1. MySQL复制日常维护与管理

    一.复制一些常见设置 1.mysql复制启动时参数: mysql启动时的参数包括:master_host,master_port,master_user,master_password,master_ ...

  2. MySQL Cluster搭建与测试

    MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和Oracle Real Cluster Ap ...

  3. MySQL Cluster 集群

    本文转载 http://www.cnblogs.com/gomysql/p/3664783.html MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅 ...

  4. MySQL Cluster 与 MongoDB 复制群集分片设计及原理

    分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...

  5. mysql集群 MySQL Cluster

    <?php /* 郑重说明2015年6月11日16:28:14,目前为止MySQL Cluster 社区版不支持INNODB,商业版支持,但是授权价格20W左右,so看此文档之前,考虑下钱 My ...

  6. mha日常维护命令

    mha日常维护命令 http://m.blog.chinaunix.net/uid-28437434-id-3959021.html?/13033.shtml 1.查看ssh登陆是否成功masterh ...

  7. 第 16 章 MySQL Cluster

    前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和 Oracle Real Cl ...

  8. 32.Mysql Cluster

    32.Mysql Cluster Cluster是一组节点的组合.节点分为数据节点.SQL节点.管理节点.节点组合在一起可以为应用提供高可用.高性能.可缩放的Cluster数据管理.数据节点使用NDB ...

  9. MySql(十六):MySql架构设计——MySQL Cluster

    前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和 Oracle Real Cl ...

随机推荐

  1. 一天学习两个设计模式之Facade模式(外观模式,结构型模式)

    程序这东西随着时间推移,程序会越来越大,程序中的类越来越多,而且他们之间相互关联,这会导致程序结构变得越来越复杂.因此我们在使用他们时候,必须要弄清楚他们之间的关系才能使用他们. 特别是在调用大型程序 ...

  2. activity之间如何传递list

    可以把list的内容拼成json串再去解析

  3. POJ1644状态转移的思想——排列组合

    m个物品放n个盒子,盒子物品都相同,问你放的方法总数是多少 看着像个排列组合,算着算着就发现我排列组合都忘得差不多啦,哎,什么时候能打败遗忘呢 然后想用dp做,但是转移的方面没有想好 看了看题解感觉这 ...

  4. Mining Twitter Data with Python

    目录 1.Collecting data 1.1 Register Your App 1.2 Accessing the Data 1.3 Streaming 2.Text Pre-processin ...

  5. jQuery插件初级练习4

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. Effective C++ 第二版 31)局部对象引用和函数内new的指针 32)推迟变量定义

    条款31 千万不要返回局部对象的引用, 不要返回函数内部用new初始化的指针的引用 第一种情况: 返回局部对象的引用; 局部对象--仅仅是局部的, 在定义时创建, 在离开生命空间时被销毁; 所谓生命空 ...

  7. centeros6.8 下安装mysql教程

    1.1 安装Mysql 1.1.1 检查 l 检查是否已安装mysql的相关包 [root@localhost ~]# rpm -qa|grep -i mysql 一般情况下,centeros系统中会 ...

  8. 背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板

    [源码下载] 背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板 作者:webabcd 介绍背水一战 Windows 10 之 控件( ...

  9. iis支持asp.net4.0的注册命令使用方法

    32位的Windows: 1. 运行->cmd 2. cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 3. aspnet_regiis.exe ...

  10. es6新增Math方法

    Math.trunc()  用于去除一个数的小数部分,只返回整数部分 Math.trunc(4.1) // 4 Math.trunc(4.9) // 4 Math.trunc(-4.1) // -4 ...