MySQL中的error log日志文件,其实功能跟ORACLE中的alert极为相似,不过由名称也看得出MySQL果然还是嫩了点儿,error logs中即不全是error信息,也并非所有error都被记入log,这名称就有点儿名不副实了。还是ORACLE高明--alert,就是提示你要注意,咋理解都没毛病。
在某些 *** 作系统上运行的mysql崩溃时,会将堆栈的跟踪信息(stack trace)抛出到错误日志文件中,这些跟踪信息比较有利于故障排查。
启用mysqld时附加--log-error参数(或配置log-error系统环境变量),指定错误日志的路径及文件名,如不指定的话,默认文件名为[host_name].err,保存在mysql的data文件夹下。执行FLUSH LOGS命令后,mysql会将当前错误日志文件附加-old保存,而且创建一个新的空错误日志文件(仅限指定--log-error的情况下会自动创建新文件)。
提示:
Windows环境中,事件和错误消息也会被写入windows的事件日志中,以应用程序的形式保存,并可能被标记为警告(Warning)或注意(Note),不过信息类的消息不会写入事件日志。
--log-warnings参数(或log-warnings系统环境变量)用来控制警告信息是否记录,默认值为1即启用,指定为0时表示禁用。如果指定该参数值大于1,则连接失败的消息也会写入错误日志。
使用mysqld_safe命令启动mysqld,mysqld_safe会将错误消息写到日志文件或者系统日志,在5.1.20版本之前,mysqld_safe的 *** 作记录到文件;从5.1.20版本开始,mysqld_safe提供了两个新增错误日志选项:--syslog和--skip-syslog。从5.1.21版本开始,默认的不记录日志选项为--skip-syslog,该选项兼容5.1.20版本之前的错误日志行为。要明确指定输出的错误日志文件,就通过mysqld_safe启动服务时附加--log-error[=file_name]参数,如果要使用syslog,则指定--syslog参数。
对于记录到syslog的消息,来自mysqld_safe和mysqld的消息会分别打上"mysqld_safe"或"mysqld"的标签,从5.1.21版本开始,还可以通过--syslog-tag=[tag]的方式指定标签的名称,修改后实际记录的标签形式会变成"mysql_safe-[tag]"和"mysqld-[tag]"。
如何是使用mysqld_safe命令启动mysqld进程,并且mysqld意外崩溃,则mysqld_safe将尝试重新启动mysqld进程,并且向错误日志中记录"restarted mysqld"信息。
MySQL存储错误日志的方法有:1. 在MySQL的配置文件中添加log_error参数,将错误日志保存到指定文件中;
2. 在MySQL的配置文件中添加general_log参数,将所有SQL语句的执行情况记录到指定文件中;
3. 在MySQL的配置文件中添加slow_query_log参数,将慢查询的语句记录到指定文件中;
4. 在MySQL的配置文件中添加log_queries_not_using_indexes参数,将没有使用索引的查询语句记录到指定文件中;
5. 使用MySQL的SHOW WARNINGS语句,将错误信息记录到表中;
6. 使用MySQL的log_bin参数,将所有更改的日志记录到指定的文件中;
7. 使用MySQL的binlog_format参数,将更改的日志记录到指定的文件中;
8. 使用MySQL的innodb_force_recovery参数,将恢复日志记录到指定的文件中;
9. 使用MySQL的innodb_buffer_pool_dump参数,将缓冲池中的日志记录到指定的文件中;
10. 在MySQL中创建存储过程,将错误日志保存到表中。
1、修改/etc/syslog-ng/syslog-ng.conf,添加CODE:
source s_remote {
udp(ip(0.0.0.0) port(514))
}
destination r_mysql {
program("/usr/bin/mysql -usyslogadmin -psyslogadmin syslog </var/log/mysql.pipe")
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
'$PROGRAM', '$MSG' )\n") template-escape(yes))
}
log { source(s_remote)destination(r_mysql)}
2、建立mysql.pipe文件按
#mkfifo /var/log/mysql.pipe
3、重新启动syslog-ng
#/etc/init.d/syslog-ng restart
这种方法如果结合phpsyslogng一起使用,就可以在浏览器中对日志进行进一步的过滤和查看,非常方便。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)