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