NoteOfMySQL-14-日志管理

一、MySQL日志

  日志是MySQL数据库的重要组成部分,日志文件记录了MySQL数据库的日常操作和错误信息,可以通过分析这些日志文件了解MySQL数据库的运行情况。
  MySQL数据库常见的日志文件包括错误日志、二进制日志、慢查询日志、通用查询日志四种。

日志文件类型 说明
错误日志 记录服务器启动、关闭、运行错误及时间调度器运行事件的信息等
二进制日志 二进制文件 的形式记录数据库中的操作,但不记录查询语句
慢查询日志 记录执行时间超过指定时间的操作
通用查询日志 记录用户所有的操作信息
  • 默认情况下,MySQL数据库只启动了错误日志功能。
  • 除二进制日志文件外,其他日志都是文本文件。
  • 日志文件通常存储在MySQL数据库的数据目录下。
  • 启动日志功能会降低MySQL数据库的执行速度。
  • 日志文件会占用较大的硬盘空。当用户量非常大、操作非常频繁时,日志问价的存储空间甚至比数据库文件的还要大。

二、错误日志管理

1. 启动错误日志

  在默认情况下,错误日志功能是默认开启的,且不能禁止。但可以通过修改my.ini文件来修改错误日志功能的配置。

# 修改错误日志文件的存放位置
log-error=file_name

# 标识警告信息是否一并记录到错误日志中
log-warnings=int_num

在默认情况下,错误日志文件存放在安装路径的data目录下,文件名为hostname.err

  • 通过设置log-error可以修改错误日志文件的存放位置。
  • 设置log-warnings的具体值如下所示:
int_num 说明
0 不记录警告信息
1 记录警告信息到日志文件中,mysql-5.5版本默认值为1
大于1 "失败的连接"的信息和创建新连接时"拒绝访问"类的错误信息也会被记录到错误日志中,mysql-5.7版本默认值为2

2. 查看错误日志

用于错误日志文件是文本文件,可以直接打开文件进行查看,文件路径可以通过下面命令获取:

-- 查看log-error: 下面两种方法都可
show variables like 'log_error';
select @@log_error;

-- 查看log-warnings: 下面两种方法都可
show variables like 'log_warnings';
select @@log_warnings;

查看信息

3. 删除错误日志

运行下面命令后,数据库系统会自动常见一个新的错误日志文件,并把旧的文件改名为hostname.err-old

mysqladmin -u root -p flush-logs

三、二进制日志管理

  二进制日志也叫变更日志(update log),用来记录所有用户对数据库的操作,若长时间开启,文件会占用较大的磁盘凯南。但当数据库发生故障时,可以通过此文件查看一段时间内用户所作的操作,结合数据库备份技术,即可在线用户的操作,使数据库恢复。

1. 启动二进制日志

1.1 查看二进制日志功能状态

-- 查看二进制日志功能是否启用
show variables like 'log_bin';

-- 查看二进制日志文件列表
show binary logs;

-- 查看当前使用的二进制日志文件
show master status;

查看二进制日志功能状态

1.2 启动二进制日志功能

开启二进制日志功能同样是修改安装路径下的my.ini文件,之后重启mysql服务器即可。

# 在[mysqld]下添加
server-id=1
log-bin[=dir_name\[filename]]

其中,dir_name表示二进制文件的存放路径,默认存放在安装路径的data目录下;filename表示二进制文件的文件名,默认值为hostname-bin.number,number的形式为000001、000002等。

  • 每次重启MySQL服务都会生成新的二进制文件,其中number会不断递增。
  • 二进制日志文件包括filename.number这类文件和filename.index文件,后者存储所有二进制日志文件的清单。

特别注意:二进制日志文件最好不要与数据库的数据文件存放在同个硬盘上。

2. 查看二进制日志

查看二进制日志文件需要在cmd命令行下,且需要将切换到存放二进制日志文件所在的目录下,因为mysqlbinlog将在当前目录下查找指定的二进制日志文件。

mysqlbinlog filename.number

3. 删除二进制日志

