标签:
MySQL有四种类型的日志:Error Log、General Query Log、Binary Log 和 Slow Query Log。
第一种错误日志,记录MySQL运行过程ERROR,WARNING,NOTE等信息,系统出错或者某条记录出问题可以查看ERROR日志。
第二种日常运行日志,记录MySQL运行中的每条请求数据。
第三种二进制日志,包含了一些事件,这些事件描述了数据库的改动,如建表、数据改动等,也包括一些潜在改动,主要用于备份恢复、回滚等操作。
第四种慢查询日志,用于MySQL性能调优。
MySQL错误日志默认以hostname.err
存放在MySQL日志目录,如果不知道MySQL当前的错误日志目录可以使用查询语句:
mysql> show variables like ‘log_error’;
1
|
+---------------+--------------------------------------+
|
修改错误日志地址可以在/etc/my.cnf
中添加--log-error[=file_name]
选项来开启mysql错误日志。
错误日志记录了MySQL Server每次启动和关闭的详细信息以及运行过程中所有较为严重的警告和错误信息。
知道了MySQL错误日志地址,我们就可以查看MySQL错误日志:
1
|
2015-09-12 16:03:20 2624 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 35
|
InnoDB: Unable to lock ./ibdata1, error: 35
可以得出资源被抢占,有可能是开了多个MySQL线程。
日常请求的SQL:
添加方式一样在 /etc/my.cnf
中添加 general-log-file[=file_name]
。
修改 /etc/my.cnf
:
1
|
binlog_format = STATEMENT
|
log-bin-index
指向 master-bin
这个文件,记录有哪些分块的Binlog文件名。log-bin
记录Binlog文件名前缀,后缀会用数字递增。
Binlog有3种格式,STATMENT,ROW,MIXED。https://dev.mysql.com/doc/refman/5.1/en/binary-log-mixed.html
混合格式(mixed)会在适当时候切换row和statment格式,statment就是直接的SQL语句格式。
通过MySQL自带的mysqlbinlog 命令,可以直接查看到Binlog转码数据:
mysqlbinlog /usr/local/var/mysql/master-bin.000117
得到:
1
|
# at 335
|
第一行包含日志文件偏移字节值(335)。
第二行包含:
事件的日期事件,MySQL会使用他们来产生SET TIMESTAMP
服务器的服务器id
end_log_pos 下一个事件的偏移字节
事件类型,这里是Xid,常见的还有其他,例如:Intvar,Query,Stop,Format_desc
原服务器上执行语句的线程id,用于审计和CONNECTION_ID()
exec_time对于master端的Binlog来说是执行这个event所花费的时间
原服务器产生的错误代码
通过
mysql> show binlog events;
也可以的到binlog数据:
1
|
| master-bin.000002 | 3861 | Query | 1 | 3954 | BEGIN |
|
mysql> show variables like ‘%binlog%’;
1
|
+-----------------------------------------+----------------------+
|
修改/etc/my.cnf
:
1
|
slow-query-log = 1
|
Slow Query有很多查看工具,比如:MySQL自带的mysqldumpslow 和 mysqlsla,用的比较多的 py-query-digest,还可以将满请求数据丢给zabbix做显示分析处理。
这里我用 py-query-digest /usr/local/var/mysql/mysql-slow.log
导出了满请求的数据,例如:
1
|
# Query 1: 0.02 QPS, 0.55x concurrency, ID 0xFC19E4D04D8E60BF at byte 12547
|
可以看到该SQL被调用7次,平均每次28s,好慢…平均检测数据大小77.86k。
再来看看SQL语句:
SELECT count(*) FROM
File
LEFT JOINUser
ONUser
.name
=File
.name
WHEREUser
.name
LIKE ‘%r%’ order by last
看着都觉得慢 ON User.name= File.name
在没有建立索引的情况下,所有数据将进行字符串匹配name字段。
这个库有 15W条User数据,10W条File数据,也就是要比对15*10 WW 次数据。
MySQL的slow log的作用也就在这里了,优化慢查询。
1.《高性能MySQL》
2.Analyse slow-query-log using mysqldumpslow & pt-query-digest
-by小草
2015-09-12 01:49:10
标签:
原文地址:http://www.cnblogs.com/xiarixiaocao/p/4804108.html