探索MySQL-Cluster奥秘系列之日志管理(12)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 无论是对于哪种数据库产品,日志的重要性是不言而喻的,所以掌握如何对于MySQL-Cluster集群的日志进行管理,对于我们每一个维护MySQL-Cluster技术人员来说都是非常重要的。

作为数据库的维护人员(即 DBA),除了工作中在应用端对数据库进行增删改操作外,更多是需要每天巡检与常规维护运行的 MySQL Cluster 环境,确保 MySQL Cluster 环境可以正常运行。所以说,我们需要掌握 MySQL Cluster 维护性方面的技能例如如何通过日志信息排查问题如何对数据进行有效的备份等

这一小节,我们就先来看一下 MySQL Cluster 集群环境日志管理的内容,主要讲解MySQL Cluster环境出现问题时如何来诊断,以及对日志在信息输出上进行一些细粒度的控制。

MySQL Cluster 集群日志主要分为集群日志、节点日志:

  • 集群日志文件存储于管理节点上,用来记录整个集群的运行情况,如各个节点的连通性等,以及所有节点的运行情况。
  • 节点日志文件存储于单独的某个节点上,只是用来记录本地节点上的服务运行情况。

首先我们来看集群日志文件在管理上面的内容。

集群日志文件

集群日志文件默认位于管理节点上的 datadir 目录下,我们可以看一下当前环境的配置文件。

[mysql@mysql03 mysql_cluster]$ more config.ini 
[ndbd default]
NoOfReplicas=2
DataMemory=200M
IndexMemory=30M
[ndb_mgmd]
hostname=192.168.1.3
datadir=/mysql/mydata
[ndbd]
hostname=192.168.1.6
datadir=/mysql/mydata
[ndbd]
hostname=192.168.1.7
datadir=/mysql/mydata
[mysqld]
hostname=192.168.1.4
[mysqld]
hostname=192.168.1.5

在当前的配置文件中,datadir 目录路径为 /mysql/mydata,集群日志文件命名为 ndb_1_cluster.log,文件名中的 1 代表的是管理节点的 nodeid,下面这段代码中显示的管理节点的id=1,那么其实在工作中如果不清楚某一个数据节点或者SQL节点的id值,则可以在ndb_mgm控制台上进行查看。

[mysql@mysql03 mydata]$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show;
Connected to Management Server at: localhost:1186
Cluster Configuration
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.1.6)
id=3 (not connected, accepting connect from 192.168.1.7)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.3 (mysql-5.7.36 ndb-7.6.20)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.1.4)
id=5 (not connected, accepting connect from 192.168.1.5)

我们来看一下集群日志文件 ndb_1_cluster.log 中所记录的信息。

[mysql@mysql03 mydata]$ tail -30 ndb_1_cluster.log 
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LAST_LCP_FRAG_ORD = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_From_Master_Received = 1
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: GCP Take over started
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: Node 3 taking over as DICT master
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: GCP Take over completed
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: kk: 63150/7 0 0
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: LCP Take over completed (state = 4)
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: ParticipatingDIH = 0000000000000000
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: ParticipatingLQH = 0000000000000000
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_Counter_DIH = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_Counter_LQH = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_lastLCP_COMPLETE_REP_id = 6
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_lastLCP_COMPLETE_REP_ref = f60002
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: noOfLcpFragRepOutstanding: 0
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LAST_LCP_FRAG_ORD = [SignalCounter: m_count=0 0000000000000000]
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: m_LCP_COMPLETE_REP_From_Master_Received = 1
2022-03-22 17:25:47 [MgmtSrvr] INFO     -- Node 3: NR Status: node=2,OLD=Node failed, fail handling ongoing,NEW=Node failure handling complete
2022-03-22 17:25:48 [MgmtSrvr] INFO     -- Node 3: Started arbitrator node 1 [ticket=1396000207fa2381]
2022-03-22 17:25:51 [MgmtSrvr] INFO     -- Node 3: Communication to Node 2 opened
2022-03-22 17:26:03 [MgmtSrvr] INFO     -- Node 3: Node shutdown completed. Initiated by signal 15.
2022-03-22 17:26:03 [MgmtSrvr] ALERT    -- Node 1: Node 3 Disconnected
2022-03-22 17:31:48 [MgmtSrvr] INFO     -- Shutting down server...
2022-03-22 17:31:55 [MgmtSrvr] INFO     -- Shutdown complete
2022-03-22 17:32:40 [MgmtSrvr] INFO     -- Loaded config from '/usr/local/mysql/mysql-cluster/ndb_1_config.bin.1'
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- Node 1: Node 1 Connected
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- Id: 1, Command port: *:1186
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- MySQL Cluster Management Server mysql-5.7.36 ndb-7.6.20 started
2022-03-22 17:32:41 [MgmtSrvr] INFO     -- Node 1 connected
2022-03-22 17:33:11 [MgmtSrvr] INFO     -- Loaded config from '/usr/local/mysql/mysql-cluster/ndb_1_config.bin.1'
2022-03-22 17:33:11 [MgmtSrvr] ERROR    -- Couldn't start as daemon, error: 'Failed to lock pidfile '/mysql/mydata/ndb_1.pid', already locked by pid=3193, errno: 11'

