MySQL日志,你知多少?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL日志,你知多少?

1. MySQL 日志文件

一、日志文件

MySQL 使用多种日志文件来记录服务器的运行活动,常见的日志包括:

错误日志 (error log)

记录mysqld启动、运行和停止过程中遇到的问题

常规日志 (general query log)

记录客户端连接以及服务器从客户端收到的各类SQL语句

慢查询日志 (slow query log)

记录运行时间超过选项long_query_time设定阈值的查询语句

二进制日志 (binary log)

记录使数据库数据产生变化的各类语句

日志文件的特点:

有可能会占用大量磁盘空间

通常存储在文件中

可以选择存储在mysql的表中,便于查询和分析

仅限于常规查询和慢查询日志

除了二进制日志,通常以文本格式记录数据

二、MySQL 错误日志

默认开启

日志位置

mysql> show variables like ‘log_error’;

三、MySQL 常规日志

默认关闭

日志位置

mysql> show variables like ‘general_log%’;

默认名称:hostname.log

开启常规日志

mysql> set global general_log=on; (可同时修改/etc/my.cnf以保存服务重启后状态)

测试

mysql> select count(*) from mysql.user;

root# cat /var/lib/mysql/hostname.log

mysql> set global general_log=off; 关闭

四、MySQL 慢查询日志

默认关闭

日志位置

mysql> show variables like ‘slow_query_log%’;

mysql> show variables like ‘long_query_time%’;

默认名称:hostname-slow.log

long_query_time默认时长10秒,执行超过10秒的查询语句会记录到慢查询日志中

慢查询日志

mysql> set global slow_query_log=on;(可同时修改/etc/my.cnf以保存服务重启后状态)

测试

mysql> select count(*) from mysql.user;

root# cat /var/lib/mysql/hostname-slow.log

mysql> set global slow_query_log=off; 关闭

2. 二进制日志BINLOG

一、简介

内容

BINLOG记录数据库的变更过程。例如创建数据库、建表、修改表等DDL操作、以及数据表的相关DML操作,这些操作会导致数据库产生变化,开启binlog以后导致数据库产生变化的操作会按照时间顺序以“事件”的形式记录到binlog二进制文件中,默认关闭

用途

用户对主数据库SQL语句操作中的DML、DDL、DCL、TCL等语句会对数据库的状态产生变化操作,变化以事件的形式按照时间顺序记录到主数据库的BINLOG二进制日志中

在建立从属数据库时,为了复制主库的数据使从库和主库一模一样,主库需要开启BINLOG日志,然后配置从属数据库,将主库产生的BINLOG日志定期通过网络传递到从数据库

从数据库库接受到主库传递过来的BINLOG后,按照日志中记录的变更事件重新应用日志

利用BINLOG日志最终起到从库和主库数据保持一致的状态,即复制了和主数据库一模一样的从数据库

数据库复制


数据库恢复

三、MySQL 开启BINLOG

MySQL默认没有开启BINLOG

查看BINLOG是否开启

mysql> show variables like ‘%log_bin%’;

如果log_bin的值为OFF说明没有开启binlog

开启BINLOG

root# vi /etc/my.cnf

在[mysqld]下面添加下面2行内容

server-id=1     #mysql5.7以上需要添加

log-bin=mysql-bin

root# systemctl restart mysqld

mysql> show variables like ‘%log_bin%’;

如果log_bin的值为ON说明binlog已开启

root# ls -l /var/lib/mysql/mysql-bin*

四、MySQL BINLOG记录格式

binlog记录格式分为:

语句级(statement)

行级 (row)   (5.5, 5.6, 5.7版本默认)

混合级 (mixed)

mysql> show variables like ‘%binlog_format%’;

基于语句(STATEMENT)的二进制日志记录:

包含实际 SQL 语句

包括 DDL(CREATE、 DROP 等)和 DML(UPDATE、 DELETE 等)语句

日志占用相对较小的磁盘空间和网络带宽

并非所有主库的的语句都能在远程从库上正确应用,例如一些包括now(),sleep(),uuid()等函数的语句在从库上无法做到和主库一致,数据和主库产生偏差

要求主库和从库上复制的表和列完全相同

基于行(ROW)的二进制日志记录:

日志占用相对较大的磁盘空间和网络带宽

所有主库的的语句都能在远程从库上正确应用 (复制数据库时最安全)

要求从库上MySQL版本和行结构与主库必须完全相同

DDL、DML、DCL、TCL等语句对应的事件部分采用二进制格式

从日志中查找特定语句对应的事件难度相对较高

混合级(mixed)的二进制日志记录:

由 MySQL 选取最适合单个事件的格式,基于语句还是基于行来记录事件

MySQL 通常会使用基于语句的二进制日志,但在需要时可恢复到基于行的复制

五、列出BINLOG文件

列出所有binlog日志

mysql> show binary logs;

列出当前binlog日志

mysql> show master status;

六、BINLOG日志切换

下列3种情况会导致BINLOG日志切换:

MySQL启动或重启

日志量到达了max_binlog_size的设定值

执行flush logs;命令手动切换日志

mysql> flush logs;

七、查看BINLOG内容

binlog以紧凑的二进制方式存储

日志中包含数据和表结构更改事件及其时间戳

无法使用普通的文本查看软件查看其内容

MySQL提供mysqlbinlog 工具

可将二进制数据转成SQL文本格式

在标准输出中查看binlog内容

root# mysqlbinlog /var/lib/mysql/mysql-bin.000001

结合more命令查看binlog内容

root# mysqlbinlog /var/lib/mysql/mysql-bin.000001 | more

将binlog内容的SQL语句重定向到文件

root# mysqlbinlog /var/lib/mysql/mysql-bin.000003 > /root/3.sql

mysqlbinlog 输出中,事件前面会提供相关信息的头注释:

cat /root/3.sql

查看binlog中部分内容,自定义起始和结束头标注

mysqlbinlog --start-position=219 --stop-position=546  /var/lib/mysql/mysql-bin.000005

八、查看BINLOG中的事件

查看第一个binlog日志中的事件

mysql> show binlog events;

查看指定binlog日志中的事件

mysql> show binlog events in ‘mysql-bin.000005’;

查看指定binlog日志中的事件,指定事件起始头注释

mysql> show binlog events in ‘mysql-bin.000005’ from 219;

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