一.MySQL日志类型

日志文件    选项               文件名/表名称            程序

错误日志    --log-error              host_name.err          N/A

常规日志    --general_log           host_name.log/general_log      N/A

慢速查询日志  --slow_query_log/--log_query_time   host_name-slow.log/slow_log   mysqldumpslow

二进制日志   --log-bin/--expire-logs-days     host_name-bin.000001           mysqlbinlog

审计日志    --audit_log/--audit_log_file       audit.log             N/A

二.错误日志

1.作用:记录mysql数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志。

2.默认日志位置:$MYSQL_HOME/data/

3.开启方式(mysql默认开启)

#编辑配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
log_error=/application/mysql/data/$hostname.err
#查看方式
mysql> show variables like 'log_error';

三.一般查询日志(基本不开)

1.作用:记录MySQL所有执行成功的sql语句,可以用作审计,但一般不开

2.默认日志位置:$MYSQL_HOME/data/

3.开启方式:(mysql默认不开)

#编辑配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
general_log=on
general_log_file=/application/mysql/data/$hostnamel.log
#查看方式
mysql> show variables like '%gen%';

四.二进制日志(重中之重,这个不会,白学)

1.作用:除了DQL语句记录其他sql语句,并拆分为多个event(事件)进行记录

2.二进制日志模式:

statement:语句模式,记录sql语句(默认模式)。
row:行模式,即数据行的变化过程
mixed:以上两者的混合模式。
企业推荐使用row模式

3.语句模式和行模式优缺点

statement优点:简单明了,容易被看懂,就是sql语句,记录时不需要太多的磁盘空间。

     缺点:记录不够严谨

row优点:记录更加严谨

     缺点:有可能会需要更多的磁盘空间,不太容易被读懂

4.bin-log的作用

  a)如果我拥有数据库搭建开始所有的二进制日志,那么我可以把数据恢复到任意时刻
  b)数据的备份恢复
  c)数据的复制

五.二进制日志的管理操作

1.开启方式(在mysql5.7中开启bin-log需要加上serverid)

[root@db01 data]# vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format=row 5.7
[root@db01 data]# vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format=row
server_id=1

2.二进制日志的操作

#物理查看
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- mysql mysql Mar mysql-bin.
#命令行查看
mysql> show binary logs;
mysql> show master status;
#查看binlog事件
mysql> show binlog events in 'mysql-bin.000007';

六.事件

1.事件介绍

在binlog中最小的记录单元为event,一个事务会被拆分成多个事件(event)

2.事件特性

  a) 每个event都有一个开始位置(start position)和结束位置(stop position)。

  b) 所谓的位置就是event对整个二进制的文件的相对位置

  c) 对于一个二进制日志中,前120个position是文件格式信息预留空间。

  d) MySQL第一个记录的事件,都是从120开始的。

3.row模式下,二进制日志分析及恢复

#查看binlog信息
mysql> show master status;
#创建一个binlog库
mysql> create database binlog;
#使用binlog库
mysql> use binlog
#创建binglog_table表
mysql> create table binlog_table(id int);
#查看binlog信息
mysql> show master status;
#插入数据1
mysql> insert into binlog_table values();
#查看binlog信息
mysql> show master status;
#提交
mysql> commit;
#查看binlog信息
mysql> show master status;
#插入数据2
mysql> insert into binlog_table values();
#插入数据3
mysql> insert into binlog_table values();
#查看binlog信息
mysql> show master status;
#提交
mysql> commit;
#删除数据1
mysql> delete from binlog_table where id=;
#查看binlog信息
mysql> show master status;
#提交
mysql> commit;
#更改数据2为22
mysql> update binlog_table set id= where id=;
#查看binlog
mysql> show master status;
#提交
mysql> commit;
#查看binlog信息
mysql> show master status;
#查看数据
mysql> select * from binlog_table;
#删表
mysql> drop table binlog_table;
#删库
mysql> drop database binlog;

4.数据恢复到delete之前

#查看binlog事件
mysql> show binlog events in 'mysql-bin.000013';
#使用mysqlbinlog来查看
[root@db01 data]# mysqlbinlog /application/mysql/data/mysql-bin.
[root@db01 data]# mysqlbinlog /application/mysql/data/mysql-bin.|grep -v SET
[root@db01 data]# mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.
### UPDATE `binlog`.`binlog_table`
### WHERE
### @= /* INT meta=0 nullable=1 is_null=0 */
### SET
### @= /* INT meta=0 nullable=1 is_null=0 */
#分析
update binlog.binlog_table
set
@= --------->@1表示binlog_table中的第一列,集合表结构就是id=
where
@= --------->@1表示binlog_table中的第一列,集合表结构就是id=
#结果
update binlog.binlog_table set id= where id=;
#截取二进制日志
查看二进制日志后,发现delete语句开始位置是858
[root@db01 data]# mysqlbinlog --start-position= --stop-position= /application/mysql/data/mysql-bin.
#临时关闭binlog
mysql> set sql_log_bin=;
#执行sql文件
mysql> source /tmp/binlog.sql
#查看删除的库
mysql> show databases;
#进binlog库
mysql> use binlog
#查看删除的表
mysql> show tables;
#查看表中内容
mysql> select * from binlog_table;

5.几个疑问?

如果时基于binlog的全量备份,那可是耗时耗力废资源,咋解决呢?
1)可以用备份恢复+短时间内二进制日志,恢复到故障之前
2)非官方方法,binlog2sql,binlog取反,类似于Oracle的flushback
3)延时从库 

如果同一时间内和故障库无关的数据库都有操作,在截取binlog时都会被截取到,所以使用一个参数 (-d 参数接库名)

