美文网首页
六,日志管理

六,日志管理

作者: 会倒立的香飘飘 | 来源:发表于2021-05-28 09:54 被阅读0次

1,错误日志

作用

排查MySQL运行过程的故障

默认配置

默认就开启了.
默认路径和名字: datadir/主机名.err
查看方法: [ERROR]

人为定制位置

vim /etc/my.cnf
log_error=/tmp/mysql3306.log
重启生效.
mysql> select @@log_error;
+--------------------+
| @@log_error        |
+--------------------+
| /tmp/mysql3306.log |
+--------------------+
1 row in set (0.00 sec)

2,二进制日志(binlog)

作用

(1) 主从要依赖二进制日志
(2) 数据恢复时需要依赖于二进制日志

配置

(1)参数介绍
默认没有开启.
server_id=6
log_bin=/data/binlog/mysql-bin
说明: 
/data/binlog : 提前定制好的目录,而且要有mysql.mysql的权限
mysql-bin    : 二进制日志文件名的前缀
例如: mysql-bin.000001  ,mysql-bin.000002 ......
binlog_format=row ---> 5.7版本默认配置是row,可以省略.
(2) 参数配置 
server_id=6
log_bin=/data/binlog/mysql-bin
binlog_format=row

(3)创建目录和授权
mkdir -p /data/binlog/
chown -R mysql.mysql /data
(4)重启生效
systemctl restart mysqld
(5)查看
[root@mister_f binlog]# ll /data/binlog/
total 720
-rw-r----- 1 mysql mysql    776 May 10 10:38 mysql-bin.000001
-rw-r----- 1 mysql mysql    300 May 11 18:02 mysql-bin.index

二进制日志记录

概括
记录的数据库所有变更类的操作日志.
DDL
DCL
DML
DDL 和 DCL 
以语句的方式,原模原样的记录
DML 
(1) 他记录的已提交的事务
(2) DML记录格式(statement,row,mixed),通过binlog_format=row参数控制(只影响DML语句)
说明:
    statement:SBR,语句模式记录日志,做什么命令,记录什么命令.
    row      :RBR,行模式,数据行的变化
    mixed    :MBR,混合模式

面试问题: SBR和RBR什么区别?怎么选择?
SBR:  可读性较强,对于范围操作日志量少,但是可能会出现记录不准确的情况.
RBR:  可读性较弱,对于范围操作日志大,不会出现记录错误.
      高可用环境中的新特性要依赖于RBR
我们公司对数据的严谨性要求较高,也用用到了新型的架构,所以选择RBR

二进制日志记录单元

event 事件
二进制日志的最小单元
DDL :  
create database boy;  事件1

对于DDL等语句是每一个语句就是一个事件
DML: 一个事务包含了多个语句
begin;          事件1
a               事件2
b               事件3
commit;         事件4
event事件的开始和结束号码
作用:方便我们从日志中截取我们想要的日志事件.
二进制日志的管理

查看二进制日志位置

mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name                   | Value                        |
+---------------------------------+------------------------------+
| log_bin                         | ON                           |
| log_bin_basename                | /data/binlog/mysql-bin       |
| log_bin_index                   | /data/binlog/mysql-bin.index |
| log_bin_trust_function_creators | OFF                          |
| log_bin_use_v1_row_events       | OFF                          |
| sql_log_bin                     | ON                           |
+---------------------------------+------------------------------+
6 rows in set (0.00 sec)

看所有已存在的二进制日志

mysql> flush logs;
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       776 |
| mysql-bin.000002 |       177 |
| mysql-bin.000003 |      1041 |
+------------------+-----------+
11 rows in set (0.00 sec)

看正在使用的二进制日志

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000011 |      194 |              |                  | f4926326-afda-11eb-aca3-525400956ca6:1-45 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)

查看二进制日志的事件

