mysql 备份与恢复

目录

一、备份分类与方法

1.1 备份类型

1.2 备份策略

1.3 备份工具

二、完全备份与恢复

2.1 物理冷备

2.2 mysqldump逻辑热

(1)完全备份一个或多个完整的库(包括其中所有的表)

(2)完全备份 MySQL 服务器中所有的库

(3)完全备份指定库中的部分表

(4)查看备份文件

2.3 备份恢复

(1)恢复数据库

三、增量备份与恢复

3.1 日志管理

3.2 二进制日志备份与恢复

3.2.1 日志备份

1.开启二进制日志功能

2.可每周对数据库或表进行完全备份

3.可每天进行增量备份操作,生成新的二进制日志文件(例如 mysql-bin.000002)

4.插入新数据,以模拟数据的增加或变更

5.再次生成新的二进制日志文件(例如 mysql-bin.000003)

6.查看二进制日志文件的内容

3.2.2 日志恢复

(1)模拟丢失更改的数据的恢复步骤

(2)模拟丢失所有数据的恢复步骤

3.3 断点恢复

(1)基于位置恢复

(2)基于时间点恢复

断点恢复原则:


一、备份分类与方法

1.1 备份类型

  • 物理备份:直接对数据库的物理文件(数据文件、日志文件等)进行备份

  • 逻辑备份:对数据库对象(库、表)的数据以SQL语句的形式导出进行备份

1.2 备份策略

  • 完全备份:也叫全量备份,每次都备份完整的库或表数据

  • 差异备份:只备份上一次完全备份后的更新数据

  • 增量备份:只备份上一次完全备份或增量备份后的更新数据,即每次都只备份最新的数据

1.3 备份工具

  • 使用tar等方式压缩打包数据库文件(完全备份,物理冷备)

  • 使用MySQL自带的备份工具 mysqldump(完全备份,逻辑热备)、mysqlhotcopy(完全备份,逻辑热备,仅支持MyISAM和ARCHIVE表)

  • 刷新二进制日志(增量备份)

  • 使用第三方备份工具 Percona XtraBackup(PXB)(完全备份、增量备份,物理热备)

二、完全备份与恢复

2.1 物理冷备

1. 先关闭mysql数据库

 systemctl stop mysqld

2. 使用tar命令压缩打包备份数据库的数据目录和文件(看mysql配置文件中的 datadir 配置参数)

 压缩备份

tar zcvf /opt/mysql_all_$(date +%F).tar.gz /usr/local/mysql/data/

解压恢复

tar xf /opt/mysql_all_2020-11-22.tar.gz

2.2 mysqldump逻辑热备

mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql

(1)完全备份一个或多个完整的库(包括其中所有的表)

mysqldump -u root -p[密码] --databases 库名1 [库名2] … > /备份路径/备份文件名.sql	#导出的就是数据库脚本文件

(2)完全备份 MySQL 服务器中所有的库

mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql

(3)完全备份指定库中的部分表

mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql

(4)查看备份文件

grep -v "^--" /opt/xy101_info1.sql | grep -v "^/" | grep -v "^$"

 

2.3 备份恢复

(1)恢复数据库

mysql -u root -p -e 'drop database xy101;'
#“-e”选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出

 方法一:

mysql -u 用户 -p密码 [库名]  <  XXX.sqlcat  XXX.sql |  mysql -u 用户 -p密码 [库名]

方法二:

登录到Mysql数据库,再执行 source  XXX.sql文件路径   (注:如果sql文件里只备份了表,需要先 use 切换库再执行 source 恢复)

三、增量备份与恢复

3.1 日志管理

MySQL 的日志默认保存位置为 /usr/local/mysql/data
 

vim /etc/my.cnf
[mysqld]
##错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启
log-error=/usr/local/mysql/data/mysql_error.log					#指定日志的保存位置和文件名##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log##二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
log-bin=mysql-bin				#也可以 log_bin=mysql-bin##慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5												#设置超过5秒执行的语句被记录,缺省时为10秒
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;				#在数据库中设置开启慢查询的方法

3.2 二进制日志备份与恢复

3.2.1 日志备份

1.开启二进制日志功能
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED				#可选,指定二进制日志(binlog)的记录格式为 MIXED
server-id = 1

         二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式)

2.可每周对数据库或表进行完全备份
mysqldump -u root -p xy101 info1 > /opt/xy101_info1_$(date +%F).sqlmysqldump -u root -p --databases xy101 > /opt/xy101_$(date +%F).sql

3.可每天进行增量备份操作,生成新的二进制日志文件(例如 mysql-bin.000002)
mysqladmin -u root -p flush-logs

4.插入新数据,以模拟数据的增加或变更
insert into account values(3,'C',233);insert into account values(4,'D',233);
5.再次生成新的二进制日志文件(例如 mysql-bin.000003)
mysqladmin -u root -p flush-logs

