开启mysql日志及若干问题
今天学习了mysql日志功能,以前也有所了解,只不过没有深入的学习,所以趁着“余热”,把我从网上找到的资料与实践
结合起来,总结一下其基本用法。学习从来都不是无趣的,就看你怎么看待学习。
1、查看查询日志是否开启
mysql> SHOW GLOBAL VARIABLES LIKE
'%log%'
; ####查询log相关的全局变量
做若干解释:
general_log OFF
#定义查询日志是否开启
general_log_file PC-201505061646
.log
#定义查询日志的文件地址名称
log OFF
#是否开启日志 (若开启则表示开启所有的日志功能)
log_error
PC-201505061646.err #错误的日志信息log_output FILE
#日志的输出的位置
2.首先要做my.ini的基本配置,开始我按照网上这样,那样的做法,并没有成功,有人说版本问题导致配置略有差异。
[mysqld]
......
log-bin=mysql-bin
binlog_format=mixed
.....
基本可以满足需求。。还没有完。。
3.查看二进制日志的格式:
mysql> show global variables like 'binlog_format';
---value的值有三种:statement,row,mixed
二进制日志中常用的定义格式:
1、语句(statement):默认的记录格式;
2、行(row):定义的并非数据本身而是这一行的数据是什么;
3、混合模式(mixed):交替使用行和语句、由mysql服务器自行判断。
其中基于行的定义格式数据量会大一些但是可以保证数据的精确性。
查看二进制日志:
mysql> showbinary logs;
#显示当前服务器使用的二进制文件及大小
mysql> showmaster logs;
#显示主服务器使用的二进制文件及大小
mysql> showmaster status;
#当前使用的二进制文件及所处位置
小扩展:二进制日志的记录位置:通常为上一个事件执行结束时间的位置,每一个日志文件本身也有自己的元数据所以说对于当前版本的mysql来说二进制的开始位置通常为107;
4.设置二进制日志的格式
mysql> set global binlog_format='row'; --设置全局binlog_format,可以使用set session binlog_format='row'来设置当前会话的binlog_format
Query OK, 0 rows affected (0.00 sec)
mysql> show GLOBAL variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
6.启动和设置慢查询日志:
[mysqld]
.....
slow_query_log=on
long_query_time=2
.....
配置完之后,重启服务器,发现并没有什么用。
后来通过mysql语句完成:
7.定义查询日志是否开启
mysql > set global general_log = on;
[mysqld]
......
general_log = on
......
8.通过登录mysql服务器直接定义
首先要有全局权限;然后执行mysql>set global slow_query_log=1;
时间默认超过多少的称为慢查询日志?一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。
如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:
注释:其中这个慢查询时间并不是只表示语句自身执行超过10秒还包含由于其他资源被征用造成阻塞的查询执行时间或其他原因等都被记录到慢查询中。
所以这个慢查的时长表示从查询开始到查询结束中间包含可能的任何原因所经历的所有时间。
9.mysql日志详细解析:http://www.cnblogs.com/wangkongming/p/3684950.html
该网址对于日志相关内容介绍比较完整与详细。
10.二进制日志相关的参数
mysql> showglobal variables like
"%log%"
;
sql_log_bin ={ON|OFF}
#用于控制会话级别二进制日志功能的开启或关闭。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。
binlog_cache_size =32768
#默认值32768 Binlog Cache用于在打开了二进制日志(binlog)记录功能的环境,是MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域。一般来说,如果我们的数据库中没有什么大事务,写入也不是特别频繁,2MB~4MB是一个合适的选择。但是如果我们的数据库大事务较多,写入量比较大,可与适当调高binlog_cache_size。同时,我们可以通过binlog_cache_use 以及 binlog_cache_disk_use来分析设置的binlog_cache_size是否足够,是否有大量的binlog_cache由于内存大小不够而使用临时文件(binlog_cache_disk_use)来缓存了。
binlog_stmt_cache_size= 32768
#当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句。
log_bin = mysql-bin
#指定binlog的位置,默认在数据目录下。
binlog-
format
= {ROW|STATEMENT|MIXED}
#指定二进制日志的类型,默认为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。
sync_binlog = 10
#设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步
max_binlog_cache_size= {4096 .. 18446744073709547520}
#二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。
max_binlog_stmt_cache_size= {4096 .. 18446744073709547520}
#二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存
expire_log_days ={0..99}
#设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。
起点在哪,或许选择不了。重要的是,你追求的终点在哪!