通过日志的输出可以看到,集群日志文件中记录了每个数据节点及每个SQL节点的运行情况,还显示了不同级别的信息,如上面的日志中包括有 INFO、ALERT、ERROR,当然除了这几类,还有 WARNING、CRITICAL和DEBUG 级别。这几类日志级别的信息严重程度不同,是逐级递减的,顺序下:ALERT、CRITICAL、ERROR、WARNING、INFO、DEBUG。

每个级别的日志所表描述的日志信息内容如下:

严重级别

事件定义

ALERT

应立刻更正的情况,如损坏的系统数据库

CRITICAL

临界状况,如设备错误或资源不足

ERROR

应予以更正的状况,如配置错误

WARNING

不能称为错误的情况,但仍需要特别处理

INFO

通报性信息

DEBUG

调试信息,用于NDB Cluster开发

在工作中,当遇到 WARNING 及以上级别的日志信息时,需要格外注意并及时处理了。

在了解完不同级别的日志所代表的信息后接下来我们继续对集群日志信息进行一些自定义的操作,因为在集群日志文件中会集中显示所有数据节点和SQL节点的运行情况,在日志的输出上是非常大的,这样会给我们在排查问题上带来一些不便,所以我们在工作中很有必须对于一些不太关注的信息进行屏蔽比如:

  • 临时关闭集群日志信息的输出;
  • 或者关闭某几个级别的日志信息输出(像 INFO 和 DEBUG 级别的日志信息只是输出一些常规的运行情况,这些信息对问题的排查起不到有效作用)。

首先我们来看一下,如果关闭集群全部的日志信息,具体要怎么操作。

当磁盘的空间比较紧张或者在一些压力测试的场景下,我们不怎么在意集群的日志信息输出,这时可以将集群的日志信息整体关闭,关闭时要在管理节点上的 ndb_mgm 控制台下进行操作,具体如何操作呢?接下来我们进行一个演示。

[mysql@mysql03 mydata]$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> clusterlog info;
Severities enabled: INFO WARNING ERROR CRITICAL ALERT  
ndb_mgm> clusterlog off;
Cluster logging is disabled
ndb_mgm> clusterlog info;
Cluster logging is disabled.
ndb_mgm> clusterlog on;
Cluster logging is enabled.
ndb_mgm> clusterlog info;
Severities enabled: INFO WARNING ERROR CRITICAL ALERT

通过上面的代码,我们可以掌握以下几点信息:

  • 关闭集群日志功能是使用 clusterlog off 命令来实现;
  • 开启集群日志功能是使用 clusterlog on 命令来实现;
  • 查看当前的日志级别使用 clusterlog info 命令;
  • 默认开启的日志级别为 INFO WARNING ERROR CRITICAL ALERT。

由于 DEBUG 级别的日志信息是用来调试和观察数据库内部运行机理,在日志输出上更为详细,同时输出的日志量也非常大,所以我们一般不需要开启。如果要进行开启 DEBUG 级别的日志信息输出,可以使用如下的方式:

ndb_mgm> clusterlog toggle  debug;
DEBUG enabled
ndb_mgm> clusterlog info;
Severities enabled: DEBUG INFO WARNING ERROR CRITICAL ALERT

那么如何只开启部分级别的日志输出呢?同样是需要在 ndb_mgm 控制台操作,例如我们只需要开启WARNING 及以上级别的日志输出,则可以这样进行操作:

ndb_mgm> clusterlog info;
Severities enabled: DEBUG INFO WARNING ERROR CRITICAL ALERT 
ndb_mgm> clusterlog toggle debug  info;
DEBUG disabled
INFO disabled
ndb_mgm> clusterlog info;
Severities enabled: WARNING ERROR CRITICAL ALERT

即对于某个级别日志信息输出功能的开启和关闭是使用 clusterlog toggle 命令实现的,在操作上非常简单。以上是集群日志文件日常管理方面内容的讲解。接下来,我们来看一下节点日志文件,在节点日志方面,因为其是存放在各自的节点上的,在日志的输出上也只是显示当前节点的运行情况,所以大家只需要了解每种节点(数据节点、SQL 节点)上日志文件存放的位置就行这样当某个节点出现故障时,要知道从哪里可以获取到相关的信息

节点日志文件

数据节点的日志文件默认时存放在 datadir 目录下,名称一般为 ndb_<nodeid>_out.log。如环境中的ndb_3_out.log。

