ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### The General Query Log `mysqld_safe --defaults-file=/mysql/config/m1.cnf --log=mysql.log &` 在启动mysqld时加上--log[=file]这个选项。这样一来,所有的连线及查询动作都会被写入纪录档中。 (预设档名为'hostname'.log)这个在网路程式的除错方面很有帮助。 ### Binary Update Log binary update log档案以更有效率的格式纪录update log里面的资讯。此外,里面还纪录每个更新资料库的指令耗费多少时间。没有更动资料库的指令不会被写入纪录档中。如果想要纪录所有的sql指令,你应该使用`general query log`。 只要在启动mysqld时加上`--log-bin[=file_name]` 或是当纪录档大小达到max_binlog_size上限时, mysqld会自动产生一个新的纪录档。 你可以透过reset master这个sql指令删除所有目前未被开启的binary update log files。 (只保留目前使用中的纪录档) mysqld有两个选项跟binary update log有关: ``` 1. binlog-do-db=database_name:只纪录某个资料库的更动资料 2. binlog-ignore-db=database_name:不纪录某个资料库的更动资料 ``` `binary log index`档,里面包含所有使用过的binary update log的档名。 你可以用mysqlbinlog指令来检视binary update log档的内容。例如你可以执行下列指令以binary update log的内容更新某个mysql server。 `mysqlbinlog log-file | mysql -h server_name` ### 慢查询日志 ``` log-slow-queries = /data/mysqldata/slowquery.log #日志目录 long_query_time = 1 #记录下查询时间查过1秒 # log-queries-not-using-indexes #表示记录下没有使用索引的查询 ``` #### 分析日志 – mysqldumpslow ``` # -s:排序方式。c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序; # ac , at , al , ar 表示相应的倒叙; # -t:返回前面多少条的数据; # -g:包含什么,大小写不敏感的; mysqldumpslow -s r -t 10 /slowquery.log #slow记录最多的10个语句 mysqldumpslow -s t -t 10 -g "left join" /slowquery.log #按照时间排序前10中含有"left join"的 ``` #### 推荐用分析日志工具 – mysqlsla ``` wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz tar zvxf mysqlsla-2.03.tar.gz cd mysqlsla-2.03 perl Makefile.PL make make install mysqlsla /data/mysqldata/slow.log ``` mysqlsla会自动判断日志类型,为了方便可以建立一个配置文件“~/.mysqlsla”,在文件里写上:top=100,这样会打印出前100条结果。 ###### 说明 ``` queries total: 总查询次数 unique:去重后的sql数量 sorted by : 输出报表的内容排序 最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数. Count, sql的执行次数及占总的slow log数量的百分比. Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比. 95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间. Lock Time, 等待锁的时间. 95% of Lock , 95%的慢sql等待锁时间. Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量. Rows examined, 扫描的行数量. Database, 属于哪个数据库 Users, 哪个用户,IP, 占到所有用户执行的sql百分比 Query abstract, 抽象后的sql语句 Query sample, sql语句 ```