MySQL的日志学习

一、错误日志

记录数据库启动,运行,关闭的过程,记录错误,警告,正常的信息。

1.1配置错误日志

首先我们得在my.cnf中配置错误日志

[root@localhost log]# vi /etc/my.cnf
log-error=/mysql/log/error.log
expire_logs_days=100 配置完得重启数据库 [root@localhost log]# systemctl restart mysqld

1.2查看错误日志

mysql> show variables like '%log_error%';
+---------------------+----------------------+
| Variable_name       | Value                |
+---------------------+----------------------+
| binlog_error_action | ABORT_SERVER         |
| log_error           | /mysql/log/error.log |
| log_error_verbosity | 3                    |
+---------------------+----------------------+
3 rows in set (0.02 sec)

1.3 log_error_verbosity参数

      1    只记录错误日志

      2     记录错误日志+警告日志

      3     错误、警告、正常  默认3

1.4 expire_logs_days参数

mysql中的expire_logs_days参数,主要用来控制binlog日志文件保留时间,超过保留时间的binlog日志会被自动删除。比如我们指定expire_logs_days=7,表示表示最近7天的binlog日志,7天以前的binlog日志会被自动删除。

二 、二进制日志(binlog)

记录数据库发生更改的SQL语句,以二进制方式保存在磁盘中。

主要作用:恢复、复制、审计。

特点:记录的SQL语句的形式,事务提交的时候才写bin_log日志文件,提交之前写bin_log buffer中。

2.1 开启binlog

[root@localhost log]# mkdir binlog

[root@localhost log]# chown mysql:mysql binlog

vi  /etc/my.cnf
log_bin=/mysql/log/binlog/BIN_LOG
log_bin_index=/mysql/log/binlog/BIN_LOG.index

 2.2查看binlog

mysql> show variables like '%log_bin%'
    -> ;
+---------------------------------+---------------------------------+
| Variable_name                   | Value                           |
+---------------------------------+---------------------------------+
| log_bin                         | ON                              |
| log_bin_basename                | /mysql/log/binlog/BIN_LOG       |
| log_bin_index                   | /mysql/log/binlog/BIN_LOG.index |
| log_bin_trust_function_creators | OFF                             |
| log_bin_use_v1_row_events       | OFF                             |
| sql_log_bin                     | ON                              |
+---------------------------------+---------------------------------+
6 rows in set (0.01 sec)

2.3 查看日志文件

[root@localhost binlog]# mysqlbinlog -vv BIN_LOG.000001 
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#220924  9:11:55 server id 6  end_log_pos 123 CRC32 0x5f0cbd89     Start: binlog v 4, server v 5.7.20-log created 220924  9:11:55 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
W1kuYw8GAAAAdwAAAHsAAAABAAQANS43LjIwLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABbWS5jEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AYm9DF8=

三、 慢查询日志

正在执行的语句是不能查询到的。

3.1 开启慢查询日志

vi  /etc/my.cnf
slow_query_log=1
slow_query_log_file=/mysql/log/slow_query.log
slow_query_time=5

3.2   查看慢查询日志参数

mysql> show variables like '%query%';
+------------------------------+---------------------------+
| Variable_name | Value |
+------------------------------+---------------------------+
| binlog_rows_query_log_events | OFF |
| ft_query_expansion_limit | 20 |
| have_query_cache | YES |
| long_query_time | 5.000000 |
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
| slow_query_log | ON |
| slow_query_log_file | /mysql/log/slow_query.log |
+------------------------------+---------------------------+
13 rows in set (0.02 sec)

3.4  查看慢查询日志

mysql> select sleep(10);
+-----------+
| sleep(10) |
+-----------+
|         0 |
+-----------+
1 row in set (10.00 sec)

[root@localhost log]# mysqldumpslow slow_query.log 

