mysql的binlog和slow_log慢日志

redo

undo

锁
-----------------------------------------
日志管理

log-error=/var/log/mysql.log


二进制日志的“总闸”
作用:
1、是否开启
2、二进制日志路径/data/mysql/
3、二进制日志文件名前缀mysql-bin  
4、文件名以"前缀".000001~N
log-bin=/data/mysql/mysql-bin  

二进制日志的“分开关”
只有总闸开启才有意义,默认是开启状态。
我们在有些时候会临时关闭掉。
只影响当前会话。
sql_log_bin=1/0


二进制日志的格式
statement,语句模式:
记录信息简洁,记录的是SQL语句本身。但是在语句中出现函数操作的话,有可能记录的数据不准确。
5.6中默认模式,但生产环境中慎用,建议改成row。

row,行模式
表中行数据的变化过程。
记录数据详细,对IO性能要求比较高
记录数据在任何情况下都是准确的。
生产中一般是这种模式。
5.7以后默认的模式。

mixed,混合模式

经过判断,选择row+statement混合的一种记录模式。
一般不用。

binlog的查看方式:
1、查看binlog原始信息
[root@db01 mysql-5.6.36]# mysqlbinlog mysql-bin.000001 
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

mysqbin   mysql-bin.000002   

2、在row模式下,翻译成语句
mysqlbinlog --base64-output='decode-rows' -v   mysql-bin.000002 

3、查看binlog事件
show binary logs; 所有在使用的binlog信息

show binlog events in ''

4、如何截取binlog内容,按需求恢复(常规思路)
(1)、show binary logs;   show master status;
(2)、show binlog events in '' 从后往前看,找到误操作的事务,判断事务开始position和结束position
(3)、把误操作的剔除掉,留下正常操作到2个sql文件中
(4)、先测试库恢复,把误操作的数据导出,然后生产恢复。

遇到的问题:
1、时间长
2、对生产数据有一定影响,有可能会出现冗余数据
3、

有什么好的解决方案。
1、flashback闪回功能(扩展)
2、通过备份,延时从库


--------------------------------
SET GLOBAL expire_logs_days = 7;

PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;

PURGE BINARY LOGS TO 'mysql-bin.000010';

reset master   
------------------------
慢日志 slow log

调优过程中的工具日志。

统计收集慢得语句


------




设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s,现有版本可以指定零点几秒
long_query_time 
指定是否开启慢查询日志
slow_query_log 
指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
slow_query_log_file 
查询检查返回少于该参数指定行的SQL不被记录到慢查询日志
min_examined_row_limit
不使用索引的慢查询日志是否记录到索引
log_queries_not_using_indexes



慢日志扩展:
Anemometer实现pt-query-digest 图形化
https://www.cnblogs.com/xuanzhi201111/p/4128894.html
原文地址:https://www.cnblogs.com/gaoyuechen/p/8081201.html