MySQL数据备份、恢复

article/2025/10/7 23:55:42

文章目录

  • 一.MySQL日志管理
    • 1.1日志分类
    • 1.2日志配置
    • 1.3日志查询
  • 二.MySQL数据备份
    • 2.1物理备份
    • 2.2逻辑备份
  • 三.常用的备份方法
    • 3.1物理冷备
    • 3.2工具备份(温备)
    • 3.3增量备份与恢复
      • 3.3.1开启二进制日志功能
      • 3.3.2二进制日志读取
      • 3.3.3一般恢复
      • 3.3.4节点恢复
      • 3.3.5基于时间点恢复
  • 四.总结

引言:在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果,那么对于数据的备份就将显的十分重要。对于MySQL而言,在其备份中,日志起到了很重要的作用

一.MySQL日志管理

MySQL的日志默认保存位置为:/usr/local/mysql/data下
配置文件位于:/etc/my.cnf文件中的[mysqld]内

1.1日志分类

  1. 错误日志
    用来记录当MySQL启动、停止或运行时发生的错误信息,默认开启

log-error=/usr/local/mysql/data/mysql_error.log

  1. 通用查询日志
    用来记录MySQL的所有连接和语句,默认是关闭的

general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

  1. 二进制日志
    用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启

log_bin=mysql-bin
或 log-bin=mysql-bin

  1. 慢查询日志
    用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的

slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5 单位时间为s,缺省时为10s

慢查询日志也可用来查询哪些搜索的字段超时,可以选择是否需要增加索引,加快查询速度

  1. 中继日志
    一般情况下,它在MySQL主从同步(复制)、读写分离集群的从节点开启,主节点一般不需要这个日志

1.2日志配置

修改配置文件
vim /etc/my.conf

#错误日志
log-error=/usr/local/mysql/data/mysql_error.log	 
#通用查询日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
#二进制日志
log-bin=mysql-bin	
#慢查询日志
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5
#配置文件添加完后需要重启MySQL
systemctl restart mysql

修改my.cnf配置文件,在[mysqld]中添加如下内容
在这里插入图片描述
重启服务
在这里插入图片描述

1.3日志查询

登入MySQL数据库,查询日志是否开启

#variables 表示变量
#like 表示模糊查询
#%xxx,以什么结尾,xxx%以什么开头,%xxx%包含
#查看通用查询日志是否开启
show variables like 'general%';	
#查看二进制日志是否开启
show variables like 'log_bin%';	
#查看慢查询日功能是否开启
show variables like '%slow%';		
#查看慢查询时间设置
show variables like 'long_query_time';
#在数据库中设置开启慢查询的方法
set global slow_query_log=ON;		
  • 查询通用日志是否开启
    show variables like ‘general%’;
    在这里插入图片描述
  • 查询二进制日志是否开启
    show variables like ‘log_bin%’;
    在这里插入图片描述
  • 查看慢查询日志是否开启
    show variables like ‘long_query_time’;
    在这里插入图片描述
    查询慢查询日志超时时间
    show variables like ‘long%’;
    在这里插入图片描述

二.MySQL数据备份

在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果,数据备份的主要目的是灾难恢复
数据备份分为物理备份和逻辑备份两类

2.1物理备份

对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
物理备份的方法 :

  • 冷备份(脱机备份) :是在关闭数据库的时候进行的;
  • 热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件;
  • 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。

2.2逻辑备份

对数据库逻辑组件的备份,表示为逻辑数据库结构,此类型备份适用于可以编辑数据值或表结构
逻辑备份分类:

  1. 完全备份
    每次都进行完全备份,会导致文件占用空间巨大,并且有大量重复数据,恢复时,直接使用完全备份的文件即可
    优点:备份与恢复操作简单方便
    缺点:数据存在大量的重复、占用大量的备份空间及备份与恢复时间长
  2. 差异备份
    每次差异备份,都会备份上一次完全备份之后的数据,可能会出现备份重复数据,导致占用额外的磁盘空间,恢复时,先恢复完全备份的数据,再恢复差异备份的数据
  3. 增量备份
    每次增量备份都是在上一次完全备份或者增量备份之后的数据,不会出现备份重复数据的情况,也不会占用额外的磁盘空间。恢复数据时,需要按照次序恢复完全备份和增量备份的数据

三.常用的备份方法

3.1物理冷备

备份时,数据库处于关闭状态,直接打包数据库文件,备份速度快,恢复时也是最简单的

