MySQL——七、MySQL备份恢复

MySQL

  • 一、MySQL日志管理
    • 1、MySQL日志类型
    • 2、错误日志
    • 3、通用查询日志
    • 4、慢查询日志
    • 5、二进制日志
      • 5.1 开启日志
      • 5.2 二进制日志的管理
      • 5.3 日志查看
      • 5.4 二进制日志还原数据
  • 二、MySQL备份
    • 1、备份类型
      • 逻辑备份优缺点
    • 2、备份内容
    • 3、备份工具
      • 3.1 MySQL自带的备份工具
      • 3.2 文件系统备份工具
      • 3.3 其它工具

一、MySQL日志管理

在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了。

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

  • 误删除数据库
  • 数据库工作时,意外断电或程序意外终止
  • 由于病毒造成的数据库损坏或丢失
  • 文件系统损坏后,系统进行自检操作
  • 升级数据库时,命令语句不严格
  • 设备故障等等
  • 自然灾害
  • 盗窃

1、MySQL日志类型

MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:

日志类型记入文件中的信息类型
错误日志记录启动、运行或停止时出现的问题
查询日志记录建立的客户端连接和执行的语句
二进制日志记录所有更改数据的语句。主要用于复制和即时点恢复
慢日志记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询
事务日志记录InnoDB等支持事务的存储引擎执行事务时产生的日志

在这里插入图片描述

默认情况下,所有日志创建于mysqld数据目录中。通过刷新日志,你可以强制 mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logsmysqladmin refresh时,出现日志刷新。如果你正使用MySQL复制功能,从复制服务器将维护更多日志文件,被称为接替日志。

在mysql中,执行SQL语句:

FLUSH LOGS

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

mysqladmin flush-logs
mysqladmin refresh

2、错误日志

错误日志主要记录如下几种日志:

  • 服务器启动和关闭过程中的信息
  • 服务器运行过程中的错误信息
  • 事件调度器运行一个时间是产生的信息
  • 在从服务器上启动从服务器进程是产生的信息

错误日志定义:
可以用–log-error[=file_name]选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。如果你执行FLUSH LOGS,错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。(如果未给出–log-error选项,则不会重新命名)

查看当前错误日志配置:

mysql> SHOW GLOBAL VARIABLES LIKE '%log_error%';
是否记录警告日志:
mysql> SHOW GLOBAL VARIABLES LIKE '%log_warnings%';

在这里插入图片描述

3、通用查询日志

  • 启动开关: 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如果没有指定,默认名是host_name.log。

看看上述几个值的默认配置:

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

在这里插入图片描述

4、慢查询日志

MySQL如果启用了 slow_query_log=ON 选项,就会记录执行时间超过long_query_time的查询(初使表锁定的时间不算作执行时间)。日志记录文件为slow_query_log_file[=file_name],如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。

默认与慢查询相关变量:

# 默认没有启用慢查询,为了服务器调优,建议开启
mysql> SHOW GLOBAL VARIABLES LIKE '%slow_query_log%';# 开启方法,当前生效,永久有效配置文件中设置
SET GLOBAL slow_query_log=ON;   # 使用 mysqldumpslow 命令获得日志中显示的查询摘要来处理慢查询日志
# mysqldumpslow slow.log
# 那么多久算是慢呢?
# 如果查询时长超过long_query_time的定义值(默认10秒),即为慢查询:
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';

在这里插入图片描述

5、二进制日志

5.1 开启日志

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

注意:在5.6及以上版本一定要手动指定。5.6以下版本默认file_name为$datadir/mysqld-binlog。查看二进制日志的工具为:mysqlbinlog。

  • 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。

  • 语句以“事件”的形式保存,它描述数据更改。二进制日志还包含关于每个更新数据库的语句的执行时间信息。它不包含没有修改任何数据的语句。

  • 二进制日志的主要目的是在数据库存在故障时,恢复时能够最大可能地更新数据库(即时点恢复),因为二进制日志包含备份后进行的所有更新。二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。

二进制日志是记录执行的语句还是执行后的结果数据呢?分为三种情况:

    1. 假如一个表有10万行数据,而现在要执行一个如下语句将amount字段的值全部在原来的基础上增加1000:
UPDATE sales.january SET amount=amount+1000 ;

此时如果要记录执行后的结果数据的话,日志会非常大。因此在这种情况下应记录执行语句。这种方式就是基于语句的二进制日志。

    1. 如果向某个字段插入的是当前的时间呢?如下:
