美文网首页
MySQL-lesson06-日志管理

MySQL-lesson06-日志管理

作者: noodlesbook | 来源:发表于2020-02-01 12:47 被阅读0次
image.png

1、错误日志

  • 作用:记录启动\关闭\日常运行过程中,状态信息,警告,错误

错误日志配置

默认就是开启的: /数据路径下/hostname.err
手工设定:
Master [(none)]>select @@log_error;
vim /etc/my.cnf
log_error=/var/log/mysql.log
log_timestamps=system
重启生效
show variables like 'log_error';

2、binlog日志(二进制日志)

2.1 作用

(1)备份恢复必须依赖二进制日志
(2)主从环境必须依赖二进制日志

2.2 binlog配置(5.7必须加server_id)

注意:MySQL默认是没有开启二进制日志的。

# 基础参数查看:
开关:
[(none)]>select @@log_bin;
日志路径及名字
[(none)]>select @@log_bin_basename;
服务ID号:
[(none)]>select @@server_id;
二进制日志记录格式:
[(none)]>select @@binlog_format;
双一标准之二:
[(none)]>select @@sync_binlog;

# 创建日志目录
mkdir /data/mysql
chown -R mysql.mysql /data/mysql

# 修改配置文件
vim /etc/my.cnf
[mysqld]
log-bin=/data/mysql/mysql-bin      //日志路径及日志文件前缀
binlog_format=row      //日志记录格式
server_id=1            //serverID号

# 重启生效

2.3 二进制日志记录了什么?

mysql数据库所有变更类的sql语句,不记录查询语句

对于DDL、DCL:直接将语句记录下来
对于DML:已提交的DML

记录格式:
row ------>5.7版本默认
特点:记录数据行的变化,可读性不高,日志量较大,数据够精确

statement ------>5.6版本默认
特点:原封不动的记录语句。可读性较高,日志量较少,将来恢复可能会出现错误数据。

mixed :以上两种模式的混合

2.4 event是什么?

二进制日志的最小记录单元
对于DDL、DCL,一个语句就是一个event
对于DML语句:例如以下例子,就被分为4个event
begin;
DML1
DML2
commit;

