第15章 MySQL日志

任何一种数据库中,都有各种各样的日志。Mysql也不例外,在Mysql中有4种不同的日志,分别为错误日志、二进制日志、查询日志和慢查询日志。这些日志记录着Mysql数据库不同方面的踪迹。下文将介绍这4种不同的日志作用和用途。

二进制日志

二进制日志bin-log记录了所有的DDL和DML的语句,但不包括查询的语句,语句以事件的方式保存,描述了数据的更改过程,此日志对发生灾难时数据恢复起到了极为重要的作用。

mySQl所有数据库公用日志文件。

练习1:启动和设置二进制日志

默认情况下二进制日志是关闭的。可通过修改mySQL的配置文件来启动和设置二进制日志。

使用putty连接Ubuntu服务器,更改mySQL配置文件。

root@ubuntuServer:~# vi /etc/mysql/my.cnf

在配置文件的[mysql]下添加log-bin=mysql-bin

注释掉 'default-character-set=utf8

mySQL教程 第15章 MySQL日志_第1张图片

在[mysqld]下,添加log-bin=mysql-bin,指定日志文件。

Binlog-ignore-db=mysql 表示忽略mysql数据库

Binlog-ignore-db=information_schema 表示忽略information_schema数据库

mySQL教程 第15章 MySQL日志_第2张图片

重启mySQL,查看mySQL日志,从编号000001开始。

mySQL教程 第15章 MySQL日志_第3张图片

练习2:日志的读取

对数据库进行操作,创建一个表,插入几行记录。

root@mySQL1:~# mysql -u root -p

mysql> flush logs; 产生新日志文件

mysql> use schoolDB;

mysql> create table testlog (logid int);

mysql> insert into testlog values (1),(2),(3);

可以看到最新的日志,编号为mysql-bin.000002。

mySQL教程 第15章 MySQL日志_第4张图片

查看日志mysqlbinlog /var/lib/mysql/mysql-bin.000002

mySQL教程 第15章 MySQL日志_第5张图片

只查看schoolDB数据库日志。

mySQL教程 第15章 MySQL日志_第6张图片

加-s选项,将上面的内容进行简单显示。

mysqlbinlog /var/lib/mysql/mysql-bin.000002 -d schoolDB -s;

mySQL教程 第15章 MySQL日志_第7张图片

注意观察日志位置,日志中记录了对数据库的操作,使用pos记录操作的结束点。

mySQL教程 第15章 MySQL日志_第8张图片

练习3:日志删除

对于比较繁忙的mySQL,由于每天产生成的日志量大,这些人日志如果长时间不清除,将会对磁盘空间带来很大浪费。清除日志是DBA维护mySQL数据库的一个重要工作内容。

1. 通过reset master重新开始日志

做一下操作之前,需要给系统做快照,因为以下会演示使用不同方法删除日志,所以有日志的状态需要保存一份。

mySQL教程 第15章 MySQL日志_第9张图片

查看日志

mySQL教程 第15章 MySQL日志_第10张图片

mySQL教程 第15章 MySQL日志_第11张图片

2. 清除指定日志以前日志

还原到清除日志前的快照

mySQL教程 第15章 MySQL日志_第12张图片

purge master logs to 'mysql-bin.000002'; 清除日志

mySQL教程 第15章 MySQL日志_第13张图片

3. 清除日志指定时间以前的日志

还原到清除日志前的快照

mySQL教程 第15章 MySQL日志_第14张图片

清除指定时间以前的日志

mysql> system ls -ltr /var/lib/mysql/mysql-bin*

mysql> purge master logs before '2012-08-21 11:24:00';

mysql> system ls -ltr /var/lib/mysql/mysql-bin*

mySQL教程 第15章 MySQL日志_第15张图片

4. 设置日志的过期天数

过期的日志自动删除,减少DBA管理日志的工作量。

回复快照,编辑mySQL配置文件,将过期时间改为3,更改日期,查看过期的日志是否被删除。

编辑mysql配置文件,增加expire log days = 3

mySQL教程 第15章 MySQL日志_第16张图片

重启mySQL

mySQL教程 第15章 MySQL日志_第17张图片

root@mySQL1:~# ls -l /var/lib/mysql/mysql-bin.*

root@mySQL1:~# date

root@mySQL1:~# date -s '20120828 15:32:00'

root@mySQL1:~# mysqladmin flush-logs -u root -p

root@mySQL1:~# ls -l /var/lib/mysql/mysql-bin.*

mySQL教程 第15章 MySQL日志_第18张图片

错误日志

练习4:查看mysql错误日志

错误日志在Mysql数据库中很重要,它记录着mysqld启动和停止,以及服务器在运行过程中发生的任何错误的相关信息。

1.配置信息

log-error=[file-name]用来指定错误日志存放的位置。

如果没有指定[file-name],默认hostname.err做为文件名,默认存放在DATADIR目录中。

也可以将log-error配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log-error.例如:

编辑mySQL配置文件。

vi /etc/mysql/my.cnf

可以看到错误日志文件路径

mySQL教程 第15章 MySQL日志_第19张图片

查看错误日志 root@mySQL1:#more /var/log/mysql/error.log

mySQL教程 第15章 MySQL日志_第20张图片

删除错误日志

root@mySQL1:~# mysqladmin -u root -p flush-logs

Enter password:

mySQL教程 第15章 MySQL日志_第21张图片

查询日志

查询日志记录了客户端的所有语句,二进制日志不包含查询数据的语句。

练习5:启用查询日志

编辑mySQL配置文件,启用查询日志。

mySQL教程 第15章 MySQL日志_第22张图片

重启mySQL

mySQL教程 第15章 MySQL日志_第23张图片

mySQL教程 第15章 MySQL日志_第24张图片

查看日志

mySQL教程 第15章 MySQL日志_第25张图片

删除查询日志

慢查日志

慢查日志记录了包含所有执行时间超过long_query_time(单位:秒)所设置的SQL语句日志,获得表锁定的时间不算作执行时间。

练习6:启用慢查日志

本练习更改配置文件,记录查询时间大于2秒的查询。

为了能够容易看到效果,将长查询时间设置为2秒。

mySQL教程 第15章 MySQL日志_第26张图片

重启mySQL

mySQL教程 第15章 MySQL日志_第27张图片

插入99999条学生记录

call addStudent(99999)

填成绩

call fillSore()

查询

select a.*,b.*,c.* from TStudent a join TScore b on a.studentid=b.studentid join

TSubject c on b.subjectid=c.subjectid order by cardid

mySQL教程 第15章 MySQL日志_第28张图片

查看慢查询 vi /var/log/mysql/mysql-slow.log

mySQL教程 第15章 MySQL日志_第29张图片

mySQL教程 第15章 MySQL日志_第30张图片

查看慢日志是否记录了耗时16ms的查询,查看日志

root@mySQL1:~# mysqldumpslow /var/log/mysql/mysql-slow.log

mySQL教程 第15章 MySQL日志_第31张图片

你自己随便创建一个简单查询,看看查询时间小于2秒的,是否在慢查日志中记录下来。

 

广告

mySQL教程 第15章 MySQL日志_第32张图片

mySQL教程 第15章 MySQL日志_第33张图片

mySQL教程 第15章 MySQL日志_第34张图片

mySQL教程 第15章 MySQL日志_第35张图片