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=1log_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个SQLmysqldumpslow -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




