mysql日志文件
篇一:mysql 日志文件的使用
mysql 日志文件的使用.txt21春暖花会开!如果你曾经历过冬天,那么你就会有春色!如果你有着信念,那么春天一定会遥远;如果你正在付出,那么总有一天你会拥有花开满圆。 mysql 日志文件的使用 收藏
MYSQL有不同类型的日志文件(各自存储了不同类型的日志),从它们当中可以查询到MYSQL里都做了些什么,对于MYSQL的管理工作,这些日志文件是不可缺少的。
1.错误日志(The error log):记录了数据库启动、运行以及停止过程中错误信息;
2.I(来自:WwW.CssYq.com 书业 网:mysql日志文件)SAM操作日志(The isam log):记录了所有对ISAM表的修改,该日志仅仅用于调试ISAM模式;
3.SQL执行日志(The query log):记录了客户端的连接以及所执行的SQL语句;
4.更新日志(The update log):记录了改变数据的语句,已经不建议使用,由二进制日志替代;
5.二进制日志(The binary log):记录了所有对数据库数据的修改语句;
6.超时日志(The slow log):记录所有执行时间超过最大SQL执行时间(long_query_time)或未使用索引的语句;
如果你是在用mysql的复制、备份功能,那么从服务器还提供了一种叫做relay log的日志文件。
默认情况下所有日志文件会记录在MYSQL的数据目录下,你可以通过强制mysql去关闭并重新打开一个文件进行日志记录,当然系统会自动加后缀 (如.00001, .00002),方式有在mysql环境下执行语句 mysql>flush logs; 或者通过mysqladmin管理程序执行 #mysqladmin flush-logs 或 #mysqladmin refresh
这些日志的启动方式可以在mysqld_safe方式启动数据库的时候,后面跟选项参数,也可以在配置文件里配置,推荐采用第二种方式,配置方法很简单,我只配置了三种日志:
[mysqld]
log=/var/log/mysqld_common.log
log-error=/var/log/mysqld_err.log
log-bin=/var/log/mysqld_bin.bin
日志的查看很简单,大部分都是文本,直接用vim、less、more之类的工具看就可以了,值得说明的是二进制文件的查看:
1). 首先确定是否开启了二进制文件记录功能
mysql>show variables like 'log_bin';
2). 如果你想知道现在记录二进制数据的文件具体信息,你可以通过下列语句看到现在正在记录哪个文件,以及记录的当前位置:
mysql>show master status;
3). 查看二进制数据需要借助程序mysqlbinlog,看看它支持哪些选项,根据自己需要来使用。
mysql>mysqlbinlog /var/log/mysql/mysql-bin.000040;
查询某个时间范围的可以执行下列语句,如果记录很多可以将结果定向到一个文件里自己慢慢看:-) :
mysql>mysqlbinlog --start-datetime='2008-01-01 00:00:00' --stop-datetime='2008-08-08 00:00:00' /var/log/mysql/mysql-bin.000040 > ./tmp.log
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tsuliuchao/archive/2009/12/14/500545有关MySQL的日志文件前面章节已简要讨论过了,主要有四种日志文件,分别是常规查询日志、慢查询日志、变更查询日志和二进制变更日志。这些日志文件的创建需在启动服务器时用选项指定。
Table 4.3. 日志启动选项
启动选项 激活日志
--log[=file_name] 常规日志文件
--log-bin[=file_name] 二进制变更日志文件
--log-bin-index=file_name 二进制变更日志文件索引文件
--log-update[=file_name] 变更日志文件
--log-slow-queries[=file_name] 慢查询日志文件
--log-isam[=file_name] ISAM/MyISAM日志文件
--log-long-format 设置慢查询日志和变更日志的格式
BDB和InnoDB数据表的日志文件会自动创建不用指定选项。但可用以下选项指时日志文件的存放路径。
Table 4.4. BDB和InnoDB数据表日志选项
启动选项 用途
--bdb-logdir=dir_name 存放BDB日志文件的位置
--innodb-log_arch_dir=dir_name 存放InnoDB日志文件的归档目录
--innodb_log_group_home_dir=dir_name 存放InnoDB日志文件的位置
MySQL日志文件选项可在mysqld和mysqld_safe脚本中使用,也可在选项文件my.cnf的
[mysqld]中使用。推荐在选项文件中使用,因为每次启动服务器的日志选项基本上都是一致的。
日志的刷新可用mysqladmin flush-logs命令或flush logs语句实现。另外,对MySQL服务器发送一条SIGHUP信号也会刷新日志。错误日志和DBD/InnoDB日志不能用以上方法刷新。
错误日志记录MySQL数据库系统的论断和出错信息,由mysqld_safe脚本创建,文件名默认为hostname.err,也可通过--err-log或选项文件的err-log语句指定另外的名字。如果直接用mysqld程序启动服务器,错误信息会直接输出到输出设备,也就是屏幕。但我们可用重
定向方法把错误信息输出到其它地方,如把错误信息输出到/var/log/mysql.err文件中,可以执行以下语句:
% mysqld > /var/log/mysql.err 2>&1 &
在windows平台下,MySQL服务器默认把诊断信息写到数据目录的mysql.err文件中,并且不允许另外指定错误日志文件名。如在启动MySQL服务器时给出了--console选项,则MySQL会把诊断信息输出到控制台窗口而不创建错误日志。但如MySQL是作为一个服务运行,则--console选项不起作用。
4.5.1. 日志失效处理
在服务器正常运行中,会产生大量的日志文件。我们要对这些日志文件进行失效管理,以节省磁盘空间和方便查询。进行日志失效处理的方式主要有以下几种:
日志轮转。该方法适用于常规查询日志和慢查询日志这些文件名固定的日志文件,在日志轮转时,应进行日志刷新操作(mysqladmin flush-logs命令或flush logs语句),以确保缓存在内存中的日志信息写入磁盘;
日志轮转的操作过程是这样的:第一次轮转时,把log更名为log.1,然后服务器再创建一个新的log文件,在第二轮转时,再把log.1更名为log.2,把log更名为log.1,然后服务器再创建一个新的log文件。如此循环,创建一系列的日志文件。当到达日志轮转失效位置时,下次轮转就不再对它进行更名,直接把最后一个日志文件覆盖掉。例如:如果每天进行一次日志轮转并想保留最后7天的日志文件,就需要保留log.1--log.7共七个日志文件,等下次轮转时,用log.6覆盖原来的log.7成新的log.7,原来的log.7就自然失效。下面是一个失效处理的shell脚本,以供参考:
#!/bin/sh
# shell script --- rotate_log.sh
if [ $# -ne 1 ]; then
echo "Usage: $0 logname" 1>&2
exit 1
if
logfile=$1
mv $logfile.6 $logfile.7
mv $logfile.5 $logfile.6
mv $logfile.4 $logfile.5
mv $logfile.3 $logfile.4
mv $logfile.2 $logfile.3
mv $logfile.1 $logfile.2
mv $logfile $logfile.1
mysqladmin -u flush -pflushpass flush-logs #执行mysqladmin flush-logs会打开
一个日志文件----重新生成一个新的日志文件
该脚本以日志文件名为参数,执行方法如下:
% rotate_log.sh /usr/local/mysql/data/log
注意,脚本中的mysqladmin命令是带有-u和-p参数的,因为我们进行日志刷新时需连接服务器。为确保安全,我们建立一个flush用户,密码为flushpass。该用户只有日志刷新的权限(reload权限)。创建该用户的语句如下:
GRANT RELOAD ON *.* TO 'flush'@'localhost' IDENTIFIED BY 'fulshpass';
设置好后,我们就可利用系统的自动处理机制定期运行该脚本以生成轮转日志。在Linux系统上的MySQL发行版中带有一个用来安装mysql-log-rotate日志轮转脚本的logrotate工具,如用RPM安装,则在/usr/share/mysql目录,如用二进制方式安装,则在MySQL安装目录的support-files目录,如用源码安装,则在安装目录的share/mysql目录中。
在windows平台下,不能在线更名,需停掉服务器,再进行。下面是一个进行日志更名的批处理文件:
@echo off
REM script name : rotate_log.bat
if not "%1" == "" goto ROTATE
@echo Usage: rotate_log logname
goto DONE
:ROTATE
set logfile=%1
erase %logfile%.7
rename %logfile%.6 %logfile%.7
rename %logfile%.5 %logfile%.6
rename %logfile%.4 %logfile%.5
rename %logfile%.3 %logfile%.4
rename %logfile%.2 %logfile%.3
rename %logfile%.1 %logfile%.2
rename %logfile% %logfile%.1
:DONE
该脚本的执行方法如下:
c:\rotate_log c:\mysql\data\log
以时间为依据对日志进行失效处理。该方法将定期删除超过给定时间的日志文件,适用于变更日志和二进制日志等文件名用数字编号标识的日志文件。下面是一个用Perl写成的处理脚本:
#!/usr/bin/perl -w
# script name: expire_log.pl
# Usage: expire_log.pl logfile ...
use strict
die "Usage: $0 logfile ...\n" if @ARGV == 0;
my $max_allowed_age = 7;#max allowed age in days
foreach my $file (@ARGV)#chack each argument
{
unlink ($file) if -e $file && -M $file >= $max_allowed_age;
}
exit(0);
该脚本需提供一个将被轮转的日志文件名作为参数,如:
% expire_log.pl /usr/local/mysql/data/log.[0-9]*
在给脚本参数时请小心,如给出*为参数,则会删除目录中所有更新时间大于7天的文件。
镜像机制。把日志文件镜像到所有的从服务器上。要使用镜像机制,你必须知道主服务器有多少个从服务器,哪些正在运行,并需依次连接每一个从服务器并发出show slave status语句以确定它正处理主服务器的哪个二进制日志文件(语句输出列表的Master_Log_File项),只有所有的从服务器都不会用到的日志文件才能删除。删除方法是在主服务器上发出以下语句:
mysql> PURGE MASTER LOGS TO 'last_log.xx';
上面语句中的last_log.xx是所有从服务器已处理的最小编号日志文件
7.aspx
篇二:MYSQL启用日志和查看日志
MYSQL启用日志,和查看日志
mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志:-log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
是否启用了日志
mysql>show variables like 'log_%';
怎样知道当前的日志
mysql> show master status;
?示二?制日志?的?/p>
mysql> show master logs;
看二进制日志文件用mysqlbinlog
shell>mysqlbinlog mail-bin.000001
或者shell>mysqlbinlog mail-bin.000001 | tail
在配置文件中指定log的?出位置.
Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:\Windows 下。
Linux:Linux 的配置文件为 my.cnf ,一般在 /etc 下。
在linux下:
Sql代码
1. # 在[mysqld] 中?入
2. #log
3. log-error=/usr/local/mysql/log/error.log
4. log=/usr/local/mysql/log/mysql.log
5. long_query_time=2
6. log-slow-queries= /usr/local/mysql/log/slowquery.log
# 在[mysqld] 中?入
#log
log-error=/usr/local/mysql/log/error.log
log=/usr/local/mysql/log/mysql.log
long_query_time=2
log-slow-queries= /usr/local/mysql/log/slowquery.log
windows下:
Sql代码
1. # 在[mysqld] 中?入
2. #log
3. log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log"
4. log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/mysql.log"
5. long_query_time=2
6. log-slow-queries=
"E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"
# 在[mysqld] 中?入
#log
log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log"
log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/mysql.log"
long_query_time=2
log-slow-queries= "E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"
开启慢查询
long_query_time =2 --是指执行超过多久的sql会被log下来,这里是2秒 log-slow-queries= /usr/local/mysql/log/slowquery.log --将查询返回较慢的语句进行记录
log-queries-not-using-indexes = nouseindex.log --就是字面意思,log下来没有使用索引的query
log=mylog.log --对所有执行语句进行记录
篇三:操作MySQL日志的一些方法
操作MySQL日志的一些方法 我们可以在mysql的安装目录下看到mysql的二进制日志文件,如mysql-bin.000***等,很多人都不及时的处理,导致整个硬盘被塞满也是有可能的。这些是数据库的操作日志。它记录了我们平时使用的sql语句命令,即使这个sql语句没有被执行,也会被记录,它包括执行时间之类的都详细在案,其实 它的目的有两个:一是方便我们查错和恢复数据库;二是为了主从服务器之间同步数据用的,主从服务器上所有操作都记录在日志里,从服务器可以根据这些日志来进行相同的操作,确保主从两个同步。 (更多MySQL教程百度搜索:主机侦探) 查看mysql日志的命令:
1
2
3
4
5
6
7
8
9
10
11
#mysql -u user -p//user代表你的mysql用户名 Enter password: (输入密码) //输入密码后就进入mysql的控制台 mysql> show master logs; //显示mysql日志文件 +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000010 | 63328652 | +------------------+-----------+ 1 row in set (0.06 sec)
也可以在mysql的命令模式下,输入以下命令:
1
2
3
4
5
6
7
mysql> show binary logs; //查看二进制日志文件列表和大小 +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000010 | 63355376 | +------------------+-----------+ 1 row in set (0.00 sec)
MASTER和BINARY是同义词。
删除mysql 二进制日志:
第一种方法是针对单独的mysql服务器,不适合主从同步的。切记!当然,如果你确保自己的主从同步已经完成了,那么也可以使用这个命令,但是我还是不怎么建议的。
第一种方法:mysql>reset master;//清空所有mysql所有的二进制日志文件
主从同步,建议用以下两种方法:
首先,我们要知道从mysql服务器是否在读取日志,或者在读取哪个日志。
在从属服务器上输入一下命令:
1
2 mysql>show slave hosts //查看所有连接到master的slave的信息
3 mysql>show slave status; //检查从服务器在读取哪个日志
下面第二种和第三种方法中,当从服务器正在读取你正在删除的日志时候,就会失效,并且
会有报错。如果从属服务器没有读取日志,而你又删了它启动后要读取的日志,那么当它启动后就不会复制。所以,下面两种方法可以安全删除日志文件。
主从服务器清理日志操作步骤如下:
在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
使用SHOW MASTER LOGS获得主服务器上的一系列日志。在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
注意:最好做好你要删除的所有日志的备份,有备份,就不怕出错
第二种删除二进制日志的方法:
1
例子:
PURGE {MASTER | BINARY} LOGS TO 'log_name'
1 mysql>purge master logs to 'mysql-bin.000800'; //清楚mysql-bin.000800之前
的二进制日志
第三种删除二进制日志的方法:
1
例子:
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
1
mysql>purge master logs before '2012-12-22 12:12:12'; //删除2012-12-22 12:12:1这时间之前的二进制文件
第四种方法:就是修改my.cnf文件,在中[mysqld]中添加:
1 expire_logs_day=5 //设置日志的过期天数,过了指定的天数,会自动删除
第五种方法:禁止mysql的日志记录功能(单服务器)
修改my.cnf,注释掉下面两行:
1
2 #log-bin=mysql-bin #binlog_format=mixed
然后重启mysql
篇四:mysql根据日志恢复数据详细步骤
此文详细介绍了根据mysql的二进制日志恢复丢失的数据。
在7月17日不小心删除了一个工程的整个数据,导致数据丢失。 最新的备份是5月29日。丢失的数据比较多。由于我发现这个mysql数据库开启了日志功能,日志记录从从5月3日到7月17日。
1. 查看mysql是否开启二进制日志。bin-log日志记录了所有的DDL和DML的语句。
查看my.cnf中是否有log-bin的设置
Log-bin=mysql-bin
EXPIRE_LOGS_DAYS 此参数是设置日志的过期天数,过期的日志将会被自动删除,这有利于减少我们管理日志的工作量,需要修改my.cnf
EXPIRE_LOGS_DAYS=3
这里我们设定保存日志为3天,3天之后过期的日志将被自动删除
2、定期完整备份
你还需要间隔一定的时间做数据库的完整备份,只有这样你才有可能快速的恢复最新数据。
3、查看备份时间
查看你备份的时间,如backup.sql,取最后一行:-- Dump completed on 2012-11-08 11:11:48。 或者查看backup.sql 的文件生成日期也可以。
4恢复bin-log是记录着mysql所有事件的操作,当mysql发生灾难性错误时,可以通过bin-log做完整恢复,基于时间点的恢复,和基于位置的恢复
基于时间点的恢复
首先利用mysqlbinlog.exe 命令将二进制日志转换为txt文件。
D:\Mysql\bin>mysqlbinlog.exe d:/Mysql/backupLog.000033>change.txt
从change.txt 可以看到我删除这个库的时间,如下图所示
暂时关闭服务,防止新数据写入,导出二进制日志:
多个日志文件之间用空格隔开。查看生成的sql文件,找到操作的错误的sql语句,删除即可。 然后先导入之前备份的sql,在导入生成的sql,就可以恢复到删除之前的完整数据了。
基于位置恢复
将二进制文件导出为txt后,可以看到我删除库的位置
我删除库的位置为1398088,所以恢复的位置点是这个位置的前一个1397998。
多个日志文件之间用空格隔开。查看生成的sql文件,找到操作的错误的sql语句,删除即可。 然后先导入之前备份的sql,在导入生成的sql,就可以恢复到删除之前的完整数据了。
如果只是错误的删除了一张表,在删除的位置上前后都有数据的话, 然后再导出删除位置之后的的sql。
然后再导入这个生成的sql文件。
开启日志功能对mysql 的性能影响比较明显,大家根据实际情况而定。