MySQL日志简介

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

MySQL中的日志主要分为以下几种:

    查询日志

    慢查询日志

    错误日志

    二进制日志

    中继日志

    事务日志


说明:

支持本文实验使用的linux系统是CentOS7版本,使用的数据库是base源自带的MariaDB,数据库使用的存储引擎使用默认的InnoDB


1、查询日志

记录查询语句、日志存储位置

日志的存放位置有两个地方:一是存储在指定文件中,一是存储在指定的表中。考虑到I/O压力,一般二者不会同时记录

1
2
3
4
5
6
7
8
9
MariaDB [mysql]>  SHOW VARIABLES LIKE  'general%' ;
+------------------+-------------+
| Variable_name    | Value       |
+------------------+-------------+
| general_log      | ON          |
| general_log_file | centos7.log |
+------------------+-------------+
2 rows  in  set  (0.00 sec)
#general_log默认是关闭的

从上述代码可以看出,查询日志具有两个变量;

下面来查看general_log表的详细信息:

1
2
3
4
5
6
7
8
9
10
11
12
MariaDB [mysql]> DESC  general_log;
+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| event_time   | timestamp(6)     | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host    | mediumtext       | NO   |     | NULL              |                             |
| thread_id    | int(11)          | NO   |     | NULL              |                             |
| server_id    | int(10) unsigned | NO   |     | NULL              |                             |
| command_type | varchar(64)      | NO   |     | NULL              |                             |
| argument     | mediumtext       | NO   |     | NULL              |                             |
+--------------+------------------+------+-----+-------------------+-----------------------------+
6 rows  in  set  (0.00 sec)

事件时间

用户主机

事件的进程id

服务id

命令类型

参数

以上这些信息构成了general_log的主要内容,即记录的查询日志的操作内容可以通过上述信息显示

1
2
SET @@global.general_log=ON; 
#默认此变量是全局的,但是修改后能够立即生效

开启查询日志后,接着我们进行一些查询操作如:

1
SELECT user,host,password FROM mysql.user;

这些查询操作就会被记录到日志文件centos7.log文件中,此文件是默认文件可以修改。而此文件的存放路径是相对路径即/var/lib/mysql/

1
2
cat   /var/lib/mysql/centos7 .log 
#能看到记录的查询操作了

以上演示的是日志信息记录在文件中,日志还可以记录在指定表中,只要修改一个变量即可:

1
2
SET @@global.log_output=TABLE;
#默认是FILE

关于表的日志记录与文件记录类似,不再演示


2、慢查询日志

慢查询:一条查询指令运行时间超出一定时长的操作,这种操作会对用户的体验大打折扣,应该尽量避免

一般建议启动此慢查询日志功能

1
2
3
4
5
6
7
MariaDB [mysql]> SELECT @@global.long_query_time;
+--------------------------+
| @@global.long_query_time |
+--------------------------+
|                10.000000 |
+--------------------------+
1 row  in  set  (0.00 sec)

默认的慢查询时间是10秒钟

1
2
3
4
5
6
SELECT @@global.slow_query_log;
#默认关闭慢查询日志
SELECT @@global.slow_query_log_file;
#默认文件名称为主机名-slow.log,如centos7-slow.log 
SELECT @@global.log_output;  
#默认是文件记录

并不是所有的指令执行时间超过10秒钟都会记录,其是有一个过滤器的

1
2
SELECT @@global.log_slow_filter;
#此变量指定的指令才会使用慢查询

慢查询日志的用法与general_log的基本相同,不再赘述


3、错误日志

顾名思义,记录错误信息,主要记录如下几类信息:

(1) mysqld启动和关闭过程中输出的信息; 

(2) mysqld运行中产生的错误信息; 

(3) event scheduler运行时产生的信息;

(4) 主从复制架构中,从服务器复制线程启动时产生的日志;

错误日志是否开启,可以使用下述命令查看

1
2
3
SELECT @@global.log_error;
#默认是开启的,即指定具体日志文件路径 如/var/log/mariadb/mariadb.log 
#如果未开启,则查询的结果是OFF


4、二进制日志

