您的位置:首页 > 数据库 > MySQL

Mysql 日志详解

2016-06-27 21:00 666 查看

1. Mysql 日志分类

错误日志

查询日志

慢查询日志

事务日志

二进制日志

中继日志

2. 错误日志

首先需要明确的是, 错误日志中记录的未必都是错误日志,在Mysql的错误日志中,存储以下日志信息

1. 服务器启动和关闭过程中的信息

2. 服务器运行过程中的错误信息

3. 事件调度器运行一个事件时产生的信息

4. 在从服务器上启动从服务器进程时产生的信息

日志参数变量都是
全局
定义的,会话级别是没有的.

2.1. 默认配置

错误日志目录

datadir=/dir/to/mysql/datadir


错误日志文件名称

hotname.log


2.2. 参数配置

log_error = on|文件路径
是否启用错误日志,
on
表示开启,
文件路径
表示指定自定义日志路径

log_warnings = 1|0
是否记录warnings信息到错误日志中

3. 查询日志

3.1 参数配置

log = on|off
是否开启日志功能, 这个设置包含了
查询日志
慢查询日志


general_log = on|off
是否开启查询日志

general_log_file = /path/to/file
指定查询日志的位置

log_output = FILE|table
日志输出的位置,
这个指令对慢查询日志也起作用


4. 慢查询日志
建议开启,可以定位服务器性能问题

4.1. 参数配置

slow_query_log = on|off
开启慢查询

slow_query_log_file = /path/to/file
指定保存慢查询文件的位置

long_query_time=5(s)
超过多长时间表示慢查询
可精确到微妙
, 从语句开始到结束,所有时间都算, 哪怕阻塞时间也算

4.2. 分析慢查询的工具

explain sql statements

show profile for query num
需要开启profiling


5. 事务日志

事务日志是被轮转的,一启动就分配完毕了, 并且是连续的存储空间,默认每个文件的大小为
5M


主要功能:
将随机I/O转换为顺序I/O

ib_logfile0
,
ib_logfile1
, 这两个文件如果坏了那么对于mysql来说是致命的, 所以建议事务log使用
raid


5.1 参数配置

innodb_log_group_home_dir
一般事务日志都要求两个以上,一个使用满了,在使用另一个,如此往复循环交替使用

innodb_log_file_in_group
日志组中的日志文件个数,默认
2个


innodb_log_file_size
每个日志文件的大小, 默认
5M
, 太大了会导致恢复起来比较慢

innodb_log_buffer_size
innodb日志
内存
缓冲区大小, 日志是先写入到程序的内存缓冲区中,
然后才同步到事务日志文件中的


innodb_flush_log_at_trx_commit
在事务提交的时候,innodb是否同步刷新日志从缓冲区到事务日志文件中去的 (0,1,2)三种可选

设置为
1
最靠谱

这个参数是提高innodb性能的参数

innodb_mirrored_log_groups=1
日志组的镜像备份, 备份一定要放到不同的磁盘上

6. 二进制日志

6.1 参数配置

log_bin = on|文件路径
是否启用二进制日志,
on
表示开启,
文件路径
表示指定自定义日志路径, 默认路径在
datadir
指定的路径下,

只要重启了服务, binlog二进制日志就会自己滚动一个新的, 或者使用
flush logs
手动滚动日志

记录的信息
主要是记录修改数据或有可能引起数据改变的MySql语句, 记录时间,操作时长,等等信息

日志格式: 基于(
语句
,
row
,
mixed
) 默认
mixed


每一个二进制日志叫做一个
Binary log event(二进制日志事件)
, 每一个二进制日志事件都有自己的元数据(
meta data
)信息, 时间,操作时长….

每个二进制日志的上限是
1G


binlog_cache_size
默认启动的时候二进制的大小

binlog_format = (statement|row|mixed)


binlog_stmt_cache_size
基于语句格式的二进制日志缓存的大小

expire_logs_days=100
表示100天之前的日志自动清理掉
建议别设置,还是自己手动purge最好


sql_log_bin
会话级别临时关闭或开启二进制日志的控制选项
set session sql_log_bin=0


sync_binlog=1
同步binlog的时机, 每执行一次事务提交,就同步二进制日志从内存中到磁盘中去,
建议开启


max_binlog_cache_size
最大二进制缓存大小

max_binlog_size
最大二进制日志大小,默认
1G
,当达到这个值以后会自动滚动的

max_binlog_stmt_cache_size
最大基于语句二进制缓存大小

6.2 二进制日志文件的删除操作

mysql> PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }


Examples:

PURGE BINARY LOGS TO ‘mysql-bin.010’;

PURGE BINARY LOGS BEFORE ‘2008-04-02 22:46:26’;

purge binary logs to 'mysql-bin.000009'
删除
000009
之前的日志文件

6.3 二进制日志的查看

mysqlbinlog mysql-bin.000015


--start-datetime=#


--stop-datetime=#


--start-position=#


--stop-position=#


还可以使用
-u
,
-p
,
-h
去读取其他主机上的
二进制日志


show binary logs


show master logs


SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]


7. 中继日志

在复制过程中产生的日志

一个线程读取别人的二进制日志,存到本地叫做
中继日志
,然后本地在开启一个线程去读取中继日志在本地做
回放
,就完成了数据的同步

7.1 参数配置

max_relay_log_size
最大中继日志大小

relay_log_info_file=relay-log.info
中继日志存放的文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: