mysql 日志

一、日志分类

MySQL日志主要分为4类,使用这些日志文件,可以查看MySQL内部发生的事情。这4类日志分别是:

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

        默认情况下,所有日志创建于MySQL数据目录中。通过刷新日志,可以强制MySQL关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。当执行一个FLUSH LOGS语句或 执行mysqladmin flush-logsmysqladmin refresh时,将刷新日志。
如果正使用MySQL夏制功能,在复制服务器上可以维护更多日志文件,这种日志称为接替日 志。
        启动口志功能会降低MySQL数据库的性能。例如,在査询非常频繁的MySQL数据库系统中, 如果开启了通用查询日志和慢査询日志,MySQL数据库会花费很多时间记录日志。同时,日志会占用大最的磁盘空间。

二、二进制日志

        二进制日志主要记录MySQL数据库的变化。二进制日志以一种有效的格式,并且是事务安 全的方式包含更新日志中可用的所有信息。二进制日志包含了所有更新了数据或者已经潜在更新 了数据(例如,没有匹配任何行的一个DELETE)的语句。语句以“事件"的形式保存,描述数 据更改。
        二进制日志还包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据 的语句。如果想要记录所有语句(例如,为了识别有问题的査询),需要使用一般查询日志。使用 二进制日志的主要目的是最大可能地恢复数据库,因为二进制日志包含备份后进行的所有更新。

2.1 启用二进制日志

默认情况下,二进制日志是关闭的,可以通过修改MySQL的配置文件来启动和设置二进制日志。
my.ini中[mysqld]组下面有几个设置是关于二进制日志的:

log-bin [=path/[filename]]
expire_logs_days = 10
maxbinlogsize = 1OOM

log-bin定义开启二进制日志;

  • path表明日志文件所在的目录路径:
  • filename指定了日志文件的 名称,如文件的全名为filename.000001. filename.000002等,除了上述文件之外,还有一个名称为 filename.index的文件,文件内容为所有日志的清单,可以使用记事本打开该文件。

expire_logs_days定义了 MySQL清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。当MySQL启动或刷新二进制日志时可能删除该文件。

max_binlog_size定义了单个文件的大小限制,如果二进制日志写入的内容大小超出给定值, 日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将该变量设置为大于1GB 或小于4096字节。默认值是1GB。
如果正在使用大的事务,二进制日志文件大小还可能会超过max_binlog_size定义的大小。

可以使用show variables like 'log_%';查看日志设置情况。

2.2 查看二进制日志

2.2.1 查看二进制日志文件名、大小

show binary logs;

2.2.2 查看二进制日志内容

$ mysqlbinlog /var/lib/mysql/mysql-bin/mysql-bin.000066;

2.3 删除二进制日志文件

2.3.1 使用RESET MASTER语句删除所有二进制日志文件

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

RESET MASTER;

2.3.2 使用PURGE MASTER LOGS语句删除指定日志文件

第1种方法指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件。
第2种方法指定日期,执行该命令将删除指定日期以前的所有日志文件。

PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

2.4 使用二进制日志还原数据库

2.4.1 语法

mysqlbinlog [option] filename |mysql -uuser -ppass

option是一些可选的选项
filename是日志文件名。
比较重要的两对option参数是-start-date、-stop-date 和-start-position、stop-position。-start-date、-stop-date 可以指定恢复数据库的起始时间点和结束时间点。 -start-position、-stop-position可以指定恢复数据的开始位置和结束位置。

2.4.2 示列

使用mysqlbinlog恢复MySQL数据库到2011年8月30日15:27:48时的状态

mysqlbinlog -stop-date="2011-08-30 15:27:48" /MySQL/log/binlog/binlog.000008 | mysql -uuser -ppass

2.5 暂时停止二进制日志功能

2.5.1 暂停二进制日志功能

set sql_log_bin = 0;

2.5.2 开启二进制日志功能

set sql_log_bin = 1;
三、错误日志

3.1 启用错误日志

在默认情况下,错误日志会记录到数据库的数据目录下。如果没有在配置文件中指定文件名, 则文件名默认为hostname.err。例如,MySQL所在的服务器主机名为mysql-db.记录错误信息的文 件名为mysql-db.err。如果执行了 FLUSH LOGS,错误日志文件会重新加载。
错误日志的启动和停止以及日志文件名,都可以通过修改my.ini (或者my.cnf)来配置。错误 日志的配置项是log-erroro在[mysqld]下配置log-error,则启动错误日志。如果需要指定文件名, 则配置项如下:

[mysqld]
log-error=[path/[file_name]] 

path为日志文件所在的冃录路径,file_name为日志文件名。修改配置项后,需要重启MySQL 服务以生效。

3.2 查看错误日志

使用下列命令查看错误日志文件的位置,在使用vim(Linux上)或者记事本打开即可。

SHOW VARIABLES LIKE 'log_error';

3.3 删除错误日志

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

四、通用査询日志

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

4.1 启动和设置通用查询日志

MySQL服务器默认情况下并没有开启通用查询日志。如果需要通用査询日志,可以通过修 改my.ini (或my.cnf)配置文件来开启。在my.ini (或my.cnf)的[mysqld]组下加入log选项, 形式如下:

[mysqld]
log[=path / [filename]]

4.2 查看通用查询日志

在windows在直接使用记事本打开即可,Linux上使用vim等查看即可。

4.3 删除通用查询日志

可以用直接删除日志文件的方式删除通用査询日志。
要重新建立新的日志文件,可使用语句 mysqladmin -flush logs

五、慢查询日志

慢查询日志是记录查询时长超过指定时间的日志。慢査询日志主要用来记录执行时间较长的 查询语句。通过慢查询日志,可以找出执行时间较长、执行效率较低的语句,然后进行优化。

5.1 启用慢查询日志

MySQL中慢查询日志默认是关闭的,可以通过配置文件my.ini或者my.cnf中的 log-slow-queries选项打开,也可以在MySQL服务启动的时候使用-log-slow-queries[=file_name]启动慢査询日志。启动慢査询日志时,需要在my.ini或者my.cnf文件中配置long_query_time选项指定记录阈值,如果某条査询语句的査询时间超过了这个值,这个查询过程将被记录到慢查询日志文 件中。

[mysqld]
log-slow-queries[=path/[filename]]
long_query_time=n

        path为日志文件所在目录路径,filename为日志文件名。如果不指定目录和文件名称,默认存储在数据目录中,文件为hostname-slow.log, hostname是MySQL服务器的主机名。
        参数n是时间 值,单位是秒。如果没有设置long_query_time选项,默认时间为10秒。

5.2 查看慢查询日志

MySQL的慢查询日志是以文本形式存储的,可以直接使用文本编辑器査看。在慢査询日志中, 记录着执行时间较长的查询语句,用户可以从慢査询日志中获取执行效率较低的查询语句,为査询 优化提供重要的依据。

5.3 删除慢查询日志

和通用查询日志一样,慢査询日志也可以直接删除。删除后在不重启服务器的情况下,需要 执行mysqladmin -u root-p flush-logs重新生成日志文件,或者在客户端登录到服务器执行flush logs 语句重建日志文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值