之前的步骤4的数据库操作会保存到mysql-bin.000002文件中,之后数据库数据再发生变化则保存在mysql-bin.000003文件中

6.查看二进制日志文件的内容
cp /usr/local/mysql/data/mysql-bin.000002 /opt/
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002#--base64-output=decode-rows:使用64位编码机制去解码并按行读取
#-v:显示详细内容

3.2.2 日志恢复

(1)模拟丢失更改的数据的恢复步骤
use xy101;
delete from info1 where id=3;
delete from info1 where id=4;mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p

(2)模拟丢失所有数据的恢复步骤
use xy101;
drop table info1;mysql -u root -p xy101 < /opt/xy101_info1_2020-11-22.sql
mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p

3.3 断点恢复

(1)基于位置恢复
mysqlbinlog --no-defaults  --start-position='起始位置点'  --stop-position='结束位置点'  二进制日志文件路径 | mysql -u 用户 -p密码

例:
# at 302
#201122 16:41:16
插入了“user3”的用户数据

# at 623
#201122 16:41:24
插入了“user4”的用户数据

#仅恢复到操作 ID 为“623”之前的数据,即不恢复“user4”的数据
mysqlbinlog --no-defaults --stop-position='623' /opt/mysql-bin.000002 | mysql -uroot -p

#仅恢复“user4”的数据,跳过“user3”的数据恢复
mysqlbinlog --no-defaults --start-position='623' /opt/mysql-bin.000002 | mysql -uroot -p

(2)基于时间点恢复
mysqlbinlog --no-defaults  --start-datetime='YYYY-mm-dd HH:MM:SS'  --stop-datetime='YYYY-mm-dd HH:MM:SS'  二进制日志文件路径 | mysql -u 用户 -p密码

#仅恢复到 16∶41∶24 之前的数据,即不恢复“user4”的数据
mysqlbinlog --no-defaults --stop-datetime='2020-11-22 16:41:24' /opt/mysql-bin.000002 |mysql -uroot -p

#仅恢复“user4”的数据,跳过“user3”的数据恢复
mysqlbinlog --no-defaults --start-datetime='2020-11-22 16:41:24' /opt/mysql-bin.000002 |mysql -uroot -p

断点恢复原则:

如果要恢复某条SQL语句及其之后的所有数据,就从这个语句的位置点或时间点开始 start

如果要恢复到某条SQL语句之前的所有数据,就stop在这个语句前一个的位置点或时间点

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

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

相关文章

【排序】——2.快速排序法(含优化)

快速排序法 递归法 霍尔版本(左右指针法) 1.思路 1、选出一个key&#xff0c;一般是最左边或是最右边的。 2、定义一个begin和一个end&#xff0c;begin从左向右走&#xff0c;end从右向左走。&#xff08;需要注意的是&#xff1a;若选择最左边的数据作为key&#xff0c;则…

第十六周:机器学习笔记

第十六周周报 摘要Abstratc一、机器学习1. Pointer Network&#xff08;指针网络&#xff09;2. 生成式对抗网络&#xff08;Generative Adversarial Networks | GAN&#xff09;——&#xff08;上&#xff09;2.1 Generator&#xff08;生成器&#xff09;2.2 Discriminator&…

React 子组件调用父组件的方法,以及互相传递数据

