错误日志
在不同情况下,错误日志会记录在不同的位置。如果没有在配置文件中指定文件名,则文件名默认为hostname.err。
在mysql5.6的rpm发布的方式中,错误日志默认被放置在/var/log/mysqld.log中。
可以通过my.cnf文件进行配置
具体位置
[mysqld_safe]
log-error=/var/log/mysqld.log
mysql的错误日志是以文本形式存储的。可以使用各种文本相关命令直接查看。
perror命令可用于查看错误代码的含义。
perror 1006;
以下地址可以找到错误代码的中文释意。
演示
查看错误日志
less /var/log/mysqld.log
删除错误日志
错误日志可能会不断的增长。因此有必要的周期性维护。
推荐删除方法
echo > /var/log/mysqld.log
通用查询日志
记录mysql的查询语句
mysql的通用查询日志,默认情况下是不开启的。
当需要进行采样分析的时候,手工开启。//比如哪些表的查询多,哪些表的哪些列经常被查询,取样结束后,就关闭通用查询日志。
通常情况下,是不建议打开通用查询日志的,因为系统中的查询语句占很大比例,一旦打开通用查询日志,日志的体积将会疯狂的增长,同时也会消耗
系统的IO,所以只有在做数据库采样分析的时候,才打开通用查询日志。
打开通用查询日志有两种方法
set global general_log = 1;
打开后,通常查询日志的路径默认是mysql数据文件目录(var/lib/mysql)
关闭通用查询日志有两种方法
set global general_log = 0;
flush general logs ; 关闭并重新打开通用查询日志
慢查询日志
当查询超过一定时间没有返回结果的时候,才会记录慢查询日志。
慢查询日志可以帮助DBA找出执行效率缓慢的SQL语句,为数据库优化工作提供帮助。
慢查询日志默认是不开启的,也没必要一直开启。
当需要进行采样分析的时候手工开启。
通常情况下,通用查询的采样时间比较短,几个小时上下,而慢查询的采样分析时间稍微长一些,比如一天、两天等。
慢查询日志的开启可以像开启通用查询日志那样通过临时的设置,但是最好的方式是配置my.cnf。
常用慢查询日志参数(修改以下配置后,需要重新启动数据库服务使之生效)
慢查询日志在my.cnf文件的参数
slow_query_log_file=on | off
是否开启慢查询日志
slow_query_log_file = filename (可选)
指定慢查询日志保存路径及文件名,不设置则使用默认值。默认存放位置为数据库文件所在目录下,名称为hostname-slow.log
long_query_time = 2
指定多少秒未返回结果的查询语句属于慢查询。(主动权在我们手里)
long-queries-not-using-indexes
记录所有没有使用到索引的查询语句
min_examined_row_limit = 1000
记录那些由于查找了多于1000次而引发的慢查询语句(意思就是,如果为了得到这个结果,我在数据库表中寻找了1000次)
log-slow-admin-statements
记录那些慢的OPTIMIZE TABLE , ANALYZE TABLE和ALTER TABLE语句(意思就是有些表的分析语句,优化语句和修改语句引起的慢查询)
log-slow-slave-statements
记录由slave所产生的慢查询
慢查询日志在非my.cnf文件的参数(无需重启数据库服务)
set @@global.slow_query_log=1
set @@global.long_query_time=3
其他参数可通过以下命令查询
show variables like '%slow%';
慢查询演示
慢查询日志图解
命令下达的时间
执行用户
慢查询时间
表或者行的锁定时间
返回的记录数
执行的命令
慢查询日志分析工具
1.mysqldumpslow
2.mysqlsla
没有执行权限则需要赋予执行权限
3.percona-tookit中的pt-query-digest
删除慢查询日志
慢查询会不断的增长。因此往往仅仅在做例如采样分析这样的特别工作时候才开启,其他时候则关闭。无用的慢查询日志要记得
及时删除。
先关闭慢查询日志,再对其删除。
二进制日志
记录对数据发生或者潜在发生更改的sql语句。
二进制格式保存
用途广泛,包括:
查看数据库变更历史
数据库增量备份
数据库灾难恢复
mysql复制
常用用二进制日志相关参数
二进制日志在my.cnf文件的参数
修改以下配置后,需要重新启动数据库服务使之生效
log-bin =
开启并指定二进制日志保存路径及文件名。不设置则使用默认值。默认存放位置为数据库文件所在目录下,名称为hostname-bin.XXXXX。
实际开发中,必须指定二进制的保存路径。这是因为二进制的增长速度往往比数据库的数据文件增长速度还要快(10个人操作一条记录,最后数据文件会以最后一条为准,二进制日志文件则不然,它会记录着10次操作)。而且二进制日志往往用于mysql replication,所以对二进制日志的读写非常的频繁。因此建议把二进制独立保存在一个单独的目录下,这样就可以分离我们的IO负载。如果不配置这个目录,二进制日志默认是保存在数据文件目录中的。
max-binlog-size = 500m
设置单个二进制日志文件的最大值
binlog-do-db与bin-ignore-db
前者指定二进制日志记录哪些库的,后者指定二进制日志忽略哪些库
binlog-cache-size =100m
设置二进制日志缓存大小
sync-binlog =N
每隔N秒将缓存中的二进制日志记录写回硬盘。默认是0(不等待,直接写进二进制日志文件里)。
二进制日志在非my.cnf文件的参数
开启二进制日志(不重启修改二进制日志配置)
set @@global.log_bin=1
set @@global.binlog_size = 37268(单位是bytes) 指定二进制文件单个文件的大小
其他参数可通过以下命令查阅
show variables like '%bin%';
临时开启暂停二进制日志
set sql_log_bin = {0|1}
查看二进制日志
mysqlbinlog 二进制日志文件 (因为是二进制格式,所以不能用平常的查看命令)
二进制日志有三种格式
statement 记录下达的sql语句
mysqlbinlog 二进制日志文件 (因为是二进制格式,所以不能用平常的查看命令)
row 以事务的方式记录
mysqlbinlog -v 二进制日志文件 (因为是二进制格式,所以不能用平常的查看命令)
set binlog_format = row 更改二进制的格式
查看一定范围内的二进制日志内容
--start-datatime = name
--stop-datatime = name
--start-position =
--stop-position =
使用二进制日志恢复数据(详情看mysql数据库的备份与恢复)
图解
">>"追加的意思
删除二进制日志
二进制日志会不断的增长,并产生多个文件。数据库重启也会产生二进制日志文件。因此,需要制定备份计划和管理策略。无用的二进制日志要记得及时删除。
删除二进制日志有三种方法
1.操作系统命令直接删除(不推荐)
2.reset master
3.purge
后两个命令必须在mysql环境下执行!