七、MySQL 日志


一、日志简介

1、启动和设置二进制日志

2、查看二进制日志

3、删除二进制日志

4、使用二进制日志恢复数据库

5、暂时停止二进制日志功能

二、二进制日志

1、启动和设置错误日志

2、查看错误日志

3、删除错误日志

三、错误日志

1、启动和设置错误日志

2、查看错误日志

3、删除错误日志

四、通用查询日志

1、启动通用查询日志

2、查看通用查询日志

3、删除通用查询日志

五、慢查询日志

1、启动和设置慢查询日志

2、查看慢查询日志

3、删除慢查询日志

六、MySQL 8.0 的新特性——日志分类更详细


一、日志简介

MySQL 日志主要分为四类:

  1. 错误日志:记录MySQL 服务的启动、运行或停止 MySQL 服务器出现的问题。
  2. 查询日志:记录建立的客户端连接和执行的语句。
  3. 二进制日志:记录所有更改数据语句,可以用于数据复制。
  4. 慢查询日志:记录所有执行时间查过 long_query_time 的所有查询或不使用索引的查询。

刷新日志语句:

flush logs
或者
mysqladmin  flush-logs
或者
mysqladmin  refresh

如果正使用过 mysql 复制功能,在复制服务器上可以维护更多日志文件,这种日志称为阶梯日志。

二、二进制日志

使用二进制日志的主要目的是最大可能的恢复数据库。

1、启动和设置二进制日志

默认情况下,二进制日志是开启的,可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf

log-bin  [ =path/[ filename ] ]

案例1:设置二进制日志

[mysqld]
log-bin
expire_logs_day = 10
max_binlog_size = 100M
  • log-bin 定义开启二进制日志。
  • paht 表明日志文件所在的目录路径,默认存放:/var/lib/mysql/ 下。
  • filename 指定了日志文件名称,如果文件的全名为 filename.000001、filename.000002 等,除了上述文件之外,还有一个名称为filename.index 的文件,文件内容为所有日志的清单,可以使用记事本打开文件,比如 /var/lib/mysql/*-bin.0000001。
  • expire_logs_days 定义了 MySQL 清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。当MySQL启动或刷新二进制日志时可能删除该文件。
  • max_binlog_size 定义了单个文件的的大小限制,如果二进制日志写入的内容大小超出给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将该变量设置为大于1GB或者小于4096B,默认是1GB。

如果正在使用大的事务,二进制日志大小还可能超过 max_binlog_size 定义的大小。

案例二:使用show variables 语句查询日志设置

mysql> show variables like 'log_%';
+----------------------------------------+----------------------------------------+
| Variable_name                          | Value                                  |
+----------------------------------------+----------------------------------------+
| log_bin                                | ON                                     |
| log_bin_basename                       | /var/lib/mysql/192-bin                 |
| log_bin_index                          | /var/lib/mysql/192-bin.index           |
| log_bin_trust_function_creators        | OFF                                    |
| log_bin_use_v1_row_events              | OFF                                    |
| log_error                              | /var/log/mysqld.log                    |
| log_error_services                     | log_filter_internal; log_sink_internal |
| log_error_suppression_list             |                                        |
| log_error_verbosity                    | 2                                      |
| log_output                             | FILE                                   |
| log_queries_not_using_indexes          | OFF                                    |
| log_raw                                | OFF                                    |
| log_replica_updates                    | ON                                     |
| log_slave_updates                      | ON                                     |
| log_slow_admin_statements              | OFF                                    |
| log_slow_extra                         | OFF                                    |
| log_slow_replica_statements            | OFF                                    |
| log_slow_slave_statements              | OFF                                    |
| log_statements_unsafe_for_binlog       | ON                                     |
| log_throttle_queries_not_using_indexes | 0                                      |
| log_timestamps                         | UTC                                    |
+----------------------------------------+----------------------------------------+
21 rows in set (0.00 sec)

  • log_bin 为 ON 表明二进制文件已经打开

2、查看二进制日志

1)查看当前的二进制日志文件个数以及其文件名。

show binary logs;

2)查看二进制日志内容

[root@192 mysql]# mysqlbinlog 192-bin.000003 | more

3)案例
(1)查看二进制文件个数以及其名称

mysql> show binary logs;
+----------------+-----------+-----------+
| Log_name       | File_size | Encrypted |
+----------------+-----------+-----------+
| 192-bin.000001 |       179 | No        |
| 192-bin.000002 |       179 | No        |
| 192-bin.000003 |       179 | No        |
| 192-bin.000004 |       179 | No        |
| 192-bin.000005 |      2881 | No        |
| 192-bin.000006 |       156 | No        |
+----------------+-----------+-----------+
6 rows in set (0.01 sec)

(2)查看二进制日志内容

[root@192 mysql]# mysqlbinlog 192-bin.000003 | more
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230106  3:13:35 server id 1  end_log_pos 125 CRC32 0xa2add542 	Start: binlog v 4, server v 8.0.27 created 230106  3:13:35 at startup
ROLLBACK/*!*/;
BINLOG '
L9i3Yw8BAAAAeQAAAH0AAAAAAAQAOC4wLjI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAv2LdjEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigBQtWtog==
'/*!*/;
# at 125
#230106  3:13:35 server id 1  end_log_pos 156 CRC32 0x4632a60c 	Previous-GTIDs
# [empty]
# at 156
#230106  3:13:36 server id 1  end_log_pos 179 CRC32 0xa4e1b590 	Stop
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

