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%';
浙公网安备 33010602011771号