INSERT INTO tb SET Birthdate=CURRENT_TIME();

此时就不能记录语句了,因为不同时间执行的结果是不一样的。这是应该记录这一行的值,这种就是基于行(row)的二进制日志。

    1. 在有些情况,可能会结合两种方式来记录,这种叫做混合方式的二进制日志

5.2 二进制日志的管理

日志滚动。在my.cnf中设定max_binlog_size = 200M,表示限制二进制日志最大尺寸为200M,超过200M后进行滚动。MySQL的滚动方式与其他日志不太一样,滚动时会创建一个新的编号大1的日志用于记录最新的日志,而
原日志名字不会被改变。每次重启MySQL服务,日志都会自动滚动一次。

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

5.3 日志查看

查看有哪些二进制日志文件:mysql> SHOW BINARY LOGS;
查看当前正在使用的是哪一个二进制日志文件:mysql> SHOW MASTER STATUS;
查看二进制日志内容:mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002';
##该语句还可以加上Position(位置),指定显示从哪个Position(位置)开始:
mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002' FROM 203;
使用命令mysqlbinlog查看二进制日志内容:mysqlbinlog [options] log-files

在这里插入图片描述
在这里插入图片描述

5.4 二进制日志还原数据

使用mysqlbinlog读取需要的日志内容,使用标准输入重定向到一个sql文件,然后在mysql服务器上导入即可,如下:

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

如果报编码错误mysqlbinlog: [ERROR] unknown variable 'default-character-set
原因:mysqlbinlog这个工具无法识别binlog中的配置中的default-character-set=utf8mb4这个指令。
有两种方式解决:

    1. 添加 --no-defaults 参数
mysqlbinlog --no-defaults binlog.000069 >c:/a.sql   
# 注意需要指定binlog的位置,如果是当前路径,则可以直接使用名称即可。
    1. 修改配置文件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服务正在忙,那这样的代价会比较大。
    1. 用mysqlbinlog –no-defaults mysql-bin.000004 命令打开。

二、MySQL备份

1、备份类型

根据服务器状态,可以分为热备份、温备份、冷备份

  • 热备份:读、写不受影响;
  • 温备份:仅可以执行读操作;
  • 冷备份:离线备份;读、写操作均中止;

从对象来分,可以分为物理备份与逻辑备份

  • 物理备份:复制数据文件;
  • 逻辑备份:将数据导出至文本文件中;

从数据收集来分,可以完全备份、增量备份、差异备份

  • 完全备份:备份全部数据;
  • 增量备份:仅备份上次完全备份或增量备份以后变化的数据;
  • 差异备份:仅备份上次完全备份以来变化的数据;

逻辑备份优缺点

逻辑备份的优点:

  • 在备份速度上两种备份要取决于不同的存储引擎
  • 物理备份的还原速度非常快。但是物理备份的最小粒度只能做到表
  • 逻辑备份保存的结构通常都是纯ASCII的,所以我们可以使用文本处理工具来处理
  • 逻辑备份有非常强的兼容性,而物理备份则对版本要求非常高
  • 逻辑备份也对保持数据的安全性有保证

逻辑备份的缺点:

  • 逻辑备份要对RDBMS产生额外的压力,而裸备份无压力
  • 逻辑备份的结果可能要比源文件更大。所以很多人都对备份的内容进行压缩
  • 逻辑备份可能会丢失浮点数的精度信息

2、备份内容

数据文件
日志文件(比如事务日志,二进制日志)
存储过程,存储函数,触发器
配置文件(十分重要,各个配置文件都要备份)
用于实现数据库备份的脚本,数据库自身清理的Crontab等……

3、备份工具

3.1 MySQL自带的备份工具

mysqldump是mysql数据库管理系统,自带的逻辑备份工具,支持所有引擎,MyISAM引擎是温备,InnoDB引擎是热备,备份速度中速,还原速度非常非常慢。但是在实现还原的时候,具有很大的操作余地。具有很好的弹性。
mysqlhotcopy物理备份工具,但只支持MyISAM引擎,基本上属于冷备的范畴,物理备份,速度比较快。mysql5.7已经没有这个命令了,多用于mysql5.5之前。mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库或单个表,属于裸文件备份(物理备份),只能用于MyISAM引擎的数据库。本质是使用锁表语句,然后cp或scp。

