日志对于Mysql的管理是非常重要的一节,常见的Mysql的日志主要包括错误日志(err.log)、慢日志(slow.log)、通用日志(general log)二进制日志(binlog)、redo log日志、undo log日志
错误日志文件对Mysql的启动、运行、关闭过程中进行了记录,该日志不仅记录了所有的错误信息,也记录了一些警告信息和正确信息,可以通过如下命令查看错误日志存放的路径
mysql> show variables like '%log_err%'; +---------------------+----------------------+ | Variable_name | Value | +---------------------+----------------------+ | binlog_error_action | ABORT_SERVER | | log_error | /data/3310/mysql.log | | log_error_verbosity | 3 | +---------------------+----------------------+
Mysql的慢日志其主要功能是帮助DBA定位数据库性能优化的,这里的数据库性能优化主要是关于以下sql语句上的优化,它的记录信息主要是针对配置参数所设定的阈值而定的。
slow_query_log=1 ##表示开启慢日志 slow_query_log_file = /data/mysql/slow.log ##慢日志保存路径 long_query_time = 0.1 该值是情况而定 ##设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s.所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.不要在这里使用”1″, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别). log_queries_not_using_indexes =1 ##这个是记录没有走索引的sql语句 log_throttle_queries_not_using_indexes = 60 ###设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间 min_examined_row_limit = 100 ###表示扫描的行数大于100行看,如果没有大于100行,即使这个语句执行时间超过了long_query_time的阈值也不会被记录。 log_slow_admin_statements = 1 #记录执行缓慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等 log_slow_slave_statements = 1 ##记录从库上执行的慢查询语句
mysqldumpslow -s c -t 10 +慢日志文件
root@192.168.11.8 09:26: [employees]> show profiles ; +----------+------------+---------------------------------+ | Query_ID | Duration | Query | +----------+------------+---------------------------------+ | 1 | 3.53482900 | select * from salaries | | 2 | 0.00061800 | select * from salaries limit 10 | | 3 | 0.04657200 | help 'show profile' | +----------+------------+---------------------------------+ 3 rows in set, 1 warning (0.00 sec) root@192.168.11.8 09:26: [employees]> show profile cpu,block io for query 1; +----------------------+----------+----------+------------+--------------+---------------+ | Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | +----------------------+----------+----------+------------+--------------+---------------+ | starting | 0.000182 | 0.000147 | 0.000025 | 0 | 0 | | checking permissions | 0.000017 | 0.000014 | 0.000003 | 0 | 0 | | Opening tables | 0.000039 | 0.000032 | 0.000005 | 0 | 0 | | init | 0.000082 | 0.000071 | 0.000013 | 0 | 0 | | System lock | 0.000026 | 0.000021 | 0.000003 | 0 | 0 | | optimizing | 0.000009 | 0.000007 | 0.000002 | 0 | 0 | | statistics | 0.000032 | 0.000027 | 0.000004 | 0 | 0 | | preparing | 0.000022 | 0.000019 | 0.000003 | 0 | 0 | | executing | 0.000007 | 0.000005 | 0.000001 | 0 | 0 | | Sending data | 3.521625 | 2.091546 | 0.005521 | 3496 | 0 | | end | 0.006721 | 0.000000 | 0.001642 | 4184 | 0 | | query end | 0.000454 | 0.000000 | 0.000451 | 592 | 0 | | closing tables | 0.000027 | 0.000000 | 0.000022 | 0 | 0 | | freeing items | 0.000109 | 0.000080 | 0.000029 | 0 | 0 | | logging slow query | 0.005451 | 0.000090 | 0.000009 | 8 | 8 | | cleaning up | 0.000028 | 0.000020 | 0.000002 | 0 | 0 | +----------------------+----------+----------+------------+--------------+---------------+ 16 rows in set, 1 warning##这里的警告是该参数在以后的版本中会被移除,该信息以后会被收集到performance Schema中
如果mysql要想记录数据中所有的操作,则必须要开启gener_log日志,和前面不同的是该日志参数只要开启后,对mysql不管有什么操作都会记录在该日志中,其中也包括了错误日志以及慢日志,不过该日志的开启会对性能有严重影响,因此在生产中不建议开启,我们可在调试阶段进行开启,另外该日志主要用途是用做审计的。我们可以通过插件的方式来做。
root@localhost 14:41: [employees]> show variables like '%general%'; +------------------+----------------------------+ | Variable_name | Value | +------------------+----------------------------+ | general_log | OFF | ##该选项表示是否开启 | general_log_file | /data/3307/data/node01.log | +------------------+----------------------------+ ##通用日志存放的路径 2 rows in set (0.00 sec)