一、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服务器
6.3 查看二进制日志功能状态
6.4 重启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.log
;long_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
是删除错误日志、慢查询日志、通用查询日志的命令,若只删除一个时,其他需要做好备份,以免错删。