MySQL Cluster 日常维护
在前面几篇文章已经详细介绍了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 日常维护的更多相关文章
- MySQL复制日常维护与管理
一.复制一些常见设置 1.mysql复制启动时参数: mysql启动时的参数包括:master_host,master_port,master_user,master_password,master_ ...
- MySQL Cluster搭建与测试
MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和Oracle Real Cluster Ap ...
- MySQL Cluster 集群
本文转载 http://www.cnblogs.com/gomysql/p/3664783.html MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅 ...
- MySQL Cluster 与 MongoDB 复制群集分片设计及原理
分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...
- mysql集群 MySQL Cluster
<?php /* 郑重说明2015年6月11日16:28:14,目前为止MySQL Cluster 社区版不支持INNODB,商业版支持,但是授权价格20W左右,so看此文档之前,考虑下钱 My ...
- mha日常维护命令
mha日常维护命令 http://m.blog.chinaunix.net/uid-28437434-id-3959021.html?/13033.shtml 1.查看ssh登陆是否成功masterh ...
- 第 16 章 MySQL Cluster
前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和 Oracle Real Cl ...
- 32.Mysql Cluster
32.Mysql Cluster Cluster是一组节点的组合.节点分为数据节点.SQL节点.管理节点.节点组合在一起可以为应用提供高可用.高性能.可缩放的Cluster数据管理.数据节点使用NDB ...
- MySql(十六):MySql架构设计——MySQL Cluster
前言: MySQL Cluster 是一个基于 NDB Cluster 存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和 Oracle Real Cl ...
随机推荐
- 20145232 韩文浩 《Java程序设计》第8周学习总结
教材学习内容总结 14 NIO与NIO2 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 想要取得c ...
- 02:OC和C对比
1.源文件对比 C语言中常见源文件.h头文件,.c文件 文件扩展名 源类型 .h 头文件,用于存放函数声明 .c C语言源文件,用于实现头文件中声明的方法 OC中的源文件.h头文件,.m与.mm的实现 ...
- docker mac
官网上有安装方法.已安装成功. 容器千万不能随便删 现在已经不用boot2docker,使用dockertools来安装docker,dockertools中包含docker-machine,等等. ...
- JMS 消息队列
1.jms broker服务器:Broker:消息队列核心,相当于一个控制中心,负责路由消息.保存订阅和连接.消息确认和控制事务
- 8.css内容移出与精灵图
定位的盒子居中显示 ★:margin:0 auto; 只能让标准流的盒子居中对齐. ★定位的盒子居中:先左右走父元素盒子的一半50%,在向左走子盒子的一半(margin-left:负值.) 标签包含 ...
- Azure DevOps Server(TFS 2019) 中的SonarQube扫描任务出现错误:AppTest.java can't be indexed twice
SonarQube错误描述 将一个Maven示例程序导入到Azure DevOps的待库中,执行SonarQube扫描过程时, DevOps Server提示下面的错误信息: [ERROR] Fail ...
- C#导入Excel数据常见问题
今天在做一个excle数据导入的时候遇到了一个奇葩问题,项目使用的是MVC,在VS2010里面调试的时候没有问题,可是当发布到本地IIS或服务器上时就出现了问题: 1.excel文件正在被使用: 2. ...
- EF t4模板将实体与DBContext分离
在用EF DBFirst时,实体类是从数据库自动生成的,与DBContext放在同一个项目中.这样其他项目想引用实体,就会将数据库操作类暴露出来.所以,我们需要将实体分离. 新建项目EFAccess, ...
- prometheus比zabbix好在哪点?
分享网易云轻舟微服务选择基于 Prometheus 开发微服务监控系统的考量: 开源 云原生 与微服务监控需求的匹配度很高 开源 Prometheus是CNCF(云原生计算基金会)旗下成熟的开源项目, ...
- 基于tkinter的九型人格测试系统介绍
基于tkinter的九型人格测试系统介绍 一.程序代码地址,GitHub 二.程序介绍 1.login.py 登录界面: 注册界面: 2.mainWindow.py 登录成功之后的界面: 3.doTe ...