当前位置: 首页 > news >正文

MySQL日志管理

日志管理

在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这种时候,我们必须

保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了

数据库中数据丢失或被破坏可能原因:

  • 误删除数据库

  • 数据库工作时,意外断电或程序意外终止

  • 由于病毒造成的数据库损坏或丢失

  • 文件系统损坏后,系统进行自检操作

  • 升级数据库时,命令语句不严格

  • 设备故障

  • ......

MySQL日志类型

日志类型

记入文件中的信息类型

错误日志

记录启动,运行或停止时出现的问题

查询日志

记录建立的客户端连接和执行的语句

二进制日志

记录所有更改数据的语句,主要用于复制和即时点恢复

慢日志

记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询

事务日志

记录InnoDB等支持事务的存储引擎执行事务时产生的日志

默认情况下,所有日志创建于mysqld数据目录中。通过刷新日志,你可以强制 mysqld来关

闭和重新打开日志文件

刷新日志

在mysql中:执行语句 flush logs 刷新日志

在shell中:通过mysqladmin命令执行日志刷新

mysqladmin flush-logs
mysqladmin refresh

错误日志

错误日志记录内容

  • 服务器启动和关闭过程中的信息

  • 服务器运行过程中的错误信息

  • 事件调度器运行一个时间产生的信息

  • 在从服务器上启动从服务器进程是产生的信息

指定错误日志保存的位置

可以⽤--log-error[=file_name]选项来指定mysqld保存错误日志文件的位置

如果file_name也就是文件名没有指定,name默认名字将会是host_name.err

如果你执行FLUSH LOGS,错误日志用-old重新命名后缀并且mysqld创建⼀个新的空日志文件

查看当前错误日志配置

show global variables like "log_error%";

是否记录警告日志

show global variables like "log_warnings";

查询日志

通用查询日志

启动开关:general_log={ON|OFF}

日志文件变量:general_log_file[=/PATH/TO/file]

全局日志开关:log={ON|OFF} 该开关打开后所有日志都会被开启

记录类型:log_output={TABLE|FILE|NONE}

可见要开启通用查询日志,至少需要配置

general_log=ON,
log_output={TABLE|FILE}
general_log_file

查看默认配置

SHOW GLOBAL VARIABLES LIKE '%general_log%';
SHOW GLOBAL VARIABLES LIKE '%log_output%';

慢查询日志

MySQL如果启⽤了 slow_query_log=ON 选项,就会记录执⾏时间超过long_query_time的查询

日志文件为:slow_query_log_file[=file_name]

如果没有给出file_name值, 默认为主机名,后缀为-slow.log

如果给出了文件名,但不是绝对路径名,文件则写入数据目录

开启慢查询的方法

(只在当前有效)

set global slow_query_log =ON;

查看配置文件

SHOW GLOBAL VARIABLES LIKE '%slow_query_log%';
# 使用 mysqldumpslow 命令获得日志中显示的查询摘要来处理慢查询日志
# mysqldumpslow slow.log
# 那么多久算是慢呢?
# 如果查询时长超过long_query_time的定义值(默认10秒),即为慢查询:
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';

二进制日志文件

开关

二进制日志启动开关:log-bin [=file_name]

作用

1.⼆进制日志包含了所有更新了数据或者已经潜在更新了数据的所有语句

2.语句以“事件”的形式保存,它描述数据更改。二进制日志还包含关于每个更新数据库的语

句的执行时间信息。它不包含没有修改任何数据的语句行

3.二进制日志的主要⽬的是在数据库存在故障时,恢复时能够最⼤可能地更新数据库(即时点

恢复),因为二进制日志包含备份后进行的所有更新。

4.二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句

二进制日志的记录

二进制会自行选择记录执行语句或者执行后的数据结果

有以下情况

  1. 假设一个表有10万行数据,现在要执行一个语句,将表中的某个字段的值全部替换

这个时候因为记录执行后的结果数据的话日志会非常大,会选择记录执行语句

2.如果向某个字段插入当前时间,这种不同时间执行结果时不一样的,那就得记录执行后的数据结果

3.实际上也可以结合两种方式来记录,这种情况叫做混合方式的二进制日志

二进制日志的管理

日志滚动

在my.cnf中设定max_binlog_size = 200M,表示限制二进制日志最大尺存为200M,超过200M后进行滚动。