#查看binlog事件
mysql> show binlog events in 'mysql-bin.000014';
#查看db1的操作
[root@db01 data]# mysqlbinlog -d db1 --base64-output=decode-rows -vvv /application/mysql/data/mysql-bin.

6.刷新以及删除binlog日志
a( 刷新binlog日志
  1)flush logs;
  2)重启数据库时会刷新
  3)二进制日志上限(max_binlog_size)

b( 删除二进制日志(原则上存储能力范围内,能多保留则多保留,基于上一次全备前的可以选择删除)

#临时生效
SET GLOBAL expire_logs_days = ;
#永久生效
[root@db01 data]# vim /etc/my.cnf
[mysqld]
expire_logs_days = #########七天前的删除
PURGE BINARY LOGS BEFORE now() - INTERVAL  day;     ###三天前删除

PURGE BINARY LOGS TO 'mysql-bin.000010';     到10为止,之前的全删
mysql> reset master;    ######全删,并且日志从0000001开始

  

MySQL学习【第十三篇日志管理】的更多相关文章

  1. MySQL学习笔记十:日志管理

    1.错误日志文件 MySQL的错误日志文件记录错误信息,还会记录mysqld进程的关闭和启动的信息,但也不是什么错误信息都会记录,只记录mysqld进程运行过程中发生的关键性错误. 错误日志的启动,可 ...

  2. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  3. Mysql数据库的用户和日志管理

    Mysql数据库的用户和日志管理 数据库的用户管理 1.mysql用户账号管理 用户账号 user@host user:账户名称 host:此账户可通过哪些客户端主机请求创建连接线程,可以是ip.主机 ...

  4. MySQL/MariaDB数据库的各种日志管理

    MySQL/MariaDB数据库的各种日志管理 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.事务日志 (transaction log) 1>.Innodb事务日志相 ...

  5. Linux学习笔记(21) Linux日志管理

    1. 简介 (1) 日志服务 在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式 ...

  6. Linux基础学习(14)--日志管理

    第十四章——日志管理 一.日志管理简介 1.日志服务: 2.常见日志的作用: 二. rsyslogd日志服务 1.日志文件格式: 2./etc/rsyslog.conf配置文件: 三.日志轮替 1.日 ...

  7. MySQL学习(一)日志与索引 --- 2019年1月

    1.MySQL的架构 1).连接器 先根据Ip和端口号,用户名和密码,连接MySQL数据库,连接后如果没有下一步动作,连接就处于空闲状态,此时有一个连接超时时间的设置 wait_timeout默认8小 ...

  8. MySQL学习笔记Windows篇<一> Welcome to MySQL

    MySQL安装完毕后没有图形化操作界面,图形化管理界面需要另行安装,个人比较喜欢Navicat,界面更像SQLserver: 此篇学习笔记所有操作均使用命令行中完成: 1.开启/停止服务 使用MySQ ...

  9. MySQL for OPS 05:日志管理

    写在前面的话 日志是作为用户排查服务问题的重要依据,在 MySQL 中日志可以分为几类,各自产生着不同的作用.如 error log / bin log / slow log 等.很多时候优化数据库的 ...

随机推荐

  1. ArcGISPlotSilverlightAPI For WPF

    这两天有个需求,在地图上做标绘箭头,效果如下图. Arcgis for WPF 10.2.5.0版本,然而官方文档中没有这种API,自己去写一个呢,又感觉无从下手.无奈去网上搜索了一下,发现一篇好文: ...

  2. How To Install Cacti On Ubuntu 14

    How To Install Cacti On Ubuntu 14.04/14.10 by anismaj Cacti is an open source web based network moni ...

  3. Rabbitmq安装报错 Windows下安装RabbitMQ报错Error: unable to connect to node rabbit@xxx: nodedown

    1..erlang.cookie文件不一致 如果是Windows 64位系统两个文件都要修改,另外当C:\Users\用户\.erlang.cookie没有修改权限的时候 用上面这个文件覆盖下面两个目 ...

  4. firewall 如何开放端口

    转自官方网页:http://www.firewalld.org/documentation/howto/open-a-port-or-service.html How to open port 80/ ...

  5. HTML5离线存储之webstorage

    html5在引入webStorage之前,主要用cookies. html5的webstorage 分两种:LocalStorage 和SessionStorage,两者的差别主要在生命周期不同. 1 ...

  6. OS考研复习笔记——操作系统的定义、目标、作用和发展的主要动力

    计算机系统由硬件和软件两部分组成.操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次补充. 硬件:计算机物理设备,即各种处理机存储器.输入/输出设备 ...

  7. eclipse直接使用tomcat安装程序的webapp目录调试

    感谢此文:http://blog.csdn.net/soszou/article/details/23673133 本文很多技术及操作来源于此文 需求:因为微信方面的开发调试.为了测试方便,直接构建了 ...

  8. 重写UIImageView的image属性

    重写UIImageView的image属性 效果: 当你重写了UIImageView的image属性后你就会对UIImageView怎么显示图片了如指掌了:) 源码: UIImageView.h  + ...

  9. MapReduce Design Patterns(chapter 3 (part 1))(五)

    Chapter 3. Filtering Patterns 本章的模式有一个共同点:不会改变原来的记录.这种模式是找到一个数据的子集,或者更小,例如取前十条,或者很大,例如结果去重.这种过滤器模式跟前 ...

  10. HTTP协议图--HTTP 报文首部之请求行、状态行

    1.请求行 举个栗子,下面是一个 HTTP 请求的报文: GET /index.htm HTTP/1.1 Host: sample.com 其中,下面的这行就是请求行, GET /index.htm ...