第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
在[mysqld]下,添加log-bin=mysql-bin,指定日志文件。
Binlog-ignore-db=mysql 表示忽略mysql数据库
Binlog-ignore-db=information_schema 表示忽略information_schema数据库
重启mySQL,查看mySQL日志,从编号000001开始。
练习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。
查看日志mysqlbinlog /var/lib/mysql/mysql-bin.000002
只查看schoolDB数据库日志。
加-s选项,将上面的内容进行简单显示。
mysqlbinlog /var/lib/mysql/mysql-bin.000002 -d schoolDB -s;
注意观察日志位置,日志中记录了对数据库的操作,使用pos记录操作的结束点。
练习3:日志删除
对于比较繁忙的mySQL,由于每天产生成的日志量大,这些人日志如果长时间不清除,将会对磁盘空间带来很大浪费。清除日志是DBA维护mySQL数据库的一个重要工作内容。
1. 通过reset master重新开始日志
做一下操作之前,需要给系统做快照,因为以下会演示使用不同方法删除日志,所以有日志的状态需要保存一份。
查看日志
2. 清除指定日志以前日志
还原到清除日志前的快照
purge master logs to 'mysql-bin.000002'; 清除日志
3. 清除日志指定时间以前的日志
还原到清除日志前的快照
清除指定时间以前的日志
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*
4. 设置日志的过期天数
过期的日志自动删除,减少DBA管理日志的工作量。
回复快照,编辑mySQL配置文件,将过期时间改为3,更改日期,查看过期的日志是否被删除。
编辑mysql配置文件,增加expire log days = 3
重启mySQL
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.*
错误日志
练习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
可以看到错误日志文件路径
查看错误日志 root@mySQL1:#more /var/log/mysql/error.log
删除错误日志
root@mySQL1:~# mysqladmin -u root -p flush-logs
Enter password:
查询日志
查询日志记录了客户端的所有语句,二进制日志不包含查询数据的语句。
练习5:启用查询日志
编辑mySQL配置文件,启用查询日志。
重启mySQL
查看日志
删除查询日志
慢查日志
慢查日志记录了包含所有执行时间超过long_query_time(单位:秒)所设置的SQL语句日志,获得表锁定的时间不算作执行时间。
练习6:启用慢查日志
本练习更改配置文件,记录查询时间大于2秒的查询。
为了能够容易看到效果,将长查询时间设置为2秒。
重启mySQL
插入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
查看慢查询 vi /var/log/mysql/mysql-slow.log
查看慢日志是否记录了耗时16ms的查询,查看日志
root@mySQL1:~# mysqldumpslow /var/log/mysql/mysql-slow.log
你自己随便创建一个简单查询,看看查询时间小于2秒的,是否在慢查日志中记录下来。
广告