MySQL的滚动方式与其他日志不太⼀样,滚动时会创建⼀个新的编号大1的日志用于记录最新的日志,而原日志名字不会被改变。每次重启MySQL服务,日志都会自动滚动⼀次。

另外如果需要手动滚动,则使⽤命令 mysql> FLUSH LOGS ;

日志查看

查看有那些二进制文件

show binary logs;

查看当前正在使用的二进制日志文件

show master status;

查看二进制内容

show binlog events in 'mysqld-binlog.000002';
mysqlbinlog [option] log-files

二进制日志还原数据

使用mysqlbinlog读取需要的日志内容,使用标准输入重定向到一个sql文件,然后在mysql

服务器上导入即可

举个例子

mysqlbinlog mysqld-binlog.000002 >/root/temp_date.sql

二进制日志还原出错

如果在导入的时候出现了

错误——mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4'

原因——mysqlbinlog这个工具无法识别binlog中的配置中的default-character-set=utf8mb4这个指令

解决方式

  1. 添加 --no-defaults 参数

mysqlbinlog --no-defaults binlog.000069 > c:/a.sql
/*注意需要指定binlog的位置,如果是当前路径,则可以直接使⽤名称即可*/

2.修改配置文件 my.cnf

default-character-set=utf8mb4 修改为 character-set-server = utf8mb4,但是需要重

启MySQL服务

删除二进制日志文件

二进制日志文件不能直接删除,如果使用rm等命令直接删除日志文件,可能导致数据库崩溃

必须使用命令 PURGE 删除日志文件

PURGE { BINARY | MASTER } LOGS { TO 'log_name' |BEFORE datetime_expr}

注意:如果数据库使用的编码是utf8mb4编码,mysqlbinlog命令可能不能解析这种编码

两种解决方法

1. 在 MySQL 的 配 置 /etc/my.cnf 中 将 default-character-set=utf8mb4 修 改 为

character-set-server = utf8 ,但是这需要重启MySQL服务,如果你的MySQL服务正

在忙,那这样的代价会比较大。

2. 用mysqlbinlog --no-defaults mysql-bin.000004 命令打开

相关文章:

MySQL日志管理

日志管理在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这种时候,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了数据库中数据丢失或被破坏可能原因:误删除数据库数据库工作时&a…...

进 制

进制进制一、进制概念二、进制的转换三、二进制的运算3.1 与运算3.2 或运算3.3 非运算3.4 异或运算3.5 位运算(位移)四、原码、反码、补码4.1 原码4.2 反码4.3 补码五、浮点数十进制转换成二进制进制 一、进制概念 十进制是指逢十进一。 计算机中二进制…...

pycharm关联github、新建以及更新仓

此处已经默认你安装了git以及pycharm,这篇文章将会教给大家如何利用pycharm管理自己的github. 目录 pycharm关联github设置 Github创建新的仓 仓库的更新 pycharm:2022。不同版本界面略有不同。 pycharm关联github设置 设置PyCharm,打开File --> Settings -…...

java基础知识之小碎片(自问自答版本)---嘻嘻,春招加油呀~

1.public/private/protected/default的区别? public:对所有类可见 private 只有类本身可以访问,其他类想访问可以通过该类的成员方法访问如getter/setter protected:对同一包内的类和所有子类可见 default:在同一包内可见,不加修饰符 2.jav…...

蚁群算法c++

//轮盘赌选择下一步行进城市 int citySelect(int k, int f) { int c 0;//记录蚂蚁可行进的城市个数 //1、计算可行进的各城市 选择概率 for (int m 0; m < cityNum; m) { //若城市&#xff08;i,j&#xff09;之间有路且j不在蚂蚁k的禁忌表中&#xf…...

北大青鸟天府校区IT学习大揭秘

口罩已放开&#xff0c;一切都要重新出发。 开年才一个多月&#xff0c;已经有很多小伙伴想培训转行IT行业或者已经在咨询、报名培训IT技术。作为老牌培训机构&#xff0c;也有很多小伙伴相信我们&#xff0c;选择了我们。很感谢大家的信任&#xff0c;作为老牌培训机构&#…...

04 Linux errno.h错误码中文注释

