1.1 MySQL日志类型
1.1.1 错误日志 -log-err
记录着mysqld启动和停止,以及服务器在运行过程中发生的任何错误的相关信息。
配置信息:
--log-error=[file-name]用来指定错误日志存放的位置。
备注:如果没有指定[file-name],默认文件名为hostname.err,默认存放在DATADIR目录中。
1.1.2 查询日志 -log
查询日志记录了客户端的所有查询语句。
备注:由于log日志记录了数据库所有操作,对于访问频繁的系统,此种日志会造成性能影响,建议关闭。
配置信息:
--log=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认以主机名(hostname)做为文件名,默认存放在DATADIR目录中。
1.1.3 慢查询日志 -log-slow-queries
慢查询日志是记录执行时间超过参数long_query_time(单位秒)所设定值的SQL日志。
备注:慢查询日志对于我们发现性能有问题的SQL有很帮助,建议使用并经常分析。
.配置信息:
--log-slow-queries=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认文件名为hostname-slow.log,默认存放在DATADIR目录中。
1.1.4 二进制日志 -log-bin
二进制日志通常被称为binlog,它记录所有的DDL和DML,但不包括数据查询语句。(DDL是数据定义语言,包括创建、修改和删除数据库对象。DML是对数据库中的数据进行操作,包括Insert,Delete,Update,Select)。
配置信息:
--log-bin=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认为主机名后面跟-bin作为文件名,默认存放在DATADIR目录中。
1.2 优缺点
优点:记录所有数据库的操作,可查看一个数据库从开始创建以来所有的变化。通过二进制日志可恢复数据库。
缺点:当数据库操作比较频繁时,日志文件会越来越大,占用磁盘空间。
第2章 开启MySQL日志
2.1 开启
2.1.1 配置my.ini文件
在mysql的安装目录下,打开my.ini文件,在[mysqld]后面增加以下参数并保存。Linux环境下也可以将log-error配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log-error。
1.错误日志
#Enter a name for the error log file. Otherwise a default name will be used.
log-error=err-log
2.查询日志
#Enter a name for the query log file. Otherwise a default name will be used.
log=query-log
3.慢查询日志
#Enter a name for the slow query log file. Otherwise a default name will be used.
long_query_time=10
log-slow-queries=d://slow-query-log
4.二进制日志
#Enter a name for the binary log. Otherwise a default name will be used.
log-bin=binary-log
备注:日志名称可使用绝对路径和相对路径,相对路径默认是相对Mysql安装目录下的“data”文件夹。
2.1.2 重启mysql服务
通过命令行:net start mysql / net stop mysql 开启和停止mysql服务
或者:直接打开“服务”窗口,重启mysql服务。
2.2 基本命令
1.是否启用了日志
mysql>show variables like 'log_bin';
2.查看当前开启的日志
mysql> show master status;
3.查看二进制日志文件
使用命令:mysqlbinlog。
比如要查看的二进制日志文件名为:mail-bin.000001,可使用以下命令:
shell>mysqlbinlog mail-bin.000001(要写绝对问题路径d://)
或者shell>mysqlbinlog mail-bin.000001 | tail
第3章 使用MySQL日志恢复数据库
3.1 指定时间恢复
1.恢复截止到2012年3月30号上午9点以前的数据
mysqlbinlog --stop-date="2012-03-30 8:59:59" d://mysql/data/bin.000001 | mysql -u root –p
2.恢复2012年3月30号上午9点以后的数据
mysqlbinlog --start-date="2012-03-30 9:00:00" /var/lib/mysql/bin.000001 | mysql -u root –p
3.恢复 2012年3月30号9点到10点之间的数据
mysqlbinlog --start-date="2012-03-30 9:00:00" --stop-date="2012-03-30 10:00:00" /var/lib/mysql/bin.000001 | mysql -u root –p
3.2 操作点恢复
使用mysqlbinlog的选项--start-position和--stop-position来指定日志位置。
3.2.1 确定位置号
可以运行 mysqlbinlog寻找执行了不期望的事务的时间范围,并将结果重新指向文本文件以便进行检查。操作方法为:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" d://mysql/data/log//binary-log.123456 > d://mysql/mysql_restore.sql
3.2.2 使用位置号恢复数据
1.恢复到截止到停止位置的所有事务
mysqlbinlog --stop-position="368312" d://mysql/data /log/mysql/bin.123456 mysql -u root -pmypwd
2.恢复从给定的起始位置直到二进制日志结束的所有事务
mysqlbinlog --start-position="368315" d://mysql/data /log/mysql/bin.123456 mysql -u root -pmypwd \
备注:因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间。
第4章 参考资料
参考网址:http://tech.it168.com/a2009/0505/275/000000275002.shtml