[mysql@mysql07 ~]$ ls -l /mysql/mydata/
total 80
drwxr-x--- 11 mysql mysql    99 Mar  8 22:34 ndb_3_fs
-rw-r--r--  1 mysql mysql 76331 Mar 10 13:28 ndb_3_out.log
-rw-r--r--  1 mysql mysql     4 Mar 10 13:28 ndb_3.pid

而 SQL 节点的日志文件默认时存放在 datadir 目录下,名称一般为<hostname>.err。如环境中的mysql04.err。

[mysql@mysql04 mydata]$ ls -l /mysql/mydata/
total 123020
-rw-r----- 1 mysql mysql       56 Mar  8 22:35 auto.cnf
-rw------- 1 mysql mysql     1676 Mar  8 22:35 ca-key.pem
-rw-r--r-- 1 mysql mysql     1140 Mar  8 22:35 ca.pem
-rw-r--r-- 1 mysql mysql     1140 Mar  8 22:35 client-cert.pem
-rw------- 1 mysql mysql     1680 Mar  8 22:35 client-key.pem
-rw-r----- 1 mysql mysql      358 Mar 10 11:09 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Mar 10 13:28 ibdata1
-rw-r----- 1 mysql mysql 50331648 Mar 10 13:28 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Mar  8 22:35 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Mar 10 13:28 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Mar  8 22:36 mysql
-rw-r----- 1 mysql mysql    55332 Mar 10 13:28 mysql04.err
-rw-r----- 1 mysql mysql        5 Mar 10 13:28 mysql04.pid
srwxrwxrwx 1 mysql mysql        0 Mar 10 13:28 mysql.sock
-rw------- 1 mysql mysql        5 Mar 10 13:28 mysql.sock.lock
drwxr-x--- 2 mysql mysql     4096 Mar  8 22:35 ndbinfo
drwxr-x--- 2 mysql mysql     8192 Mar  8 22:35 performance_schema
-rw------- 1 mysql mysql     1676 Mar  8 22:35 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Mar  8 22:35 public_key.pem
-rw-r--r-- 1 mysql mysql     1140 Mar  8 22:35 server-cert.pem
-rw------- 1 mysql mysql     1680 Mar  8 22:35 server-key.pem
drwxr-x--- 2 mysql mysql     8192 Mar  8 22:35 sys
drwxr-x--- 2 mysql mysql      104 Mar 10 09:53 testdb

好了,以上就是 MySQL Cluster 集群环境中,日志管理方面内容的讲解。在下一小节中,我们开始讲解MySQL Cluster 集群环境的备份。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
108 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1621 14
|
2天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的撤销日志文件和错误日志文件
本文介绍了MySQL的物理存储结构,重点讲解了InnoDB存储引擎中的撤销日志文件(undo log)和错误日志文件。从MySQL 8.0开始,默认生成两个10MB的undo表空间文件,并支持动态扩容和收缩。错误日志文件记录了MySQL启动、运行、关闭过程中的问题,通过示例展示了如何查看和使用这些日志。
|
1月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
27 1
|
1月前
|
关系型数据库 MySQL 数据库
DZ社区 mysql日志清理 Discuz! X3.5数据库可以做定期常规清理的表
很多站长在网站日常维护中忽略了比较重要的一个环节,就是对于数据库的清理工作,造成数据库使用量增加必须多的原因一般有2个:后台站点功能开启了家园,此功能现在很少有论坛会用到,但是灌水机会灌入大量垃圾信息致使站长长时间未能发觉;再有就是程序默认的一些通知类表单会存放大量的、对于网站日常运行并无意义的通知信息。
66 2
|
24天前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
45 0
|
3月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
153 0
|
3月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
99 0
|
3月前
|
存储 关系型数据库 MySQL
深入MySQL:事务日志redo log详解与实践
【8月更文挑战第24天】在MySQL的InnoDB存储引擎中,为确保事务的持久性和数据一致性,采用了redo log(重做日志)机制。redo log记录了所有数据修改,在系统崩溃后可通过它恢复未完成的事务。它由内存中的redo log buffer和磁盘上的redo log file组成。事务修改先写入buffer,再异步刷新至磁盘,最后提交事务。若系统崩溃,InnoDB通过redo log重放已提交事务并利用undo log回滚未提交事务,确保数据完整。理解redo log工作流程有助于优化数据库性能和确保数据安全。
541 0
|
3月前
|
存储 SQL 关系型数据库
MySQL事务日志奥秘:undo log大揭秘,一文让你彻底解锁!
【8月更文挑战第24天】本文深入探讨了MySQL中undo log的关键作用及其在确保事务原子性和一致性方面的机制。MySQL通过记录事务前的数据状态,在需要时能回滚至初始状态。主要介绍InnoDB存储引擎下的undo log实现,包括undo segment和record的结构,而MyISAM则采用redo log保障持久性而非一致性。通过一个简单的SQL回滚示例,展示了undo log如何在实际操作中发挥作用,帮助读者更好地理解并运用MySQL事务管理功能。
324 0