日志无论在哪里都是尤为重要的存在,所以这篇笔记的目的就是了解Mysql 日志的。
日志简介
Mysql 的日志主要分为四类,使用这些日志文件,可以查看Mysql 内部发生的事情,这四类日志分别是:
- 错误日志:记录Mysql 服务的启动、运行或停止Mysql服务时出现的问题。
- 查询日志:记录建立的客户端连接和执行的语句。
- 二进制日志:记录所有更改数据的语句,可以用于数据恢复。
- 慢查询日志:记录所有执行时间超过 long_query_time 的所有查询或不使用索引的查询。
二进制日志
二进制日志主要记录 Mysql 数据库的变化。二进制日志以一种有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。
启动和设置二进制日志
默认情况下,二进制日志是关闭的,可以通过修改mysql 的配置文件来启动和设置二进制日志。
配置文件 my.ini 中有几个设置是关于二进制日志的:
1 | # 如果需要启用,就在 mysqld 组下,加上 log-bin 选项 |
log-bin
定义开启二进制日志,path 表示日志文件所在的目录路径,filename 指定了日志文件的名称。expire_logs_days
定义了Mysql 清除过期日志的时间,即二进制日至的自动删除的天数。max_binlog_size
定义了单个文件的大小限制,不能将变量设置为大于1GB或者小于4096B。默认值为1GB.
如何检查自己的二进制日志是否开启了呢?
输入以下命令:
1 | mysql> show variables like 'log_%'; |
查看二进制日志
查看二进制文件个数及文件名,前提是开启了二进制日志:
1 | mysql> show binary logs; |
删除二进制日志
Mysql 也为我们提供了删除二进制日志的方法,有两种,作用不相同。
删除所有二进制日志文件:
1 | mysql> RESET MASTER; |
删除指定二进制日志文件:
1 | # 其中,binlog.000003 是指二进制文件的名称 |
使用二进制日志恢复数据库
如果启用了Mysql 的二进制日志,在数据库出现意外丢失数据时,可以使用 Mysqlbinlog 工具从指定时间点开始(例如,最后一次备份)直到现在。
Mysqlbinlog 恢复数据库的语法如下:
1 | mysql> mysqlbinlog [option] filename | mysql -uuser -ppass |
实例:使用Mysqlbinlog 恢复Mysql 数据库到2019年1月30日15:27:48时的状态,执行如下命令:
1 | mysqlbinlog --stop--date="2019-01-30 15:27:48" | path/binlogfilename -uuser -ppass |
暂停二进制日志功能
因为修改Mysql 配置文件可以启用、停用二进制日志功能,但是需要重启Mysql 服务器。Mysql 为我们提供了一种更简单的方式可以暂停记录二进制日志。
暂停记录二进制日志:
1 | mysql> SET sql_log_bin = 0; |
恢复记录二进制日志:
1 | mysql> SET sql_log_bin = 1; |
错误日志
错误日志文件包含了当Mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。错误日志默认是开启的。
启动和设置错误日志
通过修改my.ini 配置文件,来启用或者停用错误日志
1 | # 如果需要启用,就在 mysqld 组下,加上 log-error 选项 |
查看错误日志
首先使用如下命令查看错误日志的存储路径以及文件名:
1 | mysql> show variables like 'log_error'; |
删除错误日志文件
Mysql 的错误日志文件是以文本文件的形式存储在文件系统中,可以直接删除。
1 | mysql> flush logs; |
通用查询日志
通用查询日志记录了Mysql 的所有操作,包括启动和关闭服务、执行查询和更新语句等。
启用和设置通用查询日志
同样的,打开Mysql 的my.ini 配置文件。
1 | [mysqld] |
这里有两种方式,log 选项后面如果没有带任何参数表示使用Mysql 默认的存储位置,上面的也一样。
查看通用查询日志
可以通过log 设置的日志文件存储路径,去查看具体文件。
慢查询日志
慢查询日志记录查询时长超过指定时间的日志。通过慢查询日志,可以找出执行时间较长、执行效率较低的语句,然后进行优化。
启用和设置慢查询日志
同样的,打开编辑Mysql 的my.ini 配置文件:
1 | [mysqld] |
n 表示查询时间的极限值,如果超过了这个值,这个查询过程就会被记录到慢查询日志文件中。
查询慢查询日志同上。
上面这些日志配置的更改都需要重启服务器才能生效,另外还有一种方式可以查看运行时日志。
启用实时日志
1 | set global general_log = on; |
这种方式的好处就是不需要重启Mysql 服务。
如果需要禁用:
1 | set global general_log = off; |
关于平时应该打开哪些日志的问题。
日志的开启既会影响Mysql 的性能,又会占用大量的磁盘空间。
因此如果不必要,应尽可能的少开启日志,根据不同的使用环境,考虑开启不同的日志。
例如:在开发环境中优化查询低效率的语句,可以开启慢查询日志;
如果需要记录用的所有查询操作,可以开启通用查询日志;
如果需要记录数据的变更,可以开启二进制日志;
错误日志默认开启;