3.2 文件系统备份工具

  • cp 命令, 冷备份,支持所有引擎,复制命令,只能实现冷备,物理备份。使用归档工具,cp命令,对其进行备份的,备份速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差。
  • lvm 几乎是热备份,支持所有引擎,基于快照(LVM,ZFS)的物理备份,速度非常快,几乎是热备。只影响数据几秒钟而已。但是创建快照的过程本身就影响到了数据库在线的使用,所以备份速度比较快,恢复速度比较快,没有什么弹性空间,而且LVM的限制:不能对多个逻辑卷同一时间进行备份,所以数据文件和事务日志等各种文件必须放在同一个LVM上。而ZFS则非常好的可以在多逻辑卷之间备份。

3.3 其它工具

  • ibbackup 商业工具 MyISAM是温备份,InnoDB是热备份 ,备份和还原速度都很快,这个软件它的每服务器授权版本是5000美元。
  • xtrabackup 开源工具 MyISAM是温备份,InnoDB是热备份 ,是ibbackup商业工具的替代工具。
  • mysqlbackup ORACLE公司也提供了针对企业的备份软件MySQL Enterprise Backup简称:mysqlbackup。

MySQL企业备份工具执行在线“热备“,无阻塞的MySQL数据库备份。全备份可以在所有InnoDB数据库上执行,而无需中断MySQL查询或更新。此外,支持增量备份,只备份自上次备份后有变化的数据。另外部分备份,支持特定的表或表空间按需要进行备份。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/162947.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析入门

B站:01第一课 数据分析岗位职责和数据分析师_哔哩哔哩_bilibili 一、岗位:数据分析师 Q1 数据分析师在公司做什么工作? 数据来源于公司核心业务,通过监测业务健康度来确定业务的健康状况; 通过对用户精细化分析&am…

Java面试题总结(二):Java多线程

文章目录 1.进程和线程的区别,进程间如何通信2. 什么是线程上下文切换3.什么是死锁4.死锁的必要条件5.Synchronized和lock的区别6.什么是AQS锁?7.为什么AQS使用的双向链表?8.有哪些常见的AQS锁9.sleep()和wait()的区别10.yield()和join()区别11.线程池七…

【API篇】三、Flink转换算子API

文章目录 0、demo数据1、基本转换算子:映射map2、基本转换算子:过滤filter3、基本转换算子:扁平映射flatMap4、聚合算子:按键分区keyBy5、聚合算子:简单聚合sum/min/max/minBy/maxBy6、聚合算子:归约聚合re…

wsl使用vscode连接,远程安装C/C++ 拓展时,报错

报错内容: EACCES: permission denied, rename /home/wen/.vscode-server/extensions/.b61b1c7c-f703-4dfd-bdc5-d9a00681c4b7 -> /home/wen/.vscode-server/extensions/ms-vscode.cpptools-1.17.5-linux-x64 解决办法: 升级wsl到wsl2就好了。 &a…

GitLab使用webhook触发Jenkins自动构建

1、jenkins安装gitlab插件 在插件管理中,搜索gitlab安装这个插件。 2、job中配置webhook地址和密钥 进入job设置,构建触发器中就可以看到gitlab的webhook配置,复制URL地址和随机令牌至gitlab中 勾选后,就可以展开设置&#xff…

G.711语音编解码器详解

语音编解码利用人听觉上的冗余对语音信息进行压缩从而达到节省带宽的目的。值得注意的是,本文说的是语音编解码器,也就Speech codec,而常用的还有另一种编解码器称作音频编解码器,英文是Audio codec,它们的区别如下。 以前在学校的时候研究了很多VoIP的编解码器从G.723到A…

神经网络硬件加速器-DPU分析

一 DPU概述 DPU是专为卷积神经网络优化的可编程引擎,其使用专用指令集,支持诸多卷积神经网络的有效实现。 1、关键模块 卷积引擎:常规CONV等ALU:DepthwiseConvScheduler:指令调度分发Buffer Group:片上数据…

Kafka三种认证模式,Kafka 安全认证及权限控制详细配置与搭建

Kafka三种认证模式,Kafka 安全认证及权限控制详细配置与搭建。 Kafka三种认证模式 使用kerberos认证 bootstrap.servers=hadoop01.com:9092,hadoop02.com:9092,hadoop03.com:9092,hadoop04.com:9092 security.