Reading mysql slow query log from slow_query.log
Count: 1  Time=10.00s (10s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost
  select sleep(N)

四、通用日志 (general  log)

记录所有对数据的请求信息,生产环境不建议看,记录范围太广,日志太多,数据库性能受影响。

4.1  查看日志参数

mysql> show variables like '%gener%';
+------------------+---------------------------+
| Variable_name    | Value                     |
+------------------+---------------------------+
| general_log      | OFF                       |
| general_log_file | /mysql/data/localhost.log |
+------------------+---------------------------+
2 rows in set (0.01 sec)

4.2  临时开启通用日志

mysql> set @@global.general_log=on;
Query OK, 0 rows affected (0.02 sec)

4.3 查看通用日志

[root@localhost data]# cat localhost.log 
/mysql/app/mysql/bin/mysqld, Version: 5.7.20-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
2022-09-24T03:07:06.324892Z        3 Query    select * from mysql.user

五、重做日志 (redo  log)

在数据库挂了以后,通过redo log +旧的数据库进行数据的前滚,在 通过undo进行回滚,保证数据的一致性。

记录DML日志,redolog是循环的;

只是对InnonDB表有效。

redo  log  buffer  写入redo log file的出发机制:

1) 每1s写;

2)大于log buffer 一半的空间时候写;

3)commit的时候写;

4)日志先写机制,后台的脏页没有写入磁盘的时候,先写入日志;

5.1 查看日子参数

mysql> show variables like '%innodb_log%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| innodb_log_buffer_size      | 16777216 |
| innodb_log_checksums        | ON       |
| innodb_log_compressed_pages | ON       |
| innodb_log_file_size        | 50331648 |
| innodb_log_files_in_group   | 2        |
| innodb_log_group_home_dir   | ./       |
| innodb_log_write_ahead_size | 8192     |
+-----------------------------+----------+
7 rows in set (0.01 sec)

5.2 查看日志文件

 

 六 、中继日志 (rely  log)

与二进制日志类似,从服务器接受主服务器发来的变更日志。

6.1 查询中继日志

mysql> show variables like '%relay%';
+---------------------------+---------------------------------------+
| Variable_name             | Value                                 |
+---------------------------+---------------------------------------+
| max_relay_log_size        | 0                                     |
| relay_log                 |                                       |
| relay_log_basename        | /mysql/data/localhost-relay-bin       |
| relay_log_index           | /mysql/data/localhost-relay-bin.index |
| relay_log_info_file       | relay-log.info                        |
| relay_log_info_repository | FILE                                  |
| relay_log_purge           | ON                                    |
| relay_log_recovery        | OFF                                   |
| relay_log_space_limit     | 0                                     |
| sync_relay_log            | 10000                                 |
| sync_relay_log_info       | 10000                                 |
+---------------------------+---------------------------------------+
11 rows in set (0.01 sec)

七、 DDL日志

记录元数据的DDL操作。

八、套接字文件

进行网络通信的五种信息:协议、本地IP、本地协议端口、远程IP、远程协议端口。

8.1查看参数文件

mysql> show variables like '%socket%';
+-----------------------------------------+-----------------+
| Variable_name                           | Value           |
+-----------------------------------------+-----------------+
| performance_schema_max_socket_classes   | 10              |
| performance_schema_max_socket_instances | -1              |
| socket                                  | /tmp/mysql.sock |
+-----------------------------------------+-----------------+
3 rows in set (0.01 sec)

九、PID文件

文件记录的是当前 mysqld 进程的 pid,pid 亦即 Process ID,文件的作用是:在数据文件是同一份,但端口不同的情况下,防止同一个数据库被启动多次。

9.1 查看参数

mysql> show variables like '%pid%';
+------------------------+---------------------------+
| Variable_name          | Value                     |
+------------------------+---------------------------+
| log_syslog_include_pid | ON                        |
| pid_file               | /mysql/data/localhost.pid |
+------------------------+---------------------------+
2 rows in set (0.01 sec)

十、 表结构文件

后缀名为 .frm

mysql> create table zg(id int);
Query OK, 0 rows affected (0.05 sec)
[root@localhost tes1]# ll
总用量 112
-rw-r----- 1 mysql mysql    61 9月  24 15:19 db.opt
-rw-r----- 1 mysql mysql  8556 9月  24 15:20 zg.frm
-rw-r----- 1 mysql mysql 98304 9月  24 15:20 zg.ibd

十一、表空间相关的文件

11.1表空间文件

innodb_file_per_table  如果为OFF/0 ,就是共享表空间;参数为ON的为独立表空间;

mysql> show variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.01 sec)

重做日志文件:

mysql> show variables like '%innodb_log%';

UNDO 文件:

mysql> show variables like '%innodb_undo%';

 

posted @ 2022-09-24 16:15  中仕  阅读(89)  评论(0)    收藏  举报