mysql各种日志
来源:互联网 发布:超级账本 java 编辑:程序博客网 时间:2024/06/05 18:42
MySQL除了有些表类型会用到事务日志外,还使用了7种日志文件,这些日志文件都是可选项。
1.二进制日志
二进制日志存储修改数据库中表数据的所有动作,包含了所有更新了数据或者已经潜在更新了数据的所有语句。潜在跟新了数据的SQL语句例如:无法匹配行的DELETE语句;设置列为当前值的UPDATE语句。除此之外,该日志还存储了语句执行期间耗时的相关信息。二进制日志文件以一种更有效并且是事务安全的方式包含更新日志中可用的所有信息。MySQL在执行语句之后,但在释放锁之前,马上将修改写入二进制日志中,
使用–log-bin[=file_name]选项启动该日志类型,mysqld写入包含所有更新数据的SQL命令的日志文件。如果未给出file_name值,默认名为“HOSTNAME-bin.nnnnn”;如果给出了文件名,但没有包含路径,则文件被写入数据目录。如果在日志名中提供了扩展名(例如,–log-bin=file_name.extension),则扩展名被悄悄除掉并忽略。二进制日志文件名的.nnnn表示,mysqld在每个二进制日志名后面添加一个数字扩展名。每次启动服务器或刷新日志(flush logs)时该数字增加1。如果当前的日志大小达到设定的max_binlog_size,还会自动创建新的二进制日志。如果在该文件的末尾正使用大的事务,二进制日志还有肯呢个会超过max_binlog_size:事务全写入一个二进制日志中,绝对不要写入不同的二进制日志中。
–binlog-do-db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,应将更新记录到二进制日志中。其它所有没有明显指定的数据库被忽略。
如果数据库启动时使用选项–binlog-do-db=DB_A,使用语句“use DB_B”置DB_B为当前数据库,此时使用update语句修改DB_A的表数据时出现如下情况:
数据库DB_B不在允许binlog的列表内,该语句不写入二进制日志文件
数据库DB_B在允许binlog的列表内,该语句写入二进制日志文件
–binlog-ignore-db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,不将更新保存到二进制日志中。
综上所述,使用这个两个选项时决定是否将该语句写入日志文件还有参考当前数据库的属性,如果指定了这两个选项尽量使指定的数据库为当前数据库,才能按照逻辑来记录日志。但CREATE DATABASE、ALTER DATABASE和DROP DATABASE等语句,有一个例外,即通过操作的数据库来决定是否应记录语句。
2.调试日志
如果使用调试的方式来编译MySQL客户机或服务器,则可以生成一个调试日志文件。默认情况下,MySQL将调试日志写到/tmp/mysql.trace,也可以使用debug命令行选项来修改该位置。
3. 错误日志
该日志文件包含了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。可以用–log-error[=file_name]选项来指定mysqld保存错误日志文件的位置。
当使用mysqld_safe启动服务器时,该脚本自动在启动项上加上–log-error但没有加上file_name,或者直接在libexec目录下使用./mysqld –user=mysql –log-error启动服务器,此时没有给定file_name值,mysqld将使用错误日志名host_name.err并在数据目录中写入日志文件。
将错误信息写入错误日志文件的原理是,服务器将对标准错误输出重定向到该日志文件,所以如果不指定–log-error,错误被写入标准错误输出stderr,通常标准输出为你的终端。如果在程序中有printf等语句的话,这些函数打印出的信息也被写入该日志文件。
如果执行FLUSH LOGS,错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。如第一次生成的错误日志为:linux-8tpn.err。执行该命令后将该文件重命名为:linux-8tpn.err-old。
4. MyISAM日志
该日志文件供MySQL开发小组使用该日志来调试MyISAM表处理器。使用–log-isam选项开启该日志类型,服务器在数据目录下创建myisam.log文件。
可以使用myisamlog使用程序从myisam.log文件中提取统计信息,除非用户正在调试MyISAM表处理器,否则对该日志可能不感兴趣。
下面为使用myisamlog的输出实例,暂不清楚各项是什么意思。
linux-8tpn:/home/mysql/var # myisamlog
myisam.log
myisam.log
Commands
Used count Errors Recover errors
Used count Errors Recover errors
open 12 0 0
close 6 0
0
0
extra 53 0 0
Total 71 0
0
0
5. 查询日志
该日志文件记录服务器上所做的所有查询。可以使用–log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值,默认名是host_name.log;如果file_name为绝对路径则在该目录下创建日志文件,否则在数据目录下创建该日志文件。
mysqld按照它接收的顺序而不是按照语句执行的顺序记录语句到查询日志。这就有可能与执行的顺序不同。与更新日志和二进制日志不同,它们在查询执行后,但是任何一个锁释放之前记录日志。(查询日志还包含所有语句,而二进制日志不包含只查询数据的语句)。
服务器重新启动和日志刷新不会产生新的一般查询日志文件(尽管刷新关闭并重新打开一般查询日志文件)。在所有日志类型中查询日志增长的最快,不要不间断的运行查询日志。
./mysqld, Version:
5.0.41-debug-log (Source distribution). started with:
5.0.41-debug-log (Source distribution). started with:
Tcp port: 3306Unix socket:
/tmp/mysql.sock
/tmp/mysql.sock
Time Id Command Argument
0804062:05:52
1 Connect root@localhost on
mysql
1 Connect root@localhost on
mysql
1 Query select * from user
0804062:21:09
1 Query desc user
1 Query desc user
0804062:21:43
1 Query select * from user a, user b where a.Host
=
b.User
1 Query select * from user a, user b where a.Host
=
b.User
6. 慢查询日志
该日志类型用来收集那些花费太长时间(超过指定时间)执行的SQL语句,该指定时间由long_query_time服务器变量设定。用–log-slow-queries[=file_name]选项启动,如果没有给出file_name值,默认未主机名,后缀为-slow.log,如果给出了文件名,但不是绝对路径名,文件则写入数据目录。
慢查询日志可以用来找到执行时间长的查询,可以用于优化\,使用mysqldumpslow命令获得日志中显示的查询摘要来处理慢查询日志。
在MySQL 5.1中,通过–log-slow-admin-statements服务器选项,可以请求将慢管理语句,例如OPTIMIZE TABLE、ANALYZE TABLE和 ALTER TABLE写入慢查询日志。
在MySQL 5.1的慢查询日志中,不使用索引的慢查询同使用索引的查询一样记录。要想防止不使用索引的慢查询记入慢查询日志,使用–log-short-format选项。
使用–log-long-format选项,可以把不使用索引的查询也加入到慢查询日志中。
注:
[1]获得初使表锁定的时间不算作执行时间。
[2]语句执行完并且所有锁释放后记入慢查询日志。记录顺序可以与执行顺序不相同
[3]用查询缓存处理的查询不加到慢查询日志中,因为表有零行或一行而不能从索引中受益的查询也不写入慢查询日志
7. 更新日志
更新日志提供查询信息,但只有修改数据库内容的查询。使用–log-update服务器选项,开启更新日志。当启用该日志类型后,MySQL将在数据目录下创建一个名称为:HOSTNAME.nnn的文件。但在5.0以上的MySQL上使用该选项的时候,会有如下的提示:
080306 13:56:59 [ERROR] The update log is no
longer supported by MySQL in version 5.0 and above. It is replaced by the binary
log
longer supported by MySQL in version 5.0 and above. It is replaced by the binary
log
也就是说在MySQL V5.0以上,系统已经不在支持该日志类型,取而代之的是二进制日志。
众所周知,大访问量的情况下,可添加节点或改变架构可有效的缓解数据库压力,不过一切的原点,都是从单台mysql开始的。下面总结一些使用过或者研究过的经验,从配置以及调节索引的方面入手,对mysql进行一些优化。
第一步应该做的就是排查问题,找出瓶颈,所以,先从日志入手
开启慢查询日志
mysql>show variables like “%slow%”; 查看慢查询配置,没有则在my.cnf中添加,如下
log-slow-queries = /data/mysqldata/slowquery.log #日志目录long_query_time = 1 #记录下查询时间查过1秒log-queries-not-using-indexes #表示记录下没有使用索引的查询
分析日志 – mysqldumpslow
分析日志,可用mysql提供的mysqldumpslow,使用很简单,参数可–help查看
# -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.gztar zvxf mysqlsla-2.03.tar.gzcd mysqlsla-2.03perl Makefile.PLmakemake installmysqlsla /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语句
转至:http://www.auu.name/716/index.html
http://machael.blog.51cto.com/829462/210474
- mysql各种日志
- MySQL各种日志总结
- MySQL各种日志文件
- mysql各种
- mysql日志-二进制日志
- MySQL日志--查询日志
- mysql日志
- mysql日志
- Mysql日志
- mysql日志
- mysql日志
- mysql日志
- MySQL日志
- mysql日志
- mysql 日志
- mysql 日志
- mysql日志
- mysql日志
- android 编译和环境搭建 官方地址
- golang win32编程的一个dll坑
- curl usage
- 弹出框动态居中
- CentOS 5.5 升级php到5.2,mysql到5.1 (yum安装之后的为5.1.6版本过低而升级)
- mysql各种日志
- 转载_Linux 运行时内核分析
- weka中对数值型数据离散化
- 互联网系统架构的演进
- SQL查询一列中是否有重复数据
- word图片pdf汇总编辑目录为pdf
- 在ssh框架下web.xml配置404和500错误代码,自定义不生效的解决办法。
- 关于top push pop bool
- 和屌丝一起学cocos2dx-环境配置视频版