信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)

信创办公–基于WPS的Word最佳实践系列 (图文环绕方式) 目录 应用背景操作步骤1、 打开布局选项中图文环绕方式的方法2、 图文环绕三大类型 应用背景 在Word中,对文字和图片进行排版时,采用各种不同的图片与文字组合效果能够使页面…

php 遍历PHP数组的7种方式

在PHP中&#xff0c;遍历数组有多种方式可以选择。以下是最常用的几种方式&#xff1a; 使用foreach循环 $array array("apple", "banana", "orange"); foreach($array as $value){echo $value . "<br>"; } 输出结果&#xff…

【数组的使用续篇】

文章目录 以数组的形式打印数组打印方法&#xff1a;Arrays.toString(数组名) 数组排序大小排序方法是 Arrays.sort(数组名) 创建一个自己的打印数组的方法自己创建一个冒泡排序两数之间交换方法 逆置数组打印核心思路还是 i 和 j 交换 总结 以数组的形式打印数组 打印方法&am…

浅析“代码可视化” | 京东云技术团队

1.什么是代码可视化&#xff1f; Code visualization is the process of creating graphical representations of source code to help understand and analyze it. 代码可视化是创建源代码的图形表示以帮助理解和分析它的过程。 个人理解&#xff1a;通过使用图形化手段&#…

计算机保研推免面试复习大纲(数学+408)

目录 线性代数概率论高等数学信号与系统离散数学操作系统计算机网络计算机组成数据结构算法编译原理C杂项 线性代数 怎么求逆矩阵 逆矩阵&#xff1a; A A − 1 E AA^{-1}E AA−1E&#xff0c;伴随矩阵&#xff1a; A A ∗ A ∗ A ∣ A ∣ E AA^{*}A^{*}A|A|E AA∗A∗A∣A∣…

Top 10 数据恢复工具,可从iPhone 和 iPad 恢复数据

您是否正在寻找最好的 iPad 恢复软件&#xff0c;但不知道哪个选项最好&#xff1f;没有什么可担心的。本文将为您提供有关根据文件类型、设备兼容性和数据丢失原因等因素选择合适的 iPad 恢复软件的提示。此外&#xff0c;前 10 名提到的恢复软件是安全可靠的。 第 1 部分、iP…

上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走&#xff0c;深成指、创业板指均跌超1%&#xff0c;双双创出年内新低。转基因概念股逆势大涨…

开源Vue盲盒商城4.0源码/网页盲盒源码/前端uniapp后端thinkphp+安装教程/亲测

源码简介&#xff1a; 开源Vue盲盒商城4.0源码&#xff0c;它是打包小程序app的网页盲盒源码,亲测可用&#xff0c;它是采用vueTP5框架开发开源盲盒网站源码&#xff0c;附带了安装教程。 简单测试过了&#xff0c;可以使用&#xff0c;大家可以自测下。 前端uniapp后端think…

如何使用Python给图片添加水印

目录 一、安装Pillow库 二、导入Pillow库和需要用到的模块 三、添加水印 四、调用函数并设置参数 五、需要注意的方面 总结 在Python中&#xff0c;我们可以使用Pillow库来处理图像&#xff0c;包括添加水印。Pillow是Python中最流行的图像处理库之一&#xff0c;它支持多…

搭建Pytorch的GPU环境超详细

效果 1、下载和安装VS2019 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ 登录需要用户名和密码 安装后需要联网下载组件的,安装的时候要勾选使用C++的桌面开发 2、下载和安装显卡驱动 查看自己的显卡型号 从英伟达下载和安装最新驱动

【面试经典150 | 区间】插入区间

文章目录 Tag题目解读题目来源解题思路方法一&#xff1a;合并区间方法二&#xff1a;模拟 其他语言python3 写在最后 Tag 【模拟】【数组】 题目解读 给定一个含有多个无重叠区间的数组&#xff0c;并且数组已经按照区间开始值升序排序。在列表中插入一个新的区间&#xff0…

【nginx学习笔记】

1.正向代理&#xff1a;代理的是客户端&#xff0c;一般有明确的访问对象 比如&#xff1a;我现在通过v-p-n去访问YouTube&#xff0c;那么就是正向代理。 2.反向代理&#xff1a;代理的是服务器 最常见的就是web中&#xff0c;nginx去代理一群后端的服务器。 3.负载均衡&…