用于记录引起数据改变或存在引起数据改变的潜在可能性的语句(STATEMENT)或改变后的结果(ROW),也可能是二者混合;

作用:

    重放 (replay),即发生故障时可以使用二进制日志重新操作一遍故障发生前的指令

试想一下,在进行了全量备份数据库后,过了一天主数据库设备突然出现故障,这时我们虽然能够使用全量备份来恢复数据库,但是前一天的数据还未来得及备份,也就是说

少了一天的数据,这种情况下就可以使用二进制日志恢复缺失的一天的信息;

下面举个例子说明二进制日志在数据恢复中的重要作用:

  •     创建数据库、表,插入数据

1
2
3
4
CREATE DATABASE RDBMS;
USE RDBMS;
CREATE TABLE tbl ( id  int primary key,name char(30) not null,age int not null);
INSERT INTO tbl VALUES (1, 'xiao wang' ,20),(2, 'xiao li' ,22);
  • 检查信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MariaDB [RDBMS]> DESC tbl;         
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
id     | int(11)  | NO   | PRI | NULL    |       |
| name  | char(30) | NO   |     | NULL    |       |
| age   | int(11)  | NO   |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows  in  set  (0.00 sec)
 
MariaDB [RDBMS]> SELECT * FROM tbl;
+----+-----------+-----+
id  | name      | age |
+----+-----------+-----+
|  1 | xiao wang |  20 |
|  2 | xiao li   |  22 |
+----+-----------+-----+
2 rows  in  set  (0.00 sec)
  • 修改mysql的服务配置文件,开启二进制日志功能

1
2
3
4
5
6
rpm -ql mariadb-server
#可以查到配置文件的位置
vim  /etc/my .cnf.d /server .cnf
[server]
log_bin =  /app/logs/master-log
#指定二进制日志的存放路径,之所以在配置文件修改而不用命令行,是因为命令行不支持开启二进制日志功能
  • 查看二进制日志信息

1
2
3
4
5
6
SHOW MASTER|BINARY LOGS;
#查看二进制日志文件列表
SHOW MASTER STATUS;
#查看当前正在使用的二进制日志文件
SHOW BINLOG EVENTS IN  'master-log.000001' ;
#查看二进制日志文件的事件信息
  • 将当前数据库进行全量备份

1
2
3
mysqlbinlog  -uroot -p master-log.000001 >  /root/binlog .sql
#binlog.sql就是备份的数据库文件
#mysqlbinlog是mysql自带的二进制日志工具

当在全新的备份服务器上就行恢复时

1
mysql <  /root/binlog .sql

按上述方式恢复即可


在/app/logs/下的二进制文件是无法直接使用cat或less查看的,所以需要使用mysqlbinlog专用工具

1
2
3
mysqlbinlog  -uroot -pcentos master-log.000007 -j 430 --stop-position=874
#-j 指定开始位置
#--stop-position指定结束位置

查看的内容包含以下信息:

事件的起始位置# at 553

事件发生的日期时间:#160831  9:56:08

事件发生的服务器id:server id 1

事件的结束位置:end_log_pos 624

事件的类型:Query

事件发生时所在服务器执行此事件的线程的ID: thread_id=2 

语句的时间戳与将其写入二进制日志文件中的时间差:exec_time=0

错误代码:error_code=0

设定事件发生时的时间戳:SET TIMESTAMP=1472608568/*!*/;

事件内容:BEGIN


以上就是关于mysql日志的简单介绍


本文转自  a_pan  51CTO博客,原文链接:http://blog.51cto.com/panpangao/1980875


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
24天前
|
监控 关系型数据库 MySQL
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
42 3
|
6天前
|
关系型数据库 MySQL 数据管理
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
|
13天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中,如何通过PolarDB for MySQL来查看binlog日志
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
28 1
|
13天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志
|
19天前
|
SQL 存储 关系型数据库
MySQL慢日志的介绍以及如何使用问题
MySQL慢日志的介绍以及如何使用问题
19 0
|
3天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
10 0
|
1天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
16 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
3天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
|
4天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
15 0
|
11天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)