#关闭服务
systemctl stop mysqld.service
#压缩备份
tar -czf /opt/mysql_all$(date +%F).tar.gz /usr/local/mysql/data/
mkdir /opt/mysql_bak
mv /usr/local/mysql/data/* /opt/mysql_bak/  #模拟删除数据库
#解压恢复
tar -xf mysql_all2022-06-21.tar.gz -C /usr/local/mysql/data/
cd /usr/local/mysql/data      #切换目录
mv usr/local/mysql/data/* ./  #将解压的数据移到/usr/local/mysql/data/下

压缩备份
在这里插入图片描述

解压恢复
在这里插入图片描述
启动服务,查看数据是否还在
在这里插入图片描述

3.2工具备份(温备)

常用的工具有
mysqldump 常用的逻辑备份工具
mysqlhotcopy 仅拥有备份 MyISAM和ARCHIVE表
使用mysqldump工具备份一个或多个完整的库(包括其中的表)

#备份一个或多个库
mysqldump -u root -p --databases 库名1 库名2 > 备份路径/文件名.sql
#备份所有库(完全备份)
mysqldump -u root -p --all-databases > 备份路径/文件名.sql
#备份的文件名后缀必须为.sql
#备份一个库中的一个或多个表
mysqldump -u root -p --databases 库名 表名1 表名2 > 备份路径.sql
  • 完全备份
    mysqldump -u root -p --all-databases > /opt/mysql_all.sql
    备份数据库中的所有库文件
    在这里插入图片描述
  • 完全备份恢复
    方法一:
#在数据库中,使用source恢复数据
mysql> source /opt/mysql_all.sql

删除表与表内内容
在这里插入图片描述
进行完全备份恢复
在这里插入图片描述
查看数据是否恢复
在这里插入图片描述
方法二:

#完全恢复
mysql -uroot -p < 备份文件路径
#恢复指定库的指定表
mysql -uroot -p 库名 表名1 表名2 < 备份文件路径

在这里插入图片描述

mysqldump -uroot -p --databases xy > /opt/mysql_xy.sql
当备份时加 --databases,表示针对库xy
当备份时不加–databases时,表示针对xy库下的所有表

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

  • 备份数据表结构
mysqldump -u root -p -d xy bank > /opt/xy_bank.sql
#-d 选项,说明只保留表的结构,不保留数据
#不加-d,则连同数据一起备份

在这里插入图片描述
也可以打开备份文件查看
在这里插入图片描述

小结:在数据恢复的时候建议使用source,简单方便
mysqldump工具属于温备份,在其进行数据备份的时候,会进行锁表,禁止写入
在备份库的时候要使用–databases

3.3增量备份与恢复

MySQL数据库增量恢复有,一般恢复、基于位置恢复、基于时间点恢复

3.3.1开启二进制日志功能

vim /etc/my.conf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED
server-id = 1
#二进制日志有三种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认为STATEMENT
#server-id 为服务的序号,在MySQL主备、高可用中需要指定服务的序号
#改为配置文件需要重启服务
systemctl restart mysqld

STATEMENT(基于sQL语句):
每一条涉及到被修改的sql都会记录在binlog中
缺点:日志量过大,如sleep()函数,last_insert_id()>,以及user-definedfuctions ( udf) 、垂从复制等架构记录日志时会出现问题
总结:增删改查通过sql语句来实现记录,如果用高并发可能会出错,可能时间差异或者延迟,可能不是我们想想的恢复可能你先删除或者在修改,可能会倒过来。准确率底

ROw(基于行)
只记录变动的记录,不记录sql的上下文环境
缺点:如果遇到update… …set… . .where true那么binlog的数据量会越来越大
总结: update、 delete以多行数据起作用,来用行记录下来,只记录变动的记录,不记录sql的上下文环境,比如sql语句记录一行,但是Row就可能记录10行,但是准确性高,高并发的时候由于操作量能变低比较大所以记录都记下来,

在这里插入图片描述
重启服务
systemctl restart mysqld.service

3.3.2二进制日志读取

二进制文件无法直接编辑查看,需要对其进行转换

mysqlbinlog --no-defaults 二进制日志文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v 二进制日志文件
#--base64-output=decode-rows 使用64位编码机制去解码;decode按行读取rows
#-v 显示详细内容
#--no-defaults 默认字符集(不加会报UTF-8错误)
#将解码后的文件导出为txt文件,重定向输出
mysqlbinlog --no-defaults --base64-output=decode-rows -v 二进制日志文件 > 文件.txt
#刷新日志文件
mysqladmin -uroot -p flush-logs

在这里插入图片描述

3.3.3一般恢复

将所有的二进制日志内容全部恢复
在这里插入图片描述
mysqladmin -uroot -p flush-logs 刷新日志文件
在这里插入图片描述
对表内数据进行删除操作
在这里插入图片描述

使用日志文件对数据进行恢复

mysqlbinlog --no-defaults -v /opt/mysql-bin.000001 |mysql -uroot -p

在这里插入图片描述

3.3.4节点恢复

数据库在某一时间点可能既有错误的操作也有正确的操作,可以基于精准的位置跳过错误的操作
发生错误节点指点的上一个节点,上一次正确操作的位置点停止
模拟节点恢复,刷新日志,生成新的日志文件
在这里插入图片描述
进行数据库操作
在这里插入图片描述

基于节点进行数据恢复
查看日志文件
在这里插入图片描述
在这里插入图片描述
恢复数据

mysqlbinlog --no-defaults --stop-position='711' /opt/mysql-bin.000004 |mysql -uroot -p
#--stop-position='711'    恢复到711节点之前
#--start-position='711'   从节点711开始

在这里插入图片描述

3.3.5基于时间点恢复

跳过某个发生错误的时间点实现数据恢复
在错误时间点停止,在下一个正确时间点开始

模拟时间点恢复,刷新日志,生成新的日志文件
在这里插入图片描述
修改表内数据
在这里插入图片描述
在这里插入图片描述

备份日志文件,并查看
在这里插入图片描述
在这里插入图片描述

mysqlbinlog --no-defaults --stop-datetime='2022-06-21 20:03:48' /opt/mysql-bin.000005 |mysql -uroot -p

在这里插入图片描述

四.总结

在增量备份恢复时,要先从完全备份恢复,再到二进制日志1、日志2…逐一恢复
如果恢复某条SQL语句之前的所有数据,就stop在这个语句的位置节点或者时间点
如果恢复某条SQL语句以及之后的所有数据,就从这个语句的位置节点或者时间点start


http://chatgpt.dhexx.cn/article/pIfiAwvH.shtml

相关文章

Mysql.数据备份

目录 前言 思考&#xff1a; 1. 如果只用redo log或者只用binlog可以吗&#xff1f; 2.xtrabackup实现mysql:全量备份增量备份 (1)简介&#xff1a; (2)下载&#xff1a; (3)官方文档&#xff1a; (4)源服务器和目标服务器准备&#xff1a; (5)源服务器备份全量及一次…

MySQL的数据备份

MySQL的数据备份 MySQL数据完全备份 数据备份目的&#xff1f; 数据丢失或者损坏&#xff0c;可以使用备份数据恢复 数据备份策略 完全备份 备份所有数据&#xff08;一张表&#xff0c;一个库、一台服务器&#xff09; 增量备份 备份上次备份后&#xff0c;所有新产生的数…

mysql数据备份

直接拷贝文件 myisam存储引擎 只要对应表的后缀为.frm .MYD .MYI,三个文件拷贝到对应的数据库文件夹就行 innodb存储引擎 先通过SHOW CREATE TABLE table命令,查询出表的创建语句,然后在备份库中执行执行ALTER TABLE table DISCARD TABLESPACE,丢弃的表空间拷贝表的后缀为.…

windows MySQL数据备份

本博客属作者原创&#xff0c;未经允许禁止转载&#xff0c;请尊重原创&#xff01;如有问题请联系QQ509961766 环境 OS&#xff1a;windows server 2012 Mysql&#xff1a;5.6.33 编写脚本 新建dump.bat批处理文件 rem auther:wwhy rem date:20210823 rem ******Backup MyS…

Mysql 数据备份

一、数据库备份的分类 备份方式分很多种&#xff0c;从物理与逻辑的角度&#xff0c;备份可分为以下几类&#xff1a; 1. 物理备份 指对数据库操作系统的物理文件&#xff08;如数据文件、日志文件等&#xff09;的备份 物理备份是磁盘块为基本单位将数据从主机复制到备机 物…

Mysql数据备份(mysqldump的操作)

数据备份 所有备份数据都应放在非数据库本地&#xff0c;&#xff08;得用远程存储&#xff0c;如ftp&#xff0c;nfs&#xff09;而且建议有多份副本。 备份的作用 能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;如&#xff0c;将数据库文件保存在了其它地…

MySQL 数据备份与恢复

本次使用的MySQL版本为8.0.20 目录 一、数据备份 1.使用 MySQLdump 命令备份 &#xff08;1&#xff09;使用MySQLdump备份单个数据库中的所有表 案例&#xff1a;完成数据插入后&#xff0c;输入备份命令如下&#xff1a; &#xff08;2&#xff09;使用MySQLdump备份数据…

MySQL备份

目录 一、直接拷贝数据库文件 二、mysqldump备份数据库 1、备份 2、备份还原 (1)完全备份还原 (2)增量备份 #eg ​(1)创建一个新的数据库表resume.test ​(2)此时完全备份 ​​(3)接着再往数据库表里面插入两条数据 ​(4)删除数据库resume,刷新日志 ​(5)此时会增加一个…

MySQL备份方案

mysql数据库的几种备份方案&#xff1a; 一、binlog二进制日志通常作为备份的重要资源&#xff0c;所以再说备份方案之前先总结一下binlog日志 1、binlog日志 1.1、引起mysql服务器改变的任何操作( 增 删 改 没有查)1.2、复制功能依赖于此日志1.3、slave服务器通过复制master…

MySQL 数据库备份(一)(完全备份与恢复)

文章目录 前言一、MySQL 完全备份1.数据库备份方式精讲1.1 数据库备份的重要性1.2 数据库备份的分类1.2.1 物理备份1.2.2 逻辑备份1.2.3 完全备份1.2.4 差异备份1.2.5 增量备份1.2.6 备份方式比较 1.3 MySQL 完全备份概念解读 2.mysqldump 备份演练2.1 使用 tar 打包文件夹备份…

捷豹路虎选择思博伦车载以太网一致性测试解决方案

现代化的汽车往往拥有上百种发动机控制单元&#xff08;ECU&#xff09;&#xff0c;随着越来越多的车辆开始支持多摄像机和高级驾驶员辅助系统&#xff08;ADAS&#xff09;等特性&#xff0c;汽车设计师必须在车载网络中采用更高带宽的以太网技术。汽车以太网源于现代通信网络…

Hype_V

Hyper-V是 微软的一款虚拟化产品&#xff0c;是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。这也意味着 微软会更加直接地与市场先行者VMware展开竞争&#xff0c;但竞争的方式会有所不同。 目录 简介 系统要求 架构特点 技术 实际部署 展开 简介 系统…

HSRP介绍

HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议。HSRP把多台路由器组成一个“热备份组”&#xff0c;形成一个虚拟路由器。这个组内只有一个路由器是Active(活动)的&#xff0c;并由它来转发数据包&#xff0c;如果活动路由器发生了故障&#xff0c;备份…

php+coreseek/sphinx之中文全文搜索平台搭建

1.简介 sphinx是一款高性能全文搜索软件包&#xff0c;由俄罗斯人开发&#xff0c;sphinx本身是可以支持中文搜索的&#xff0c;只是不支持中文分词&#xff0c;需要安装中文分词插件&#xff0c;coreseek就是一个打包了mmseg中文分词插件和sphinx源码的安装包。 2.安装 cores…

live555传输Speex音频详解一:Speex over RTP

1. RTP Speex 头部 RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。 Payload Type (PT): 本格式的负责类型号。 Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在 有声数据的第一个包上。 Speex支持声音检测&#xff0c;可以在无声时不 产生帧数据。所…

Speex的使用

Downloads Speex是一套主要针对语音的开源免费&#xff0c;无专利保护的音频压缩格式。Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 。另外&#xff0c;相对于其它编解码器&#xff0c;Speex也很适合网络应用&#xff0c;在网络应用上有着自己…

网络测速服务器OpenSpeedTest

什么是 OpenSpeedTest &#xff1f; OpenSpeedTest 是一个跨平台的互联网速度测试应用程序。因此&#xff0c;您可以在不同操作系统中的各种网络浏览器中测试您的互联网速度&#xff0c;而无需安装任何其他应用程序或插件&#xff08;无需 Flash 或 Java&#xff09;。这意味着…

【SpeechX—统一高性能语音部署工具】SpeechX Custom ASR

(以下内容搬运自 PaddleSpeech) 在一些场景中&#xff0c;识别系统需要高精度的识别一些稀有词&#xff0c;例如导航软件中地名识别。而通过定制化识别可以满足这一需求。 相关demo: https://github.com/PaddlePaddle/PaddleSpeech/tree/develop/demos/custom_streaming_asr …

Speex for Android

http://blog.csdn.net/chenfeng0104/article/details/7088138 在Android开发中&#xff0c;需要录音并发送到对方设备上。这时问题来了&#xff0c;手机常会是GPRS、3G等方式上网&#xff0c;所以节省流量是非常关键的&#xff0c;使用Speex来压缩音频文件&#xff0c;可以将音…

IOS开发之SDWebImage

SDWebImage 前言&#xff1a;在我们日常的开发中我们通常会使用SDWebImage来实现UIImageView加载来自互联网的远程图片 官方介绍&#xff1a;一个具有缓存支持的异步映像下载程序 功能简介 一个添加了web图片加载和缓存管理的UIImageView分类一个异步图片下载器一个异步的内存…