删除二进制日志文件需要登录mysql服务器后进行操作。

3.1 删除所有二进制日志文件

执行完下面语句后,会删除所有的文件,并创建新的二进制日志文件,number重置为00001。

reset master;

3.2 根据编号删除二进制日志文件

执行完下面语句后,会删除编号小于number的所有文件。

purge master logs to 'filename.number';

3.3 根据创建时间删除二进制日志文件

执行完下面语句后,会删除在指定时间之前的所有文件。

purge master logs before 'yyyy-mm-dd hh:mm:ss';

4. 关闭二进制日志

关闭和开启的方法刚好相反,将my.ini文件中新增的两行代码删除,然后重启mysql服务器即可。

5. 还原数据库

mysqlbinlog filename.number | mysql -u root -p

6. 实例 —— 启动二进制日志

6.1 修改my.ini文件

6.2 重启mysql服务器

重启mysql服务器

6.3 查看二进制日志功能状态

查看二进制日志功能状态

6.4 重启mysql服务

重启mysql服务

6.5 再查看二进制功能状态

在此之前需要退出mysql重新登录>>>

再查看二进制功能状态

6.6 关闭二进制日志功能

直接删除my.ini文件中刚刚添加的两行代码,重启服务器即可。

四、慢查询日志管理

慢查询日志会记录所有执行时间超过指定时间或未使用索引的语句。

1. 启动慢查询日志

1.1 查看慢查询日志的功能状态

show variables like 'slow_%';

查看慢查询日志的功能状态

1.2 启动慢查询日志

开启慢查询日志功能同样是修改安装路径下的my.ini文件,之后重启mysql服务器即可。

# 在[mysqld]下添加

# 开启慢查询日志功能
slow_query_log=on
# 设置慢查询日志文件路径
slow_query_log_file[=dir_name\[filename]]
# 设置最大执行时间
long_query_time[=num]

其中,dir_name表示慢查询文件的存放路径,默认存放在安装路径的data目录下;filename表示慢查询文件的文件名,默认值为hostname-slow.loglong_query_time单位为秒,默认值为10秒。

2. 修改慢查询日志配置

-- 开启或关闭慢查询日志
set global slow_query_log=on/off;
-- 设置最长执行时间
set global long_query_time=num;

3. 查看慢查询日志

用于慢查询日志文件是文本文件,可以直接打开文件进行查看。

4. 删除慢查询日志

4.1 命令行删除

执行下面语句之后,会删除原来的慢查询日志文件并新建新的日志文件。

mysqladmin -u root -p flush-logs

4.2 手动删除

手动删除日志文件后,重启mysql服务器即可。

五、通用查询日志管理

通用查询日志记录了用户所有的操作。

1. 启动通用查询日志

1.1 查看慢查询日志的功能状态

show variables like 'general%';

查看慢查询日志的功能状态

1.2 开启通用查询日志

开启通用查询日志功能同样是修改安装路径下的my.ini文件,之后重启mysql服务器即可。

# 在[mysqld]下添加

# 开启通用查询日志功能
general_log=1
# 设置通用查询日志文件路径
general_log_file[=dir_name\[filename]]

其中,dir_name表示慢查询文件的存放路径,默认存放在安装路径的data目录下;filename表示慢查询文件的文件名,默认值为hostname.log

2. 查看通用查询日志

用于通用查询日志文件是文本文件,可以直接打开文件进行查看。

3. 删除通用查询日志

3.1 命令行删除

执行下面语句之后,会删除原来的慢查询日志文件并新建新的日志文件。

mysqladmin -u root -p flush-logs

3.2 手动删除

手动删除日志文件后,重启mysql服务器即可。

注意

用于mysqladmin -u root -p flush-logs是删除错误日志、慢查询日志、通用查询日志的命令,若只删除一个时,其他需要做好备份,以免错删。

参考资料

简书:错误日志
付杰博客:MySQL二进制日志详解

posted @ 2020-12-17 00:38  步平凡  阅读(100)  评论(0编辑  收藏  举报