MySQL日志,你知多少?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 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;

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