1.日志介绍
(1)mysql日志的分类
- 错误日志:记录mysql服务的启动、运行或停止mysql服务时出现的问题
- 二进制日志:记录所有更改数据的语句,可以用于数据的复制
- 查询日志:记录建立的客户端连接和执行的语句
- 慢查询日志:记录所有执行时间超过long_query_time的所有查询或不使用索引查询。
默认的情况下,所有的日志创建于mysql数据目录中,通过刷新日志,可以强制mysql关闭或重新打开日志文件;当执行一个FLUSH LOGS或mysqladmin flush-logs或者mysqladmin refresh时,将会刷新日志。
(接替日志:若使用mysql复制功能,在复制服务器上可以维护更多的日志文件)
启动mysql日志功能会降低Mysql数据库的性能。
2.二进制日志
(1)二进制日志主要记录mysql数据库的变化,里面包含了所有更新了的数据或者已经潜在更新了的数据的语句。语句以“事件”形式保存,描述数据的更改。
(2)使用二进制日志的主要目的就是最大可能的恢复数据库,因为二进制日志包含备份后进行的所有更新。
(3)启动和设置二进制日志
默认情况下二进制日志是关闭的,可以通过修改mysql的配置文件来启动和设置二进制日志。
my.ini中[mysqld]中:
log-bin[=path/[filename]]
expire_logs_days=10
max_binlog_size=100M
log-bin定义开启二进制日志;path:日志文件所在的目录路劲
filename:日志文件的名称;
expire_logs_days:定义mysql清除过期日志的时间,即二进制日志自动删除的天数,默认值为0,,表示没有删除。当mysql启动或者刷新二进制日志时可能删除该文件。
max_binlog_size:定义单个文件的大小限制,若超过给定值,日志会发生回滚(关闭当前日志,重新打开一个新的日志文件),不能将该变量设置为大于1GB或小于4096字节。默认值为1GB
天假完毕后,关闭并重新启动mysql服务就可以查看二进制日志,通过show variables语句来查询日志设置。
注:此处不知道是mysql5.6存在BUG还是什么问题,在使用上述代码后,可以产生日志文件,但是使用show varibales like ‘log_%’;显示的log_bin状态一直是OFF,而不会改变为ON状态。
(4)如果要改变日志文件的目录和名称,需要对my.ini中log_bin参数做修改log_bin="d:/MySQL/log/binlog"
(5)查看二进制文件show binary logs
(6)数据库文件最好不要与日志文件放在同一个磁盘,这样,当数据库文件所在磁盘发生故障时,可以使用日志文件恢复数据。
(7)删除二进制文件
删除所有二进制文件
reset master;
删除指定日志文件
第一种指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件
第二种指定日期,执行该命令将删除指定日期以前的所有日志文件。
purge {master|binary} logs to 'log_name'
purge {master|binary} logs before 'date'
(8)使用二进制日志还原数据库
若mysql服务器启动了二进制日志,在数据库出现意外丢失数据的时候,可以使用mysqlbinlog工具从指定的时间点开始直到现在,或另指定一个时间点的日志中恢复数据。
要想从二进制日志恢复数据,需要直到当前二进制日志文件的路径和文件名。一般可以从配置文件my.ini或者my.cnf中找到路径。
mysqlbinlog [option] filename|mysql -u user -p password
(9)暂时停止二进制日志功能
set sql_log_bin={0|1}
当取值为0时,暂停记录二进制日志;当取值为1时,恢复记录二进制日志
3.错误日志
(1)启动和设置错误日志
在默认情况下如果没有在配置文件中指定文件名,则文件名默认为hostname.err,错误日志的启动和停止以及日志文件名都可以通过修改mysql的配置文件my.ini来配置。
[mysqld]
log-error=[path/[file_name]]
(2)查看错误日志
通过错误日志可以监视系统的运行状态,便于及时发现故障,修复故障。mysql错误日志是以文本文件形式存储,可以直接使用文本编辑器直接查看mysql错误日志
show variables like 'log_error';
(3)删除错误日志
由于错误日志是以文本文件的形式存在系统中的,可以直接删除。
在服务端可以按照下面的删除方式删除:
mysqladmin -u root -p password flush-logs
在客户端按照下面的方式删除:mysql>flush logs;
4.通用查询日志
通用查询日志记录mysql的所有用户操作,包括启动和关闭服务,执行查询和更新语句等
(1)启动和设置通用查询日志
mysql服务器默认情况下并没有开启通用查询日志,但是若需要通用查询日志,可以修改配置文件my.ini来启动
[mysqld]
log[=path/[filename]]
若不指定目录和文件名,通用查询日志将默认存储在mysql数据目录中的hostname.log文件中,hostname是mysql数据库的主机名。
5.慢查询日志
(1)慢查询日志是记录查询时长超过指定时间的日志,慢查询日志主要用来记录执行时间较长的查询语句。通过慢查询日志,可以找出执行时间较长,执行效率较低的语句,然后进行优化。
[mysqld]
log-slow-queries[=path/[filename]]
log_query_time=n