mysql> create database binlog charset utf8mb4;
mysql> use binlog
mysql> create table t1(id int);
mysql> insert into t1 values(1);
mysql> commit;
查看事件
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000011 |      798 |              |                  | f4926326-afda-11eb-aca3-525400956ca6:1-48 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> show binlog events in 'mysql-bin.000011';
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                               |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000011 |   4 | Format_desc    |         6 |         123 | Server ver: 5.7.26-log, Binlog ver: 4                              |
| mysql-bin.000011 | 123 | Previous_gtids |         6 |         194 | f4926326-afda-11eb-aca3-525400956ca6:1-45                          |
| mysql-bin.000011 | 194 | Gtid           |         6 |         259 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:46' |
| mysql-bin.000011 | 259 | Query          |         6 |         375 | create database binlog charset utf8mb4                             |
| mysql-bin.000011 | 375 | Gtid           |         6 |         440 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:47' |
| mysql-bin.000011 | 440 | Query          |         6 |         541 | use `binlog`; create table t1(id int)                              |
| mysql-bin.000011 | 541 | Gtid           |         6 |         606 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:48' |
| mysql-bin.000011 | 606 | Query          |         6 |         680 | BEGIN                                                              |
| mysql-bin.000011 | 680 | Table_map      |         6 |         727 | table_id: 119 (binlog.t1)                                          |
| mysql-bin.000011 | 727 | Write_rows     |         6 |         767 | table_id: 119 flags: STMT_END_F                                    |
| mysql-bin.000011 | 767 | Xid            |         6 |         798 | COMMIT /* xid=5533 */                                              |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
11 rows in set (0.00 sec)
 

查看二进制日志内容

[root@mister_f binlog]# mysqlbinlog mysql-bin.000011 
详细查看
[root@mister_f binlog]# mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000011

截取二进制日志

mysql> show binlog events  in 'mysql-bin.000011';
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                               |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000011 |   4 | Format_desc    |         6 |         123 | Server ver: 5.7.26-log, Binlog ver: 4                              |
| mysql-bin.000011 | 123 | Previous_gtids |         6 |         194 | f4926326-afda-11eb-aca3-525400956ca6:1-45                          |
| mysql-bin.000011 | 194 | Gtid           |         6 |         259 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:46' |
| mysql-bin.000011 | 259 | Query          |         6 |         375 | create database binlog charset utf8mb4                             |
| mysql-bin.000011 | 375 | Gtid           |         6 |         440 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:47' |
| mysql-bin.000011 | 440 | Query          |         6 |         541 | use `binlog`; create table t1(id int)                              |
| mysql-bin.000011 | 541 | Gtid           |         6 |         606 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:48' |
| mysql-bin.000011 | 606 | Query          |         6 |         680 | BEGIN                                                              |
| mysql-bin.000011 | 680 | Table_map      |         6 |         727 | table_id: 119 (binlog.t1)                                          |
| mysql-bin.000011 | 727 | Write_rows     |         6 |         767 | table_id: 119 flags: STMT_END_F                                    |
| mysql-bin.000011 | 767 | Xid            |         6 |         798 | COMMIT /* xid=5533 */                                              |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
11 rows in set (0.00 sec)


找到起始位和结束位
[root@mister_f binlog]# mysqlbinlog --start-position=259 --stop-position=767 /data/binlog/mysql-bin.000011  >/tmp/full.sql

通过二进制日志恢复数据

数据模拟:

mysql> create database boy charset utf8mb4;
mysql> use boy 
mysql> create table t1(id int);
mysql> insert into t1 values(1);
mysql> commit;

模拟故障:

mysql> drop database boy;

基于binlog恢复:
确认使用的那个binlog日志
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      891 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

查看事件:


mysql> show binlog events in 'mysql-bin.000002';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql-bin.000002 |   4 | Format_desc    |         7 |         123 | Server ver: 5.7.26-log, Binlog ver: 4 |
| mysql-bin.000002 | 123 | Previous_gtids |         7 |         154 |                                       |
| mysql-bin.000002 | 154 | Anonymous_Gtid |         7 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql-bin.000002 | 219 | Query          |         7 |         326 | create database bin charset utf8mb4   |
| mysql-bin.000002 | 326 | Anonymous_Gtid |         7 |         391 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql-bin.000002 | 391 | Query          |         7 |         486 | use `bin`; create table t1(id int)    |
| mysql-bin.000002 | 486 | Anonymous_Gtid |         7 |         551 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql-bin.000002 | 551 | Query          |         7 |         622 | BEGIN                                 |
| mysql-bin.000002 | 622 | Table_map      |         7 |         666 | table_id: 151 (bin.t1)                |
| mysql-bin.000002 | 666 | Write_rows     |         7 |         706 | table_id: 151 flags: STMT_END_F       |
| mysql-bin.000002 | 706 | Xid            |         7 |         737 | COMMIT /* xid=453 */                  |
| mysql-bin.000002 | 737 | Anonymous_Gtid |         7 |         802 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql-bin.000002 | 802 | Query          |         7 |         891 | drop database bin                     |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
13 rows in set (0.00 sec)

找到创建库之前和删除库之前的号码进行binlog截取,

[root@mister_f ~]# mysqlbinlog --start-position=219 --stop-position=802 /data/3307/mysql-bin.000002 >/tmp/binlog.sql