event的组成
开始位置(# at 157)+事件内容+结束位置(下一个# at 890,或者是end_log_pos 890)

2.5 日志文件查看

log_bin 参数设置的路径,可以找到二进制日志

show binary.logs; //查看所有的二进制文件的信息
show master status; //查看二进制日志使用情况

2.6 二进制日志内容查看

# 二进制日志的事件信息
show binlog events in 'msyql-bin.000002';
    
# 查看二进制日志内容
mysqlbinlog /data/mysql/mysql-bin.000002
两个at之间就是一个事件,/、*之类不用看是注释;去掉这些之外就是事件内容。

# 查看rows格式内容
mysqlbinlog --base64-output=decode-rows -vvvv /data/mysql/mysql-bin.000002
对于DML语句,二进制文件用rows格式,不可读

# 查看特定库的内容
mysqlbinlog -d testdb /data/mysql/mysql-bin.000002

2.7 日志截取

# 查看事件
show binlog events in 'msyql-bin.000002';

# 截取日志
mysqlbinlog --start-position=321 --stop-position=513 /data/mysql/mysql-bin.000002 >/tmp/binlog.sql

# 临时关闭此窗口的二进制日志
set sql_log_bin=0;     //恢复会产生额外的二进制日志

# 将截取的二进制日志恢复
source /tmp/binlog.sql

# 回复完记得改回
set sql_log_bin=1; 

# 无GTID :
mysqlbinlog --start-position     --stop-position   mysql-bin.000002 > /tmp/binlog.sql
mysqlbinlog -d world --start-position     --stop-position   mysql-bin.000002 > /tmp/binlog.sql      //查询特定库的binlog
mysqlbinlog --start-datetime  --stop-datetime  mysql-bin.000002  mysql-bin.000003> /tmp/binlog.sql       //用时间点过滤多二进制日志文件

# 有GTID : 
mysqlbinlog --skip-gtids --include-gtids='xxxxxxxx:1-14'  mysql-bin.000002  mysql-bin.000003> /tmp/binlog.sql
mysqlbinlog --skip-gtids --include-gtids='xxxxxxxx:1-5','xxxxxxxx:7-10'   mysql-bin.000002  mysql-bin.000003> /tmp/binlog.sql     //截取多段gtid日志
mysqlbinlog --skip-gtids --include-gtids='xxxxxxxx:1-14' --exclude-gtids='xxxxxxxx:6'  mysql-bin.000002  mysql-bin.000003> /tmp/binlog.sql    //截取1-14 gtid日志,排除第6个gtid日志
--skip-gtids      //本地数据恢复,恢复到原来数据库

2.8 使用二进制日志恢复数据案例

  • 只要有全量的binlog,可以把数据库恢复到任意时间点。

数据故障原因:
1、软件损坏
2、数据损坏
(1) 物理损坏
(2) 硬件损坏,数据文件数据页
(3) 逻辑损坏
(4) SQL导致误删除,误修改

故障恢复模拟:

# 建表语句
create database db charset utf8;
use db;
create table t1(id int);
insert into t1 values(1),(2),(3);
insert into t1 values(4),(5),(6);
commit;
update t1 set id=30 where id=4;
commit;
delete from t1 where id=4;
commit;
drop table t1;

# 进入db库,查找二进制文件名 
show master status;
show binlog events in 'mysql-bin.000002';

# 找到建表时的位置点和删表之前时的位置点;

# 截取二进制日志:
mysqlbinlog --start-position=614 --stop-position=1470 /data/mysql/mysql-bin.000002 >/tmp/binlog.sql

# 临时关闭此窗口的二进制日志
set sql_log_bin=0;     //恢复会产生额外的二进制日志

# 将截取的二进制日志恢复
source /tmp/binlog.sql

# 查看结果
select * from t1;

# 回复完记得改回
set sql_log_bin=1; 

2.9 二进制日志其它操作

二进制日志自动清理时间,是按照全备周期+1;企业建议,至少保留15天。

# 查看日志过期天数
show variables like '%expire%';
expire_logs_days      |  0

# 设置日志过期天数
set global expire_logs_days=8;
永久生效:
vim /etc/my.cnf
expire_logs_days=8;   //重启生效

# 手工清理二进制日志
purge binary logs before now() - interval 3 day;   //删除三天之前的所有二进制日志
purge binary logs to 'mysql-bin.000010';    //删除二进制日志第1-10号

# 注意:禁止手动 rm 删除二进制日志;
解决方案:
1、my.cnf 配置文件binlog 关闭,启动数据库
2、把数据库关闭,开启binlog,启动数据库 

# 删除所有binlog,并从000001开始重新记录日志
reset master;

2.10 日志滚动

  1. 日志滚动的3种情况:
    1、重启mysql 会自动滚动一个新的binlog文件
    2、日志文件达到1G大小(max_binlog_size)
    3、备份时,加入参数也可以自动滚动

  2. 手工滚动出来一个新的日志
    flush logs;

3、慢日志(记录慢语句的日志)

# 开启慢日志的四个参数:
 # 开关
slow_query-log=0     
# 文件的位置及名字
slow_query_log_file=/data/mysql/slow.log    
# 设定慢查询阈值,单位为秒
long_query_time=0.01    
# 设定没走索引的语句都认为是慢语句
log_queries_not_using_indexes      

# 配置慢日志
vim /etc/my.cnf
[mysqld]
slow_query-log=1     
slow_query_log_file=/data/mysql/slow.log 
long_query_time=0.01       
log_queries_not_using_indexes

# 重启

3.1 慢日志排序工具

1、mysqldumpslow
mysqldumpslow -s c -t 10 /data/mysql/slow.log
-s 排序方式 c 次数 t 时间 l 查询时间 r 返回记录数
ac、at、al、ar、表时相应的倒序。
-t top n的意思,即为返回前面多少条数据
-g 后面可以写一个正则匹配模式,大小写不敏感的

2、percona-toolkit
下载toolkit软件包
https://www.percona.com/downloads/percona-toolkit/LATEST/

下载perl包依赖
yum install -y perl perl-Time-HiRes perl-DBI perl-DBD-MySQL perl-IO-Socket-SS

toolkit工具命令:
cd /percona-toolkit-3.0.12/bin/
./pt-query-diagest /data/mysql/slow.log

相关文章

  • MySQL-lesson06-日志管理

    MySQL-lesson06-日志管理 1.错误日志(log_error) 1.1 作用 1.2 错误日志配置 1...

  • MySQL-lesson06-日志管理

    1.错误日志(log_error) 1.1 作用 1.2 错误日志配置 1.3 日志内容查看 2. binlog(...

  • MySQL-lesson06-日志管理

    1、错误日志 作用:记录启动\关闭\日常运行过程中,状态信息,警告,错误 错误日志配置 默认就是开启的: /数据...

  • 老男孩-标杆班级-MySQL-lesson06-日志管理

    如果您对数据库感兴趣,可以添加 DBA解决方案QQ群:855439640 1.错误日志(log_error) 1....

  • 20171012 日志管理

    日志介绍rsyslog日志管理journalctlMySQL管理日志 一、日志介绍 (一)日志的基本概念 日志:将...

  • HDFS Using QJM

    HDFS 使用分布式日志管理,日志管理的是nameNode的fsimages和eidts日志文件。

  • 27-日志管理

    本章内容 ◆ 日志介绍◆ 日志配置◆ 日志管理◆ 远程日志◆ 基于MYSQL的日志 日志介绍 rsyslog 启用...

  • 02、Kafka日志Log源码分析

    日志是日志段的容器,里面定义了很多管理日志段的操作。 既然日志要管理日志段对象,那么首先得加载所有日志段对象到内存...

  • 第十章 使用日志监控 - 配置日志监控

    第十章 使用日志监控 - 配置日志监控 日志监视器管理器实用程序 ^MONMGR 允许配置和管理日志管理器。可以停...

  • monkey日志管理

    日志管理作用 Monkey日志管理是Monkey测试中非常重要的一个环节,通过日志管理分析,可以获取当前测试对象在...

网友评论

      本文标题:MySQL-lesson06-日志管理

      本文链接:https://www.haomeiwen.com/subject/qwotxhtx.html