MySQL高级篇——日志
一、简介
1. 分类
Mysql有不同的日志文件,用来存储不同类型和功能的日志,分为二进制日志
、错误日志
、通用查询日志
、慢查询日志
。Mysql8.0又新增两种日志:中继日志
和数据定义语句日志
。
2. 弊端
- 日志会降低mysql数据库的性能,需要花费额外时间记录日志。
- 日志会占用大量磁盘空间。
二、通用查询日志(general query log)
1. 介绍
正如他的名字一样,该日志会记录用户的所有操作,包括启动和关闭mysql服务,所有用户的连接开始时间和结束时间、发给mysql的所有sql指令。
2. 相关变量
show variables like '%general%'
set GLOBAL general_log=on;
set GLOBAL general_log_file='/path/filename'
如果开启了以后,可以直接通过vim查看通用查询日志。
3.备份
如果删除或者改名了原来的日志文件,使用如何命令重新生成查询日志文件:
mysqldadmin -uroot -p flush-logs
三、错误日志(error log)
1. 介绍
错误日志记录了mysql服务器启动、停止运行的时间,以及系统启动、运行和停止过程中的诊断信息,包括错误、警告和提示等。
该日志默认是开启的,而且无法被禁止。
默认情况下,错误日志存储/var/log下,名称默认为mysqld.log
2. 备份
#mysql5.5.7以前不用执行第一句
install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log
mysqldadmin -uroot -p flush-logs
四、二进制日志(bin log)
1. 介绍
它记录了数据库所有执行的ddl和dml等数据库更新事件语句,但是不包括没有修改数据的语句(select、show等)。
它的主要应用场景有两个:
- 用于数据恢复,通过查看用户执行了哪些操作,可以实现数据的增量恢复。
- 用于数据复制,master把二进制文件传递给slaves来达到master-slave数据一致的目的。
2. 相关变量
show variables like '%log_bin%'
log_bin_trust_function_creators:表示是否信任存储函数
log_bin_use_v1_row_events: on表示使用版本1二进制日志行,off表示使用版本2二进制日志行
show variables like '%binlog_format%'
binglog有如下3种格式:
statement
: 每一条修改的sql都会记录在binlog中。好处是不需要记录每行的变化,减少日志量,节约io。row
: 保存那条记录被修改。可以避免存储过程或函数无法正确复制的问题。mixed
:5.1.8以后提供,是statement和row的结合。
3. 永久性设置
修改mysql的my.cnf或my.ini
文件:
log_bin = xxxx # 日志名
binlog_expire_logs_seconds=600 # 日志保存时间,s
max_binlog_size=100M # 单个日志大小,当前日志文件大小超过此变量,执行切换动作。默认大小为1GB。该设置不是严格遵守的。
4. 查看日志
mysql每重启一次,就会生成一个bin log文件。查看当前binlog列表及其大小:
show binary logs
所有对数据库的修改都会记录在binlog中,单binlog是二进制文件,无法直接查看,想要查看需要借助mysqlbinlog
命令工具。
mysqlbinlog "日志文件路径/名字"
默认打开后,并没有具体的sql语句,而是记录了一些事件:
- Query事件,负责开始一个事务。
- Table_map事件,负责映射需要的表。
- Update_rows事件,复制写入数据。
- Xid事件,复制结束事务。
mysqlbinlog -v "日志文件路径/名字" # 将行事件以伪sql形式表示出来
5. 恢复数据
可以使用mysqlbinlog工具从指定时间点开始到另外一个时间点的日志中恢复数据。
mysqlbinlog [option] filename | mysql -uroot -p
option有几个重要参数:
--start-date
和--stop-date
:可以指定数据库恢复的起始时间和结束时间--start-position
和--stop-position
:可以指定恢复数据的开始位置和结束为止--database=“”
:指定数据库
如果是用位置恢复,需要使用如下命令来获取为止:
show binlog events in 'binlog 文件名'
6. 删除二进制日志
mysql的二进制文件可以配置自动删除,也可以安全的手动删除的方法。
PURGE MASTER LOGS
删除指定部分:
PURGE {MASTER | BINARY} LOGS TO '指定文件名' # 删除创建时间早于xxx的日志
PURGE {MASTER | BINARY} LOGS BEFORE '指定日期' # 删除xxxx时间前创建的所有日志。
RESET BINARYLOGS
删除所有:
7. 两阶段提交
binglog的写入策略由参数sync_binlog
控制,默认是0
。表示每次提交都只写到操作系统缓存中,由系统判断什么时候执行刷盘。为1
时,表示每次提交都会刷盘。当大于1
时,表示累计到n个事务时才刷盘。
innodb更新一条指定数据的过程如下:
edo log与binlog都写一次的话,也就是存在以下两种情况:
- 先写binlog,再写redo log:当前事务提交后,写入binlog成功,之后主节点崩溃。在主节点重启后,由于没有写入redo log,因此不会恢复该条数据。而从节点依据binlog在本地回放后,会相对于主节点多出来一条数据,从而产生主从不一致。
- 先写redo log,再写binlog:当前事务提交后,写入redo log成功,之后主节点崩溃。在主节点重启后,主节点利用redo log进行恢复,就会相对于从节点多出来一条数据,造成主从数据不一致。
此时,如果发生崩溃,就可以根据redolog和binlog进行恢复。
在写入redo log时,会顺便记录XID,即当前事务id。在写入binlog时,也会写入XID。因此存在以下三种情况:
- 如果在写入redo log之前崩溃,那么此时redo log与binlog中都没有,是一致的情况,崩溃也无所谓。
- 如果在写入redo log prepare阶段后立马崩溃,之后会在崩恢复时,由于redo log没有被标记为commit。于是拿着redo log中的XID去bin log中查找,此时肯定是找不到的,那么执行回滚操作。
- 如果在写入bin log后立马崩溃,在恢复时,由redo log中的XID可以找到对应的bin log,这个时候直接提交即可。
总的来说,在崩溃恢复后,只要redo log不是处于commit阶段,那么就拿着redo log中的XID去binlog中寻找,找得到就提交,否则就回滚。在这样的机制下,两阶段提交能在崩溃恢复时,能够对提交中断的事务进行补偿,来确保redo log与binlog的数据一致性。
MySQL高级篇——日志相关推荐
- MySQL高级篇知识点——其它数据库日志
目录 1.其他数据库日志 1.1.日志类型 1.2.日志的弊端 2.慢查询日志 (slow query log) 3.通用查询日志 (general query log) 3.1.问题场景 3.2.查 ...
- 【MySQL高级篇笔记-MySQL事务日志(下) 】
此笔记为尚硅谷MySQL高级篇部分内容 目录 一.redo日志 1.为什么需要REDO日志 2.REDO日志的好处.特点 3.redo的组成 4.redo的整体流程 5.redo log的刷盘策略 6 ...
- mysql高级篇学习笔记
目录 前言 1 mysql安装及运行(linux环境) 1.1 安装前检查 1.2 MySQL卸载 ①**关闭 mysql 服务** ②**查看当前 mysql 安装状况** ③**卸载上述命令查询出 ...
- mysql高级篇(二)mysql索引优化分析
mysql高级篇笔记 mysql高级篇(一)mysql的安装配置.架构介绍及SQL语句的复习. mysql高级篇(二)mysql索引优化分析. mysql高级篇(三)查询截取分析(慢查询日志).主从复 ...
- MySQL高级篇知识点——索引优化与查询优化
目录 1.数据准备 1.1.建库建表 1.2.创建相关函数 1.3.创建存储过程 1.4.调用存储过程 1.5.删除某表上的索引 2.索引失效案例 2.1.全值匹配 2.2.最佳左前缀匹配原则 2.3 ...
- MySQL高级篇(事务视图存储过程与函数)
目录 一.事务 1.1什么是事务? 1.2事务的特性 1.3事务的分类 1.4事务的操作步骤 1.5事务的隔离级别(面试题常考) 二.视图 2.1视图的操作 2.1.1视图的创建 2.1.2视图更新( ...
- MySQL高级篇知识点——MySQL 事务日志
目录 1.redo 日志 1.1.为什么需要 REDO 日志? 1.2.REDO 日志的好处与特点 1.3.redo 的组成 1.4.redo 的整体流程 1.5.redo log 的刷盘策略 1.6 ...
- MySQL高级篇——聊聊MySQL的慢查询日志
文章目录: 1.数据库服务器的优化步骤 2.查看系统性能参数 3.定位执行慢的 SQL:慢查询日志 4.查看 SQL 执行成本:SHOW PROFILE 1.数据库服务器的优化步骤 当我们遇到数据库调 ...
- 程序猿必备技能之MySQL高级篇
MySQL是我们非常常用的关系型数据库,非常重要,所以在这里给大家整理下MySQL的高级内容. 1. MySQL高级特性 1.1. MySQL体系结构 Client Connectors: 接入方 ...
最新文章
- php python 函数互相翻译的网站
- C#学习笔记-stream,win8.1开发小记
- zentao这php,ZenTaoPHP后面计划
- DW1000 TX POWER (发射功率) 解析
- C语言第五次博客作业
- 微信小程序之换肤的功能
- PHP Socket编程(转)
- SAP License:STMS权限
- CSS和CSS3中的伪元素和伪类(总结)
- python 拼音 英文识别_识别同音字词pypinyin, 分词 jieba
- 关于期权池Option Pools与Vesting:码农创业防身必备法器
- tensorflow+python flask进行手写识别_python+flask搭建CNN在线识别手写中文网站!简直太屌了!...
- 电脑有网,microsoft edge浏览器无法上网
- 第50节:初识搜索引擎_上机动手实战多搜索条件组合查询
- etcdctl的使用[v3版本]
- QQ邮箱验证码登录(移动端邮箱验证登录)
- 星际争霸汉化java_星际争霸2地图编辑器:银河编辑器语言类似Java/C/PHP
- 教程get | K8S部署OpenStack容器云(下)
- 科技巨头Software AG遭攻击,关闭445高危端口后,Windows共享用不了,怎么办?
- Square:从今天开始抛弃Fragment吧!
热门文章
- 解决Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
- Kali Linux 与 BackTrack Linux
- sysbench花式采坑之一:自增值导致的TPS不可靠
- mp3文件怎么转换格式
- 数学无敌—王老菊教你当典狱长
- Java 蜡烛图_7-13 日K蜡烛图 - osc_9vrg5zhs的个人空间 - OSCHINA - 中文开源技术交流社区...
- Unity中实现赛车游戏
- 鸿蒙开发(2)---Button组件
- go使用zap + lumberjack重构项目的日志系统
- 洛谷题目AC代码总结(未完成,日更题目中)