进行数据恢复:
先临时关闭数据恢复是产生的日志
mysql> set sql_log_bin=0;
mysql> source /tmp/binlog.sql;
mysql> set sql_log_bin=1;

binlog的gtid记录模式管理

GTID介绍

对于binlog中的每一个事务,都会生成一个GTID号码
DDL ,DCL 一个event就是一个事务,就会有一个GTID号.
DML语句来讲,begin到commit,是一个事务,就是一个GTID号
组成:
severi_uuid:TID
[root@mister_f ~]# cat /data/mysql/auto.cnf 
[auto]
server-uuid=f4926326-afda-11eb-aca3-525400956ca6
TID是一个:自增长的数据,从1开始
d60b549f-9e10-11e9-ab04-000c294a1b3b:1-15

GTID的幂等性
如果拿有GTID的日志去恢复时,检查当前系统中是否有相同GTID号,有相同的就自动跳过
会影响到binlog恢复和主从复制

开启GTID

vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true

查看gtid

mysql> create database gtid charset utf8mb4;
mysql> use gtid;
mysql> create table t1(id int);
mysql> insert into t1 values(1);
mysql> commit;

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000024 |      785 |              |                  | f4926326-afda-11eb-aca3-525400956ca6:1-76 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> mysql> show binlog evenmysql-bin.000024';
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                               |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000024 |   4 | Format_desc    |         6 |         123 | Server ver: 5.7.26-log, Binlog ver: 4                              |
| mysql-bin.000024 | 123 | Previous_gtids |         6 |         194 | f4926326-afda-11eb-aca3-525400956ca6:1-73                          |
| mysql-bin.000024 | 194 | Gtid           |         6 |         259 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:74' |
| mysql-bin.000024 | 259 | Query          |         6 |         370 | create  database gtid charset utf8mb4                              |
| mysql-bin.000024 | 370 | Gtid           |         6 |         435 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:75' |
| mysql-bin.000024 | 435 | Query          |         6 |         532 | use `gtid`; create table t1(id int)                                |
| mysql-bin.000024 | 532 | Gtid           |         6 |         597 | SET @@SESSION.GTID_NEXT= 'f4926326-afda-11eb-aca3-525400956ca6:76' |
| mysql-bin.000024 | 597 | Query          |         6 |         669 | BEGIN                                                              |
| mysql-bin.000024 | 669 | Table_map      |         6 |         714 | table_id: 108 (gtid.t1)                                            |
| mysql-bin.000024 | 714 | Write_rows     |         6 |         754 | table_id: 108 flags: STMT_END_F                                    |
| mysql-bin.000024 | 754 | Xid            |         6 |         785 | COMMIT /* xid=10 */                                                |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
11 rows in set (0.00 sec)

基于GTID binlog恢复

mysql> drop database gtid;
截取日志:
[root@mister_f ~]# mysqlbinlog --include-gtids='f4926326-afda-11eb-aca3-525400956ca6:74-76' /data/binlog/mysql-bin.000024 >/tmp/gtid.sql

恢复:
set sql_log_bin=0;
source /tmp/gtid.sql;
报错:
ERROR 1049 (42000): Unknown database 'gtid'
因为幂等性的检查,74-76事务已经做过了.

正确做法:

[root@mister_f ~]# mysqlbinlog --skip-gtids --include-gtids='f4926326-afda-11eb-aca3-525400956ca6:74-76' /data/binlog/mysql-bin.000024 >/tmp/gtid.sql
--skip-gtids 作用:在导出时,忽略原有的gtid信息,恢复时生成最新的gtid信息

恢复:

set sql_log_bin=0;
source /tmp/gtid.sql;
mysql> set sql_log_bin=1;

GTID相关参数

--skip-gtids: 在导出时,忽略原有的gtid信息,恢复时生成最新的gtid信息
--include-gtids: 想截取的那些日志
--exclude-gtids: 排除那些日志,如果不是连续的需要单独写出

三,慢日志

作用

记录运行较慢的语句,优化过程中常用的工具日志.

配置

默认没有开启
vim /etc/my.cnf
slow_query_log=1 
slow_query_log_file=/data/mysql/slow.log
long_query_time=0.1
log_queries_not_using_indexes

参数介绍:
##开关
slow_query_log=1 
## 文件位置及名字 
slow_query_log_file=/data/mysql/slow.log
## 设定慢查询时间
long_query_time=0.1
## 没走索引的语句也记录
log_queries_not_using_indexes

分析慢日志

mysqldumpslow -s c -t 10 /data/mysql/slow.log

-s: sort 排序
-c: count 次数
-t:top 前多少个

[root@mister_f mysql]# mysqldumpslow -s c -t 10 /data/mysql/slow.log

