MySQL的错误信息是在data目录下,且文件名为
# hostname //获得主机名
# find / -name
.....
# cd ...
# vim
--------示例---------------
[root@target_pc ~]# hostname
target_pc
[root@target_pc ~]# find / -name target_pc.err
/var/lib/mysql/target_pc.err
[root@target_pc ~]# ls /var/lib/mysql
auto.cnf ib_logfile1 performance_schema target_pc.err
ibdata1 mysql RPM_UPGRADE_HISTORY target_pc.pid
ib_logfile0 mysql.sock RPM_UPGRADE_MARKER-LAST test
查看错误日志MySQL配置文件
[root@target_pc ~]# vim /etc/my.cnf
[mysqld]
log_error=/var/lib/mysql/target_pc.err
查看错误日志
错误日志中记录着开启和关闭MySQL服务的时间,以及服务运行过程中出现哪些异常等信息。如果MySQL服务出现异常,可以到错误日志中查找原因。
在MySQL中,通过SHOW命令可以查看错误日志文件所在的目录及文件名信息。
mysql> SHOW VARIABLES LIKE 'log_error';
+---------------+----------------------------------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------------------------------+
| log_error | /var/lib/mysql/target_pc.err |
+---------------+----------------------------------------------------------------+
删除错误日志
在MySQL中,可以使用mysqladmin命令来开启新的错误日志,以保证MySQL服务器上的硬盘空间。mysqladmin 命令的语法如下:
[root@target_pc ~]# mysqladmin -hlocalhost -uroot -p flush-logs
根据MySQL错误日志来诊断错误
经常有一些错误只包含错误码数据,例如下面这个例子:
[root@target_pc ~]# cat /var/lib/mysql/target_pc.err
120326 16:56:45 [ERROR] /usr/sbin/mysqld: Incorrect key file for table '/tmp/#sql_21b2_0.MYI' ; try to repair it
120326 16:56:45 [ERROR] Got an error from unknown thread, storage/myisam/mi_write.c:223
120326 16:56:45 [ERROR] /usr/sbin/mysqld: Sort aborted: Error writing file '/tmp/MYK74Kpi' (Errcode: 28)
请看最后一行有一个 (Errcode: 28). 而 MySQL 附带了一个工具 perror ,该工具可以查看错误代码的具体含义,如:
[root@target_pc ~]# perror 28
OS error code 28: No space left on device
监测MySQL错误日志,如有错误自动邮件报警
#检查错误日志里是否有ERROR,有的话,邮件报警,每分钟监控一次
*/1 * * * * /usr/local/mysql/shell_script/monitor_errlog.sh > /usr/local/mysql/shell_script/monitor_errlog.log 2>&1
#每个机器生成一个错误日志文件,由于公司数据库服务器的错误日志都是基于主机名的,所以还得注意hostname。
LogDir='/usr/local/mysql/shell_script/err_logs/'
#由于每分钟都要监控一次,而定时任务会在每一分钟开始就监控,而当前分钟的错误尚未记录下来,故监控上一分钟的错误
AnalyzeDate=`date -d "1 minutes ago" "+%y%m%d %H:%M"`
ErrorLogDir1='/data/mysql3306/'
HostGroup1=('10.192.200.100' '10.192.200.202')
source='……'
target='……'
MailUser='……'
MailPassword='……'
mkdir -p $LogDir
echo $AnalyzeDate
for host1 in ${HostGroup1[@]}
do
hostname1=`ssh $host1 hostname`
ssh $host1 cat $ErrorLogDir1$hostname1'.err' | grep "$AnalyzeDate" | grep 'ERROR' > $LogDir$host1.err
#ssh $host1 cat $ErrorLogDir1$hostname1'.err' | grep "$AnalyzeDate" | grep 'Warning' > $LogDir$host1.err
if test -s $LogDir$host1.err;
then
echo $(cat $LogDir$host1.err)
title1=$host1' errlog alert'
content1=$(cat $LogDir$host1.err)
/usr/local/bin/sendEmail -f $source -t $target -s hq.smtp.chinaunicom.cn -u $title1 -xu $MailUser -xp $MailPassword -m $content1
else
echo 'there are no errors in the '$host1\''errlog.'
fi
done