0
点赞
收藏
分享

微信扫一扫

mysql-日志

东林梁 2022-04-27 阅读 68
运维dba

一、日志的类型

类型:错误日志、二进制日志、慢日志、通用日志、事务日志

日志的作用:日志是mysql数据库的重要组成部分,日志文件中记录了mysql运行期间发生的变化

可以用来排错和数据分析,了解程序的运行情况,是否健康

二、错误日志

mysql默认开起错误日志,默认情况下,错误日志存放在mysql的数据目录下,名字是主机名.err

如果指定日志的路径,需要给mysql用户写的权限

查看错误日志的路径:

root@(none) 09:25  mysql>show variables like '%log_error%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| binlog_error_action | ABORT_SERVER                   |
| log_error           | /data/mysql/sc_mysql_error.log |
| log_error_verbosity | 3                              |
+---------------------+--------------------------------+
3 rows in set (0.00 sec)

主要记录的信息有:

  • mysql启动和关闭过程的信息
  • mysql运行中的错误信息
  • 配置文件出错也会记录

注意,mysql起不来首先看的就是错误日志,登录失败的原因一般都可以看到

三、慢日志

慢查询日志:记录执行时间超过指定时间的sql语句,通过慢日志,可以找出哪些查询语句的执行效率低,为数据库性能提升提供了优化线索

管理功能的sql语句默认不记录到慢日志里,但是可以开起

log_slow_admin_statements = 1

mysql默认是关闭的,可以通过修改配置文件my.cnf来开起

[mysqld]
socket=/data/mysql/mysql.sock
port = 3306
log-error=/data/mysql/sc_mysql_error.log
slow_query_log = 1  # 开起慢日志
long_query_time = 0.001  # 定义sql语句执行时间超过多少秒会被记录到慢日志中去

查询方法,ON表示开起

root@(none) 09:25  mysql>show variables like '%slow_query%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log      | ON                             |
| slow_query_log_file | /data/mysql/localhost-slow.log |
+---------------------+--------------------------------+
2 rows in set (0.00 sec)

四、通用日志

通用日志会记录用户的所有操作,会大量的消耗CPU、内存、磁盘等资源,默认情况下是不开启的,默认存在数据目录下,名字是主机名+log

临时开起:set global general_log = 1;

五、二进制日志

二进制日志主要用于记录用户修改数据或者可能改变数据的SQL语句(create、alter table、insert、update、delete)执行的时间、操作的数据

root@(none) 09:50  mysql>show variables like '%log_bin%';
+---------------------------------+---------------------------------+
| Variable_name                   | Value                           |
+---------------------------------+---------------------------------+
| log_bin                         | ON                              | #以开起
| log_bin_basename                | /data/mysql/localhost-bin       |
| log_bin_index                   | /data/mysql/localhost-bin.index |
| log_bin_trust_function_creators | OFF                             |
| log_bin_use_v1_row_events       | OFF                             |
| sql_log_bin                     | ON                              |
+---------------------------------+---------------------------------+
6 rows in set (0.00 sec)

日志格式

statement格式、row格式、mixed格式

statement:记录用户输入的SQL语句

特点:binlog文件较小,易于理解,但是存在安全隐患,可能导致主从不一致

row:记录表里的哪些行的数据发生了变化

特点:相比statement更加安全,更少的锁,数据一致性高,但是文件会比较大,无法从binlog中看见用户执行的语句

mysql5.7之后,默认的格式为Row格式

什么时候产生二进制日志:

service mysqld restart

当日志到达最大值1G的时候

查看正在使用的二进制日志

root@(none) 09:50  mysql>show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| localhost-bin.000004 |      154 |              |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

查看二进制日志:

mysqlbinlog vv  localhost-bin.000004

position:记录具体的事件的位置

time:时间点

数据恢复:

二进制日志里会记录什么时间发送了什么事情
恢复数据的时候:
    1.根据时间来恢复
    2.根据位置来恢复Position

二进制文件相关操作
SHOW BINARY LOGS  查看所有的二进制文件和大小
SHOW MASTER STATUS 查看当前正在使用那个二进制文件和位置
SHOW BINLOG EVENTS
PURGE BINARY LOGS TO 'WANGJING-MYSQL-bin.000003' 

二进制日志的删除

reset master :清除所有的二进制日志

自动清理日志:

 

 

六、事务日志

1、redo log

重做日志:记录事务对数据页做了哪些修改,适用于崩溃恢复

redo log 包括两个部分,一个是内存中的日志缓冲,另一个是磁盘是的日志文件,mysql 每执行一条 DML 语句,先将记录写入 redo log buffer ,后续某个时间点再一次性将多个操作记录写到 redo log file 。这种 先写日志,再写磁盘 的技术就是 MySQL里经常说到的 WAL(Write-Ahead Logging) 技术。

2、undo log

回滚日志:记录了数据的逻辑变化,事务四个特性中的原子性底层就是通过undo log 实现的

比如一条 ` INSERT语句,对应一条 DELETE  undo log ,对于每个 UPDATE 语句,对应一条相反的 UPDATE 
undo log 这样在发生错误时,就能回滚到事务之前的数据状态。同时, undo log 也是 MVCC `(多版本并发控制)实现的关键

详情请参考:必须了解的mysql三大日志-binlog、redo log和undo log - SegmentFault 思否

举报

相关推荐

Mysql-日志

mysql-日志管理-error.log

MySQL-索引

MySQL-事务

Mysql-笔记

MySQL-连接

MYSQL-索引

0 条评论