Reading mysql slow query log from /data/mysql/slow.log
Count: 10  Time=0.51s (5s)  Lock=0.00s (0s)  Rows=223.2 (2232), root[root]@localhost
  select * from t100w where k1='S'

Count: 6  Time=0.48s (2s)  Lock=0.00s (0s)  Rows=2.5 (15), root[root]@localhost
  select * from t100w where num='S'

Died at /app/mysql/bin/mysqldumpslow line 161, <> chunk 16.
拿到慢的语句看执行计划分析该建索引建索引,

第三方工具下载二进制包

https://www.percona.com/downloads/percona-toolkit/LATEST/
装依赖:
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5
toolkit工具包中的命令:
pt-query-diagest  /data/mysql/slow.log

image.png

4,二进制日志清理

自动清理

查看:
mysql> show variables like '%expire%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| disconnect_on_expired_password | ON    |
| expire_logs_days               | 0     |
+--------------------------------+-------+
2 rows in set (0.00 sec)

自动清理时间,是要按照全备周期+1
mysql> set global expire_logs_days=8;
永久生效:
vim /etc/my.cnf
expire_logs_days=15;
企业建议,至少保留两个全备周期+1的binlog
设置的依据: 至少1轮全备周期长度的过期时间.

手动清理

mysql> show binary logs;   查看日志
mysql> help purge
删除日志例子:
PURGE BINARY LOGS TO 'mysql-bin.000032';
PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       776 |
| mysql-bin.000002 |       177 |
| mysql-bin.000003 |      1041 |
| mysql-bin.000004 |       177 |
| mysql-bin.000005 |       177 |
| mysql-bin.000006 |       177 |
| mysql-bin.000007 |      1904 |
| mysql-bin.000008 |      3141 |
| mysql-bin.000009 |       217 |
| mysql-bin.000010 |    693845 |
| mysql-bin.000011 |      1736 |
| mysql-bin.000012 |       978 |
| mysql-bin.000013 |      1715 |
| mysql-bin.000014 |       978 |
| mysql-bin.000015 |       954 |
| mysql-bin.000016 |       241 |
| mysql-bin.000017 |       978 |
| mysql-bin.000018 |       217 |
| mysql-bin.000019 |      1845 |
| mysql-bin.000020 |       241 |
| mysql-bin.000021 |       217 |
| mysql-bin.000022 |       241 |
| mysql-bin.000023 |       217 |
| mysql-bin.000024 |       965 |
| mysql-bin.000025 |  21734641 |
| mysql-bin.000026 |       194 |
+------------------+-----------+
26 rows in set (0.00 sec)

mysql> purge binary logs to 'mysql-bin.000025';

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000025 |  21734641 |
| mysql-bin.000026 |       194 |
+------------------+-----------+
2 rows in set (0.00 sec)



注意:不要手工 rm binlog文件
1. my.cnf binlog关闭掉,启动数据库
2.把数据库关闭,开启binlog,启动数据库


删除所有binlog,并从000001开始重新记录日志
mysql> reset master;
Query OK, 0 rows affected (0.03 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.00 sec)

*reset master; 主从关系中,主库执行此操作,主从环境必崩

日志滚动

mysql> flush logs;
重启mysql也会自动滚动一个新的
日志文件达到1G大小(max_binlog_size)
mysql> select @@max_binlog_size;
+-------------------+
| @@max_binlog_size |
+-------------------+
|        1073741824 |
+-------------------+
1 row in set (0.00 sec)

备份时,加入参数也可以自动滚动

相关文章

  • 六,日志管理

    1,错误日志 作用 默认配置 人为定制位置 2,二进制日志(binlog) 作用 配置 二进制日志记录 二进制日志...

  • 20171012 日志管理

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

  • nginx(六)日志管理

    nginx访问日志主要有两个参数控制 1)log_format #用来定义记录日志的格式(可以定义多种日志格式,取...

  • 六,MyBatis日志管理

    一,什么是日志: 日志是用于记录系统操作事件的记录文件或文件的集合 日志保存历史数据,是诊断问题以及理解系统优化活...

  • 六、权限管理和日志管理

    一、权限管理 1.用户管理 如果报错进入server端服务器登陆mysql执行:mysql> use mysqlm...

  • HDFS Using QJM

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

  • Pytest和Allure测试框架-超详细版+实战6

    六,日志管理及代码覆盖率 1, pytest中logging的应用 2, 日志及级别的含义 自动化测试用例的调试信...

  • 27-日志管理

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

  • 02、Kafka日志Log源码分析

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

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

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

网友评论

      本文标题:六,日志管理

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