3、删除二进制日志

除了配置自动删除二进制文件外,还有手动删除二进制文件。

1)使用 reset master 语句删除所有二进制日志文件

reset master;

执行玩该语句后,所有二进制日志将被删除,mysql 会重新创建二进制日志,新的日志文件扩展名将会从 000001 开始重新生成。

2)使用purge master logs 语句删除指定日志文件

purge  { master  | binary }  logs  to  'log_name'
purge  { master  |  binary }   logs  before  'date'
  • 第一种删除方式,将会删除文件名编号比指定文件名编号小的所有日志文件。
  • 第二种删除方式,将会删除指定日期以前的所有日志文件。

案例1:删除000003 之前的文件

mysql> purge master logs to "192-bin.000003" ;
Query OK, 0 rows affected (0.01 sec)

案例2:删除 20190130号之前的文件

mysql> purge master logs to "20190130";

4、使用二进制日志恢复数据库

使用 mysqlbinlog 恢复数据的语法:

,mysqlbinlog [ option ]  filename |  mysql  -uuser -ppass
  1. option 是一些可选的选项,比如 --start-date、–stop-date 和 --start-position、–stop-position。其中 --start-date、–stop-date 可以指定恢复数据库的起始时间点和结束时间点。 --start-position、–stop-position 可以指定恢复数据的开始位置和结束位置。
  2. filename 是日志文件名。

案例:恢复mysql 数据库到 2019 年1月30日15:27:48时的状态:

[root@192 mysql]#  mysqlbinlog  --start-date="2019-01-30   15:27:48 "   192-bin.000004   | mysql  -uuser -ppass

5、暂时停止二进制日志功能

set sql_log_bin 可以暂时停止或启动二进制日志

set  sql_log_bin = { 0 | 1 }

案例一:暂停记录二进制日志:

mysql> set sql_log_bin = 0 ;
Query OK, 0 rows affected (0.00 sec)

案例二:恢复记录二进制日志:

mysql> set sql_log_bin = 1;
Query OK, 0 rows affected (0.00 sec)

三、错误日志

1、启动和设置错误日志

可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf

[ mysqld]
log-error=[ path /  [ file_name ] ]
  • path 为日志文件在的目录路径。
  • file_name 为日志文件名。
  • 默认存储位置为/var/log/ 下,默认名字为 *.err 。

2、查看错误日志

使用 show variables 查看错误日志的存储路径,用记事本打开可以查看内容

show variables  like 'log_error';

案例:查看错误日志

mysql>  show variables like 'log_error';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |
+---------------+---------------------+
1 row in set (0.00 sec)

3、删除错误日志

MySQL 的错误日志是以文件的形式存储在文件系统中,可以直接删除。
对于 MySQL 5.5.7 以前的版本 ,flush logs 可以将错误日志文件重命名为 filename.err_old,并创建新的日志文件。但是从 MySQL 5.5.7 开始,flush logs 只是重新打开日志文件,并不左日志备份和创建操作。如果日志不存在,MySQL 启动或者执行 flush logs 时会创建新的日志文件。
在运行状态下删除错误日志文件后,MySQL 并不会自动创建日志文件。flush logs 在重新加载日志的时候,如果文件不存在,则会自动创建。所以在删除错误日志之后,如果需要创建日志文件,需要在服务器端指定以下命令:

mysqladmin   -u user -p   flush-logs 

或者在客户端执行:

mysql> flush logs;

四、通用查询日志

通用查询日志记录了,所有用户操作,包括启动和关闭服务、执行查询和更新语句等。

1、启动通用查询日志

1)查看当前通用日志状态

mysql> show variables like '%general%';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| general_log      | OFF                    |
| general_log_file | /var/lib/mysql/192.log |
+------------------+------------------------+
2 rows in set (0.00 sec)

2)开启通用查询日志

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

3)查看通用查询日志状态

mysql> show variables like '%general%';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| general_log      | ON                     |
| general_log_file | /var/lib/mysql/192.log |
+------------------+------------------------+
2 rows in set (0.00 sec)

4)关闭通用查询日志状态

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

2、查看通用查询日志

可以用记事本或者vim打开,位置默认/var/lib/mysql/192.log

3、删除通用查询日志

1)直接用rm删除日志
2)flush-logs 刷新日志

五、慢查询日志

1、启动和设置慢查询日志

可以通过修改配置文件来启动和设置二进制日志:/etc/my.cnf

[ mysqld ]
log-slow-queries [ =path / [ filename ] ]
log_query_time = n 
  1. path 为日志文件所在的目录
  2. filename 为日志文件名。如果不指定目录和文件名称,默认存储在数据目录中,文件名为 hostname-slow.log
  3. n 是秒数,默认10秒单位。

2、查看慢查询日志

可以用vim打开

3、删除慢查询日志

1)直接用rm删除日志
2)flush-logs 刷新日志

六、MySQL 8.0 的新特性——日志分类更详细

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值