MySQL日志,你知多少?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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;

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
18天前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
54 6
|
7月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
514 90
|
5月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
213 23
|
6月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
7月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
146 16
|
8月前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
282 5
图解MySQL【日志】——Redo Log
|
8月前
|
关系型数据库 MySQL 数据库
图解MySQL【日志】——两阶段提交
两阶段提交是为了解决Redo Log和Binlog日志在事务提交时可能出现的半成功状态,确保两者的一致性。它分为准备阶段和提交阶段,通过协调者和参与者协作完成。准备阶段中,协调者向所有参与者发送准备请求,参与者执行事务并回复是否同意提交;提交阶段中,若所有参与者同意,则协调者发送提交请求,否则发送回滚请求。MySQL通过这种方式保证了分布式事务的一致性,并引入组提交机制减少磁盘I/O次数,提升性能。
467 4
图解MySQL【日志】——两阶段提交
|
7月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
113 4
|
8月前
|
关系型数据库 MySQL
图解MySQL【日志】——磁盘 I/O 次数过高时优化的办法
当 MySQL 磁盘 I/O 次数过高时,可通过调整参数优化。控制刷盘时机以降低频率:组提交参数 `binlog_group_commit_sync_delay` 和 `binlog_group_commit_sync_no_delay_count` 调整等待时间和事务数量;`sync_binlog=N` 设置 write 和 fsync 频率,`innodb_flush_log_at_trx_commit=2` 使提交时只写入 Redo Log 文件,由 OS 择机持久化,但两者在 OS 崩溃时有丢失数据风险。
180 3
|
8月前
|
关系型数据库 MySQL 数据库
MySQL日志
本文介绍了MySQL中三个重要的日志:binlog、redolog和undolog。binlog记录数据库更改操作,支持数据恢复、复制和审计;redolog保证事务的原子性和持久性,实现crash-safe;undolog用于事务回滚及MVCC的实现。每个日志都有其独特的作用和应用场景,确保数据库的稳定性和数据一致性。
134 1

推荐镜像

更多