日志文件记录mysql数据库的各类类型活动。经常使用日志有:错误日志、查询日志、慢查询日志、二进制日志。正则表达式
错误日志文件对mysql的启动、运行、关闭过程进行了记录。sql
定位错误日志文件位置:shell
mysql> show variables like 'log_error'; +---------------+--------+ | Variable_name | Value | +---------------+--------+ | log_error | stderr | +---------------+--------+ # stderr 表明错误输出;可在my.conf 设置log_error的存贮路径,如log_error = /data/mysql/mysql-error.log
当mysql数据库不能正常启动时,第一个必须查找的文件就是错误日志文件,该文件记录了出错信息。数据库
慢查询能为SQL语句的优化带来很好的帮助。优化
能够设一个阀值,将运行时间超过改制的全部SQL语句都记录到慢查询日志文件中。该阀值能够经过参数long_query_time来设置,默认值
为10,表明10秒。日志
show VARIABLES like '%long%'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ SHOW variables like 'log_slow_queries';
配置:code
slow_query_log = 1 # 开启慢查询日志 long_query_time = 10 # 阀值时间,默认10秒 slow_query_log_file = /data/mysql/mysql-slow.log # 慢查询日志存贮位置 log-queries-not-using-indexes = on # 记录没有使用索引的query
show VARIABLES like '%slow_query%'; +---------------------+----------------------------------+ | Variable_name | Value | +---------------------+----------------------------------+ | slow_query_log | ON | | slow_query_log_file | /var/lib/mysql/msmaster-slow.log |
注意两点:server
mysqldumpslow
随着mysql运行时间累积,慢查询日志文件会愈来愈大,此时分析文件就显得不容易了。mysql提供mysqldumpslow命令:排序
$ /usr/bin/mysqldumpslow /var/lib/mysql/msmaster-slow.log Reading mysql slow query log from /var/lib/mysql/msmaster-slow.log Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts # -s,排序,c,t,l,r以及ac,at,al,ar分别是按照query次数,时间,lock时间,返回记录排序。加a就是倒序。 # -t,top n,跟上数字就是算出top多少条 # -g,跟正则表达式。 $ /usr/bin/mysqldumpslow -s al -n 10 /var/lib/mysql/msmaster-slow.log; # 查询锁定最长的10条sql语句;
mysql5.1开始能够将慢查询的日志记录放入一张表中,查询更加直观。慢查询表在mysql中名为slow_log。
mysql> SHOW CREATE TABLE mysql.slow_log; *************************** 1. row *************************** Create Table: CREATE TABLE `slow_log` ( `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, `rows_sent` int(11) NOT NULL, `rows_examined` int(11) NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumblob NOT NULL, `thread_id` bigint(21) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
参数log_output指定慢查询输出格式,默认FILE,能够修改成TABLE,而后就能够查询slow_log表了。
mysql> show variables like 'log_output'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | FILE | +---------------+-------+ 1 row in set (0.00 sec)
查询日志记录全部对mysql数据库请求的信息,不论这些请求是否获得正确的执行。默认文件名:主机名.log。
查询日志甚至记录了对access denied的请求。从mysql5.1开始,能够将查询日志的记录放入mysql库中的general_log表中,用法与slow_log同样。
二进制日志记录了对数据库执行更改的全部操做,不包括select和show操做。二进制还包含了执行数据库更改操做的时间和执行时间等信息。
主要做用:
经过配置参数log-bin[=name]启动二进制日志。若是不指定name,默认以主机名,后缀为二进制日志额序列号,所在路径为数据库所在目录(datadir);
mysql> show variables like 'datadir'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+