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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 无论是对于哪种数据库产品,日志的重要性是不言而喻的,所以掌握如何对于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 集群环境的备份。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9天前
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
46 10
|
5天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
24 3
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
152 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
21天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
1月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
|
1月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的binlog日志文件
MySQL的binlog日志记录了所有对数据库的更改操作(不包括SELECT和SHOW),主要用于主从复制和数据恢复。binlog有三种模式,可通过设置binlog_format参数选择。示例展示了如何启用binlog、设置格式、查看日志文件及记录的信息。
133 6
|
1月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的慢查询日志
MySQL的慢查询日志用于记录执行时间超过设定阈值的SQL语句,帮助数据库管理员识别并优化性能问题。通过`mysqldumpslow`工具可查看日志。本文介绍了如何检查、启用及配置慢查询日志,并通过实例演示了慢查询的记录与分析过程。
153 3
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1712 14
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的撤销日志文件和错误日志文件
本文介绍了MySQL的物理存储结构,重点讲解了InnoDB存储引擎中的撤销日志文件(undo log)和错误日志文件。从MySQL 8.0开始,默认生成两个10MB的undo表空间文件,并支持动态扩容和收缩。错误日志文件记录了MySQL启动、运行、关闭过程中的问题,通过示例展示了如何查看和使用这些日志。
|
2月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
34 1