Linux错误码中文注释 作者将狼才鲸创建日期2023-03-04/******************************************************************************* \brief 错误码* \note 基于linux_6.1-rc4\include\uapi\asm-generic\errno-base.h* linux_6.1-rc4\tools\arch\alpha\include\uapi…...

MySQL表的约束

文章目录表的约束空属性默认值列描述zerofill主键自增长唯一键外键表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如说我们的居民…...

Go语言的条件控制语句及循环语句的学习笔记

一、Go的条件控制语句 Go 语言提供了以下几种条件判断语句&#xff1a; 语句描述if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。if 嵌套语句你可以在 if 或…...

D. Linguistics(思维 + 贪心)

Problem - D - Codeforces Alina发现了一种奇怪的语言&#xff0c;它只有4个单词:a, B, AB, BA。事实也证明&#xff0c;在这种语言中没有空格:一个句子是通过将单词连接成一个字符串来写的。Alina发现了一个这样的句子&#xff0c;她很好奇:有没有可能它恰好由a个单词a, b个单…...

maxWell数据迁移

目录 1.开启mysql的binlog 1.1: Statement-based 1.2: Row-based 1.3: mixed 2. 重启mysql服务 3. 创建Maxwell所需数据库和用户 4. 配置Maxwell 5. Maxwell启停(实时同步) 6. 历史数据全量同步 这里使用maxWell对mysql数据迁移到kafka中 官网下载地址点击下载 注&#x…...

混合图像python旗舰版

仔细看这个图像。然后后退几米再看。你看到了什么&#xff1f;混合图像是指将一张图片的低频与另一张图片的高频相结合的图片。根据观看距离的不同&#xff0c;所得到的图像有两种解释。在上面的图片中&#xff0c;你可以看到阿尔伯特爱因斯坦&#xff0c;一旦你离开屏幕或缩小…...

开发手册——一、编程规约_5.集合处理

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】关于 hashCode 和 equals 的处理&#xff0c;遵循如下规则&#xff1a; 只要重写 equals&#xff0c;就必须重写 hashCod…...

【elastic】elastic高可用集群部署

文章目录前言一、资源分享1、包含源码包、配置文件二、部署过程三、报错锦集四、es的部分相关命令前言 本博客内容仅为记录博主思路&#xff0c;仅供参考&#xff0c;一切以自己实践结果为准。 一、资源分享 1、包含源码包、配置文件 链接&#xff1a;https://pan.baidu.com…...

初识Liunx下的进程状态和环境变量以及进程优先级

文章目录前言1.进程状态1.阻塞与挂起2.Linux下的进程状态1.概念知识2.R状态2.休眠状态(S/D&#xff09;3.T状态4.Z状态(僵尸进程)和X状态5.孤儿进程3.环境变量1.概念2.获取环境变量1.环境变量表2.函数获取环境变量3.关于环境变量的理解和main函数中的两个参数1.环境变量的理解2…...

JavaEE——何为线程及创建线程

文章目录一、认识线程1. 线程的概念2. 出现多线程的原因3. 进程与线程4. 对多线程的详细解释二、初次实现多线程代码1. 初步了解2. 使用 Java 中的工具查看当前的所有线程3. Java 中创建线程的多种方式一、认识线程 1. 线程的概念 所谓线程&#xff0c;就是指在一个 ‘执行流…...

linux配置核查MySQL 配置规范 (Linux)_S3A3G3

linux的配置核查问题&#xff1a; 解决&#xff1a; 1.检查是否禁止mysql对本地文件存取 方法一&#xff1a;在my.cnf的mysql字段下加local-infile0 方法二&#xff1a;启动mysql时加参数local-infile0 /etc/init.d/mysql start --local-infile0 假如需要获取本地文件&#xf…...

Protobuf简介

Protobuf简介 1. Protocol Buffers1.1. 什么是Protocol Buffers?1.2. 选择你最喜欢的语言1.3. 如何开始2. Protocol Buffer Basics: C++2.1. 问题领域2.2. 在哪里找到示例代码2.3. 定义协议格式(Defining Your Protocol Format)1. Protocol Buffers Protocol Buffers(协议缓冲…...

【Kubernetes】第十七篇 - ECS 服务停机和环境修复

一&#xff0c;前言 上一篇&#xff0c;介绍了 Secret 镜像的使用&#xff1b; 三台服务每天大概 15 块钱的支出&#xff0c;用一个月也是不少钱&#xff1b; 闲时可以停掉&#xff0c;这样每天只有 4 块钱支出&#xff0c;剩下一大笔&#xff1b; ECS 服务停机后公网 IP 会…...

Vue2的生命周期(详解)

Vue的生命周期一、生命周期的概念二、钩子函数三、Vue2的生命周期3.1 初始化阶段3.2 挂载阶段3.3 更新阶段3.4 销毁阶段一、生命周期的概念 Vue实例的生命周期: 从创建到销毁的整个过程 二、钩子函数 Vue框架内置函数,随着组件的生命周期阶段,自动执行 作用:特定的时间点,执行特…...

Potions (Hard Version) and (Easy Version)(背包DP + 反悔贪心)

[TOC](Potions (Hard Version) and (Easy Version)) 一、Potions(Easy Version) 1、问题 2、分析&#xff08;背包DP 贪心&#xff09; 简而言之就是我们需要从左到右开始选数字&#xff0c;选的过程中我们需要保证我们选的数字的和始终是大于等于0的&#xff0c;在满足这个…...

剑指 Offer II 017. 含有所有字符的最短字符串

题目链接 剑指 Offer II 017. 含有所有字符的最短字符串 hard 题目描述 给定两个字符串 s和 t。返回 s中包含 t的所有字符的最短子字符串。如果 s中不存在符合条件的子字符串&#xff0c;则返回空字符串 ""。 如果 s中存在多个符合条件的子字符串&#xff0c;返回任…...

Modbus协议初探(C#实现)

由于作者水平有限&#xff0c;如有写得不对得地方请指正 趁着今天休息&#xff0c;就折腾一下Modbus协议&#xff0c;之前零零散散的看过几篇博客&#xff0c;听说搞上位机开发的要会这个协议&#xff0c;虽然我不是搞上位机开发的&#xff0c;但个人对这个比较感兴趣。按照我个…...

【华为OD机试2023】静态扫描 C++ Java Python

【华为OD机试2023】静态扫描 C++ Java Python 前言 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过率。 Tips1:机试为ACM 模式 你的代码需要处理输入输出,input/cin接收输入、…...

函数栈帧的创建和销毁(详解)

函数栈帧的创建和销毁&#x1f996;函数栈帧是什么&#xff1f;&#x1f996;函数栈帧的创建和销毁解析&#x1f40b;栈是什么&#xff1f;&#x1f40b;认识相关寄存器和汇编指令&#x1f40b;解析函数栈帧的创建和销毁&#x1f433;预备知识&#x1f433;函数的调用堆栈&…...

【100个 Unity实用技能】 | 脚本无需挂载到游戏对象上也可执行的方法

Unity 小科普 老规矩&#xff0c;先介绍一下 Unity 的科普小知识&#xff1a; Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…...

条件期望5

条件期望例题 随机图 从节点1开始, N为一个随机变量, 表示整个过程第一次出现"贪吃蛇"情形时, 所进行的步数.即Nk⇒Xk(1)∈{1,X(1),X2(1),...Xk−1(1)}其中1,X(1),X2(1),...Xk−1(1)各不相同N k \Rightarrow X^k(1) \in \{1,X(1), X^2(1),...X^{k-1}(1)\} \\ 其中1…...

RecyclerView ViewType二级

实现效果描述&#xff1a; 1、点击recyclerview中item&#xff0c;列表下方出现其他样式的item&#xff0c;作为子item&#xff0c;如下所示 所需要的java文件和xml文件有&#xff1a; 1、创建FoldAdapteradapter, 在FoldAdapter中&#xff0c;定义两种不同的类型&#xff…...

将对象或数组存在 dom元素的属性上,最后取不到完整数据,只取到 [{

目录 一、问题 二、问题及解决方法 三、总结 一、问题 1.我需要在dom元素里面添加了一个属性test存一个对象数组temp&#xff0c;以便我下一次找到这个dom元素时可以直接拿到属性里面的数据来渲染页面。 2.dom 属性上存 对象和数组&#xff0c;必须先JSON.stringify(arr),转…...

Flask源码篇:Flask路由规则与请求匹配过程(超详细,易懂)

目录1 启动时路由相关操作&#xff08;1&#xff09;分析app.route()&#xff08;2&#xff09;分析add_url_rule()&#xff08;3&#xff09;分析Rule类&#xff08;4&#xff09;分析Map类&#xff08;5&#xff09;分析MapAdapter类&#xff08;6&#xff09;分析 url_rule_…...