日志管理
general log 普通日志
1.1 作用
记录从登陆开始,所有的操作日志.
默认没有开启.调试时会开启.
1.2 配置
mysql> show variables like '%general%';
+------------------+--------------------------+
| Variable_name | Value |
+------------------+--------------------------+
| general_log | OFF |
| general_log_file | /data/3306/data/db01.log |
+------------------+--------------------------+
mysql> set global general_log=1;
tail -f db.log
error log 错误日志
2.1 作用
记录数据库启动以来,状态 报错 警告....
默认开启.
2.2 配置方法
log_error=xxx
log_error_verbosity=3
搜索 [ERROR] 上下文.
binary log 二进制日志
1 作用
以二进制格式,记录所有数据库修改类的操作日志.
数据备份,主从.
2 配置
log_bin 开关
log_bin_basename 存放路径的文件名前缀 /data/3306/binlog/mysql_bin
mkdir -p /data/3306/binlog
chown -R mysql. /data
vim /etc/my.cnf
server_id=51
log_bin=/data/3306/binlog/mysql-bin
3 存储格式 ******
binlog 是以event(事件)作为最小单元,记录日志.
针对: DDL DCL,事件直接以Statement(语句模式)
针对: DML语句 (update delete insert ),记录格式受binlog_format参数控制
格式种类:
statement : 语句模式.做啥记录啥.
row : 行模式.记录行变化.
mixed : 混合模式. 大几率是statement
区别:
statement : 日志量少.可读性强,随机函数类操作时,记录有可能错误数据.
ROW : 日志量大.可读性弱.数据记录准确.
生产建议 ROW .默认也是row 5.6版本之后
4 查询日志
mysql> show binary logs; 刷新多次
mysql> show binary logs; 展示binlog日志 ,都只会往最后一个日志文件里写
mysql> show master status ; 查看当前使用文件的状态
mysql> show binlog events in 'mysql-bin.000005';
pos: 一个事件起始的偏移数
End_log_pos: 这个事件完结的偏移数。
`使用专门的二进制命令进行对文件的查看
简单查看,会直接输入到面板上,,at 后是我们的偏移点
[root@db01 binlog]
如果想详细的看,begin中的DML语句,可以进行加载参数,进行详细的翻译
[root@db01 binlog]
3.5 数据恢复
a. 分析
确认起点和终点
b. 截取日志
mysqlbinlog --start-position=xx --stop-position=yy /data/3306/binlog/mysql-bin.000005 >/tmp/bin.sql (命令行)
c. 恢复日志
set sql_log_bin=0;
source /tmp/bin.sql
set sql_log_bin=1;
彩蛋: 以上场景,如果在生产中会有什么痛点?
1. 数据库运行了很多年了,怎么恢复?
备份恢复+binlog恢复
2. 需要的日志跨了多个文件 ?
pos不支持跨文件.只在本文件中生效。。
可以使用:时间或者GTID.
3. binlog记录了所有库,所有表的
mysqlbinlog -d oldguo ,可以解决单独一个库的日志过滤
binlog2sql 工具 可以这针对表的级别,截取日志.
4. drop操作之后还有新的操作.
这样就需要分段截取了,一段一段,截取自己想要的那一段
GTID (5.6才出的,是5.7火起来的)
不管你有多少文件,不管你这些文件从哪里来,我都会给你打上一个事务的标记(唯一的)。它这个号码都是不变的,是单调递增的。然后到时候提取的时候,就可以直接提取标号,也就可以随意跨文件了
1 介绍
server_uuid:TID(自己自增的数字,从1开始)
幂等性:其实就是对于一致性的不操作
2 配置
vim /etc/my.cnf
enforce_gtid_consistency=on 强制GTID的一致性
gtid_mode=on GTID的开关
log_slave_updates=ON 默认是打开的
当你重启配置文件,进行全局生效之后。
mysql> mysql
mysql> create database oldlei;
mysal> show master status
Executed_Gtid_Set
--------------------------------------
bd3c75c7-3db3-11eb-8cac-000c29033daa:1
mysql> use oldlei;
mysql> create table t1(id int);
mysal> show master status
Executed_Gtid_Set
-----------------------------------------
bd3c75c7-3db3-11eb-8cac-000c29033daa:1-2
当使用GTID的编号的时候,就需要查看
show binlog events in 'mysql_bin.000006';
info
SET @@SESSION.GTID_NEXT= 'bd3c75c7-3db3-11eb-8cac-000c29033daa:1'
3 基于GTID的数据恢复(这里有一个幂等性的问题,所以需要跳过gtid。让它重新进行加载,否则报错)
[root@db01 data]
跳过某一个事件:
mysqlbinlog --skip-gtids --include-gtids='95972e36-43fe-11eb-a366-000c2905f029:1-10' --exclude-gtids='95972e36-43fe-11eb-a366-000c2905f029:4' ......
扩展内容: binlog2
binlog2sql 工具使用
a. 作用
将日志格式化成SQL,辅助我们查看分析日志内容.
误操作的闪回.
b. 安装
[root@db01 opt]
[root@db01 binlog2sql-master]
[root@db01 opt]
c. 单独过滤某张表的binlog
mysql> create table t2 (id int not null primary key auto_increment ,name varchar(32) not null);
mysql> insert into t2 values(1,'a'),(2,'b'),(3,'c');
[root@db01 binlog2sql-master]
d. 单独过滤某些类型的binlog
[root@db01 binlog2sql-master]
DELETE FROM `test1`.`t1` WHERE `id`=3 LIMIT 1;
[root@db01 binlog2sql-master]
UPDATE `test1`.`t1` SET `id`=10 WHERE `id`=1 LIMIT 1;
[root@db01 binlog2sql-master]
e. 生成指定事件回滚语句
应用场景: 3000万数据,误删10行数据,怎么恢复?
[root@db01 binlog2sql]
[root@db01 binlog2sql]
slow log
1 作用
记录运行过程中较慢的语句.
辅助管理员进行优化.
2 配置
默认没有开启.
mysql> select @@slow_query_log;
设置开关:
mysql> set global slow_query_log=1;
设置位置点:
mysql> select @@slow_query_log_file;
+-------------------------------+
| @@slow_query_log_file |
+-------------------------------+
| /data/3306/data/db01-slow.log |
+-------------------------------+
设置阈值:
mysql> select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
| 10.000000 |
+-------------------+
1 row in set (0.00 sec)
mysql> set global long_query_time=0.01;
不走索引的:
mysql> select @@log_queries_not_using_indexes;
+---------------------------------+
| @@log_queries_not_using_indexes |
+---------------------------------+
| 0 |
+---------------------------------+
4.3 模拟慢语句.
添加一些查询的语句,尽量多而且慢,不走索引的。
4.4 分析
[root@db01 data]