<script type"text/babel" data-type"module"> import React, { StrictMode, useState } from react; import { createRoot } from react-dom/client;const ParentComponent () > {const [message, setMessage] useState("")//父组件…

C语言函数实现:深入理解strcpy

文章目录 一、strcpy函数的基本用法二、strcpy函数的实现原理三、strcpy函数的应用场景四、strcpy函数的安全性问题五、结论 C语言函数实现&#xff1a;深入理解strcpy 在C语言编程中&#xff0c;字符串处理是一项基础且重要的任务。 strcpy函数作为C标准库中的一个基本函数&a…

计算生物学与生物信息学漫谈-2-测序深度/读长质量和Fasta处理

上一篇文章中我们介绍了测序技术的由来与发展&#xff0c;那么在介绍第三代测序的时候&#xff0c;我们提到了关于测序深度和读长的问题&#xff0c;那么本篇文章就详解介绍一下。 计算生物学与生物信息学漫谈-1-测序一路走来-CSDN博客 目录 1.测序深度SEQUENCING DEPTH &…

现代物流管理:SpringBoot技术突破

3系统分析 3.1可行性分析 通过对本智能物流管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本智能物流管理系统采用SSM框架&#xff0c;JAVA作为开发语…

【SQL|大数据|数据清洗|过滤】where条件中 “ != “ 和 “ NOT IN() ” 对NULL的处理

对数据进行清洗过滤的时候&#xff0c;NULL往往是一个很特殊的存在&#xff0c;对NULL值的存在通常有以下三种方式 1、保留NULL 2、过滤掉NULL 3、将NULL替换为其他符合业务需求的默认常量 下面是一些常用处理NULL的方式&#xff1a; 如下图所示数据源&#xff1a; car_vin&…

嵌入式入门学习——6Protues点亮数码管,认识位码和段码,分辨共阴还是共阳(数字时钟第一步)

0 系列文章入口 嵌入式入门学习——0快速入门&#xff0c;Let‘s Do It&#xff01; 首先新建基于Arduino UNO的protues工程&#xff0c;见本系列第3篇文章 1 点“P”按钮找器件 2 输入“seg”或“digit”查找数码管器件 3 找到我们想要的6位7段数码管 4如图A、B…DP都是段码…

ESP32-C3 入门笔记04:gpio_key 按键 (ESP-IDF + VSCode)

1.GPIO简介 ESP32-C3是QFN32封装&#xff0c;GPIO引脚一共有22个&#xff0c;从GPIO0到GPIO21。 理论上&#xff0c;所有的IO都可以复用为任何外设功能&#xff0c;但有些引脚用作连接芯片内部FLASH或者外部FLASH功能时&#xff0c;官方不建议用作其它用途。 通过开发板的原…

自由学习记录(11)

Surface Effector 2D Platform Effector 2D 向上跳跃穿过天花板的功能 平台效应器不用变Trigger&#xff0c;因为本来就是要有碰撞的 use one way grouping是让所有相关联的碰撞器都可以单面跳墙 默认不勾选&#xff0c;左右两边没有摩擦力和弹力&#xff0c;要自己先设置sid…

三菱PLC伺服-停止位置不正确故障排查

停止位置不正确时&#xff0c;请确认以下项目。 1)请确认伺服放大器(驱动单元)的电子齿轮的设定是否正确。 2&#xff09;请确认原点位置是否偏移。 1、设计近点信号(DOG)时&#xff0c;请考虑有足够为0N的时间能充分减速到爬行速度。该指令在DOG的前端开始减速到爬行速度&…

计算机毕业设计 基于Web的景区管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

市场上几个跨平台开发框架?

跨平台桌面应用开发框架是一种工具或框架&#xff0c;它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上&#xff0c;开发者需要为每个操作系统编写不同的代码&#xff0c;使用不同的开发工具和语言。而跨平台桌面应用开发框架通过…

【网络】IP协议的地址管理

【网络】IP协议的地址管理 一. IP协议格式二. 地址管理1.动态分配IP地址2.NAT机制2.1 NAT机制下网络的请求/响应 3. 网段划分3.1 特殊的IP地址 4.路由选择5.DNS域名解析系统 一. IP协议格式 4位版本号(version): 指定IP协议的版本&#xff08;IPv4/IPv6&#xff09;, 对于IPv4来…

一起搭WPF架构之livechart的MVVM使用介绍

一起搭WPF架构之livechart使用介绍 前言ModelViewModelView界面设计界面后端 效果总结 前言 简单的架构搭建已经快接近尾声了&#xff0c;考虑设计使用图表的形式将SQLite数据库中的数据展示出来。前期已经介绍了livechart的安装&#xff0c;今天就详细介绍一下livechart的使用…

第6篇:无线与移动网络

目录 引言 6.1 无线网络的基础概念 6.2 无线局域网&#xff08;WLAN&#xff09;与IEEE 802.11 6.3 蓝牙与无线个域网&#xff08;WPAN&#xff09; 6.4 无线城域网&#xff08;WMAN&#xff09;与WiMax 6.5 ZigBee与智能家居 6.6 移动蜂窝网络&#xff08;3G/4G/5G&…

SpringCloudStream使用StreamBridge实现延时队列

利用RabbitMQ实现消息的延迟队列 一、安装RabbitMQ 1、安装rabbitmq 安装可以看https://blog.csdn.net/qq_38618691/article/details/118223851,进行安装。 2、安装插件 安装完毕后,exchange是不支持延迟类型的,需要手动安装插件,需要和安装的rabbitmq版本一致 https:…

深入探讨C++多线程性能优化

深入探讨C多线程性能优化 在现代软件开发中&#xff0c;多线程编程已成为提升应用程序性能和响应速度的关键技术之一。尤其在C领域&#xff0c;多线程编程不仅能充分利用多核处理器的优势&#xff0c;还能显著提高计算密集型任务的效率。然而&#xff0c;多线程编程也带来了诸…

62天框架安全(学习)

发现学了之后没有去复习&#xff0c;每天都要问自己学了什么&#xff0c;复习了吗&#xff0c;下次还能记住吗 一下内容来自【小迪安全2023】第62天:服务攻防-框架安全&CVE复现&Spring&Struts&Laravel&ThinkPHP_小迪安全文档2023-CSDN博客 一个网站的源码…

排序算法 —— 直接插入排序

目录 1.直接插入排序的思想 2.直接插入排序的实现 实现分析 实现代码 3.直接插入排序的分析 时间复杂度分析 空间复杂度分析 稳定性 1.直接插入排序的思想 直接插入排序的思想就是把待排序的元素按其关键码值的大小依次插入到一个已经排好序的有序序列中&#xff0c…