MySQL错误日志
记录MySQL的启动、停止信息以及在MySQL运行过程中的错误信息
log_error(默认开启)
log_error=[path/[file_name]],如果不指定⽂件名,则默认hostname.err.
修改后重启生效
删除错误日志
MySQL的日志文件(错误日志)
<5.5.7版本时,flush logs会将filename.err命名为filename.err_old
>5.5.7版本则只是会重建错误日志,也就是除非错误日志被删除了会 重建一个;否则不会对线上错误日志有影响。
注意:删除错误日志后,不会自动重建。需要flush logs或者重启数 据库。
mysqladmin -u root -p flush-logs
或者
mysql>flush logs;
MySQL general日志
general_log(默认关闭){0-关闭,1-开启} 可以在线打开和关闭;
set global general_log='ON’;
general_log_file=file_name,
不指定文件名只指定路径则为hostname.log
general_log | OFF |
general_log_file | home/mysql3306/mysql3306/chen.log
MySQL慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在 MySQL中响应时间超过阀值(long_query_time、
min_examined_row_limit、log_slow_admin_statements and log_queries_not_using_indexes)的语句。(默认关闭)
注意:慢查询日志不会计算语句在开始执行之前等待锁的时间 (initial slow query),mysqld只会从语句等待的锁释放掉,并开 始执行开始计算
时间(执行开始后的锁定时间会记录)。所以慢查询日志中的语句顺序和语句的发出顺序或者general log的顺序不同。
slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。
mysql> show variables like '%slow_query_log%';
+---------------------+-------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | data/mysql3306/logs/mysql-slow.log |
+---------------------+-------------------------------------+
2 rows in set (0.00 sec)
long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。
mysql> show variables like '%long_query_time%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
set global long_query_time=0;
log_output 参数是指定日志的存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。
mysql> show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
1 row in set (0.00 sec)
系统变量log_slow_admin_statements表示是否将慢管理语句例如ANALYZE TABLE和ALTER TABLE等记入慢查询日志
mysql> show variables like 'log_slow_admin_statements';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| log_slow_admin_statements | ON |
+---------------------------+-------+
1 row in set (0.00 sec)
系统变量log-queries-not-using-indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan的sql也会被记录到慢查询日志。
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON |
+-------------------------------+-------+
1 row in set (0.00 sec)
set global log_queries_not_using_indexes=1;
如果你想查询有多少条慢查询记录,可以使用系统变量。
mysql> show global status like '%slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 0 |
+---------------+-------+
1 row in set (0.00 sec)
set global slow_query_log='ON’;
Set global long_query_time=1
log_queries_not_using_indexes:记录没有用索引的查询
log_throttle_queries_not_using_indexes:#设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
min_examined_row_limit:要检查的行数大于等于N时 才记录为慢查询,前提是必须满足long_query_time和 log-queries-not-using-indexes约束。
log_slow_admin_statements:管理语句是否记录
log_slow_slave_statements:从库的语句执行是否记录
慢日志分析工具mysqldumpslow

在实际生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow
查看mysqldumpslow的帮助信息:
mysqldumpslow --help
-s, 是表示按照何种方式排序
c: 访问计数
l: 锁定时间
r: 返回记录
t: 查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如:
得到返回记录集最多的10个SQL。
mysqldumpslow -s r -t 10 database/mysql/mysql06_slow.log
得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 database/mysql/mysql06_slow.log
得到按照时间排序的前10条里面含有左连接的查询语句。
mysqldumpslow -s t -t 10 -g “left join” database/mysql/mysql06_slow.log
另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。
mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more




