- 作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
- 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
- 个人主页:团儿.-CSDN博客
目录
前言:
在数据库管理系统中,日志扮演着至关重要的角色。MySQL,作为最流行的开源关系型数据库管理系统之一,其日志机制不仅记录了数据库的日常操作、用户行为,还包含了丰富的错误信息和性能数据。这些日志对于数据库的数据备份、恢复、性能调优、故障排查以及安全审计等方面具有不可替代的作用。
随着数据量的爆炸性增长和数据库应用的复杂化,如何高效地管理和利用MySQL日志成为了数据库管理员和开发者必须面对的重要课题。通过合理配置和监控日志,我们可以及时发现并解决潜在的问题,优化数据库性能,确保数据的完整性和安全性。
本文将深入探讨MySQL数据库的日志管理机制,包括错误日志、查询日志、慢查询日志以及二进制日志等不同类型的日志。我们将从日志的基本概念、配置方法、查看技巧以及应用场景等多个方面进行详细阐述,旨在帮助读者全面了解MySQL日志管理的各个方面,提升数据库管理的效率和水平。
无论是数据库初学者还是经验丰富的数据库管理员,本文都将为你提供宝贵的参考和实用的指导。让我们一同走进MySQL日志管理的世界,探索其中的奥秘与魅力。
正文:
一.错误日志 ***
1.作用
排查MySQL运行过程的故障.
2.默认配置
默认就开启了.
默认路径和名字: datadir/hostname.err
查看方法: [ERROR]
3.人为定制位置
log_error=/tmp/mysql3306.log
重启生效.
select @@log_error;
二.二进制日志(binlog)******
1.作用
(1) 主从要依赖二进制日志
(2) 数据恢复时需要依赖于二进制日志
2.如何配置?
(1)参数介绍
默认没有开启.
server_id=6
log_bin=/data/binlog/mysql-bin
说明:
mysql-bin : 二进制日志文件名的前缀
例如: mysql-bin.000001 ,mysql-bin.000002 ......
binlog_format=row ---> 5.7版本默认配置是row,可以省略.
(2) 参数配置
查看二进制日志
show master status;
vim /etc/my.cnf
插入log_bin那行:
server_id=6
log_bin=/data/binlog/mysql-bin
binlog_format=row(设置为行格式 默认就是 不需要设置)
(3)创建目录和授权
mkdir -p /data/binlog
chown -R mysql.mysql /data
systemctl restart mysqld
3.二进制日志记录了什么?
3.1概括
记录的数据库所有变更类的操作日志.
DDL: create drop alter
DCL: grant revoke
DML: insert update delete
3.2 DDL 和 DCL
以语句的方式,原模原样的记录.
3.3 DML
(1) 他记录的已提交的事务
(2) DML记录格式(statement,row,mixed),通过binlog_format=row参数控制 ****
说明:
statement:SBR,语句模式记录日志,做什么命令,记录什么命令.
row :RBR,行模式,数据行的变化
mixed :MBR,混合模式
面试问题: SBR和RBR什么区别?怎么选择? ***
SBR: 可读性较强,对于范围操作日志量少,但是可能会出现记录不准确的情况.
RBR: 可读性较弱,对于范围操作日志大,不会出现记录错误.高可用环境中的新特性要依赖于RBR
为什么用RBR?
我们公司对数据的严谨性要求较高,也用到了新型的架构,所以选择RBR
4.二进制日志记录单元
4.1 event 事件
二进制日志的最小单元
DDL :
create database event; 事件1
对于DDL等语句是每一个语句就是一个事件
DML: 一个事务包含了多个语句
begin; 事件1
a 事件2
b 事件3
commit; 事件4
4.2 event事件的开始和结束号码
作用:
方便我们从日志中截取我们想要的日志事件.
5.二进制日志的管理
5.1 查看二进制日志位置
show variables like '%log_bin%';
5.2 查看所有已存在的二进制日志
show binary logs;
#刷新,产生新的二进制日志
flush logs;
show binary logs;
5.3 查看正在使用的二进制日志
show master status ;
5.4 查看二进制日志事件
create database binlog charset utf8mb4;
use binlog
create table t1(id int);
insert into t1 values(1);
show master status ;
show binlog events in 'mysql-bin.000001';
#查看日志中详细事件
5.5 查看二进制日志内容
mysqlbinlog mysql-bin.000001 #看语句级日志,不能看行数据
mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000001 #使用解码的方式,可看行数据
mysqlbinlog -d event mysql-bin.000001 #摘要显示事件号码
5.6 截取二进制日志,还原
mysqlbinlog --start-position=219(开始编号) --stop-position=758(结束编号) mysql-bin.000001 >/tmp/a.sql
set sql_log_bin=0;
source /tmp/a.sql;
set sql_log_bin=1;
6. binlog的gtid记录模式的管理 ****
6.1 GTID介绍
对于binlog中的每一个事务,都会生成一个GTID号码
DDL ,DCL 一个event就是一个事务,就会有一个GTID号.
DML语句来讲,begin到commit,是一个事务,就是一个GTID号
6.2 GTID的组成
server_uuid:TID
cat /usr/local/mysql/data/auto.cnf
[auto]
server-uuid=e2e9b01e-9687-11eb-b577-000c29b0384b
TID是一个:自增长的数据,从1开始
e2e9b01e-9687-11eb-b577-000c29b0384b:1-15
6.3 GTID的幂等性
如果拿有GTID的日志去恢复时,检查当前系统中是否有相同GTID号,有相同的就自动跳过
会影响到binlog恢复和主从复制.
6.4 GTID的开启和配置
vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
6.5 查看GTID信息
create database gtid charset utf8mb4;
show master status;
use gtid;
create table t1(id int);
show master status;
insert into t1 values(1);
commit;
show master status;
drop database gtid;
6.6 基于GTID,binlog恢复
(1) 截取日志
cd /usr/local/mysql/data/binlog/
set sql_log_bin=0;
source /tmp/gtid.sql
set sql_log_bin=1;
mysqlbinlog --include-gtids='820f8917-d358-11ec-b243-000c29cbdce4:1-3' mysql-bin.000001 >/tmp/gtid.sql
(2)恢复
(3) 报错
ERROR 1049 (42000): Unknown database 'gtid'
Query OK, 0 rows affected (0.00 sec)
ERROR 1046 (3D000): No database selected
为什么报错?
因为幂等性的检查,1-3事务已经做过了.
(4)正确的做法?
mysqlbinlog --skip-gtids --include-gtids='820f8917-d358-11ec-b243-000c29cbdce4:1-3' mysql-bin.000001 >/tmp/gtid.sql
--skip-gtids 作用:在导出时,忽略原有的gtid信息,恢复时生成最新的gtid信息
(5) 恢复
set sql_log_bin=0;
source /tmp/gtid.sql
set sql_log_bin=1;
三.慢日志(slow-log)
1.作用
记录运行较慢的语句,优化过程中常用的工具日志.
2.如何配置
## 查看慢日志状态
show variables like '%slow_query_log%';
## 开关
slow_query_log=1
## 文件位置及名字
slow_query_log_file=/data/slow.log
## 设定慢查询时间
long_query_time=0.1
## 没走索引的语句也记录
log_queries_not_using_indexes
vim /etc/my.cnf
slow_query_log=1
slow_query_log_file=/data/slow.log
long_query_time=0.1
log_queries_not_using_indexes
3.模拟慢查询
create database test;
use test;
source /root/t100w.sql
select * from t100w limit 100;
select * from t100w where id=1568;
select * from t100w where num=1100;
select * from t100w where num=102000 order by k1;
select * from t100w where k2='MN88';
4.分析慢日志
mysqldumpslow -s c -t 10 /data/slow.log
期待您的关注~
标签:binlog,log,二进制,解锁,mysql,日志,揭秘,GTID From: https://blog.csdn.net/xyyy060908/article/details/142257278