mysql和redis备份和恢复数据的笔记

一、mysql的备份及恢复方法:

1.完全备份与恢复

1.1物理备份与恢复

物理备份又叫冷备份,需停止数据库服务,适合线下服务器

备份数据流程:

第一步:制作备份文件
systemctl stop mysqld
#创建存放备份文件的目录
mkdir /bakdir
#拷贝数据源文件
cp -r /var/lib/mysql /bakdir/mysql.bak
cd /var/lib/mysql
#打包压缩数据源文件
tar -zcvf /bakdir/mysql.tar.gz ./*
查看备份文件
ls /bakdir
mysql.bak  mysql.tar.gz
看使用场景,习惯使用压缩包就使用mysql.tar.gz


第二步:删除原来的数据库数据
rm -rf /var/lib/mysql/*

第三步:恢复数据
1.使用压缩包恢复数据
#解压缩备份包
tar -xf /bakdir/mysql.tar.gz  -C /var/lib/mysql/
#启动mysqld
systemctl start mysqld

mysql -uroot -p密码
回车
mysql> show databases;

或者

2.使用cp拷贝的备份文件恢复数据
systemctl stop mysqld
rm -rf /var/lib/mysql/*
cp -r /bakdir/mysql.bak/* /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
#启动mysqld
systemctl start mysqld

mysql -uroot -p密码
回车
mysql> show databases;

1.2mysqldump备份与恢复

热备份,备份和恢复数据库服务必须是运行的

// 备份1张表
mysqldump -uroot -p密码 库 表 > /bakdir/db1_tb1.sql
// 备份多张表
mysqldump -uroot -p密码 库 表1 表2 表n > /bakdir/db1_tb1_tb2_tbn.sql
// 备份多张表.sql
// 备份一个库
mysqldump -uroot -p密码 -B 表1 > /bakdir/tb1.sql
// 备份多个库
mysqldump -uroot -p密码 -B db1 db2 > /bakdir/db1_db2.sql
// 备份所有库
mysqldump -uroot -p密码 -A > /bakdir/allbak.sql

恢复数据(覆盖恢复数据)

第一种:恢复库数据步骤:
1. 删除库
mysql -uroot -p密码 #登录
mysql> drop  database db1; //删除库
mysql> exit
2. 命令行导入库数据
mysql -uroot -p密码 < /bakdir/db1.sql //恢复数据
3. mysql登录验证
mysql -uroot -p密码 #登录
mysql> use db1; //进库
mysql> show tables; //看表

第二种:恢复表数据步骤:
1. 删除表记录
mysql> delete from tb1; //删除表记录
mysql> exit
2. 命令行导入表文件
mysql -uroot -p密码  db1 < /bakdir/db1_tb1.sql
3. mysql登录验证
mysql -uroot -p密码 #登录
mysql> select count(*) from db1.tb1; //查看行数

注意:mysqldump备份和恢复数据会锁表,锁表期间无法对表访问,mysqldump适合备份数据量比较小的数据或在数据库服务器访问量少的时候备份

2.增量备份与恢复

增量备份:备份上次备份后,新产生的数据

xtrabackup是一款强大的在线热备份工具,备份过程中不锁库和表,适合生产环境.

支持完全备份与恢复,增量备份与恢复,差异备份与恢复.

准备2台虚拟机node1、node2

2.0 安装软件

//把软件拷贝到虚拟机里
scp /percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz root@node1:/root/ 
//安装依赖
yum -y  install perl-DBD-MySQL
//解压源码
tar -xf percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz
//移动并改名
mv percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal /usr/local/percona
//把命令添加到系统环境变量
vim /etc/bashrc
export PATH=/usr/local/percona/bin:$PATH  添加在文件末尾
:wq
source  /etc/bashrc
//查看帮助信息
man xtrabackup (按q 退出)

2.1 着手增量备份工作

对数据做增量备份前,必须先有一次备份,也就是首次备份,通常是备份所有数据;

比如每周一完全备份,周二到周日增量备份.

周一完全备份(备份所有数据)

xtrabackup 
--host=127.0.0.1 
--user=root
--password=xxx
--backup
--target-dir=/fullbak
--datadir=/var/lib/mysql


//插入新数据 (可以插入多行)
mysql> insert into db1.tb1(date,employee_id,basic,bonus)values("20230610",18,25000,8000);


周二增量备份(备份周一备份后新产生的数据)

xtrabackup 
--host=127.0.0.1 
--user=root
--password=xxx
--backup
--target-dir=/new2
--incremental-basedir=/fullbak
--datadir=/var/lib/mysql


//插入新数据 (可以插入多行)
mysql> insert into db1.tb1(date,employee_id,basic,bonus)values("20230610",18,25000,8000);


 周三增量备份(备份周二备份后新产生的数据)

xtrabackup 
--host=127.0.0.1 
--user=root
--password=xxx
--backup
--target-dir=/new3
--incremental-basedir=/new2
--datadir=/var/lib/mysql


//插入新数据 (可以插入多行)
mysql> insert into db1.tb1(date,employee_id,basic,bonus)values("20230610",18,25000,8000);


以此类推到周日

2.2 数据增量备份恢复

前置准备工作:按照顺序将备份文件到目标主机的根目录下

scp –r  root@node1:/fullbak  /
scp –r  root@node1:/new2  /
scp –r  root@node1:/new3  /
scp –r  root@node1:/new4  /
scp –r  root@node1:/new5  /
scp –r  root@node1:/new6  /
scp –r  root@node1:/new7  /

增量恢复数据步骤:

1.准备恢复数据

2.合并数据

3.清空数据库目录

4.拷贝数据

5.修改数据库目录所有者/组用户为mysql

6.重启数据库服务

7.连接数据库验证

1)准备恢复数据
xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
2)合并数据
xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
--incremental-dir=/new2

xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
--incremental-dir=/new3


xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
--incremental-dir=/new4

xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
--incremental-dir=/new5

xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
--incremental-dir=/new5

xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
--incremental-dir=/new6

xtrabackup
--prepare
--apply-log-only
--target-dir=/fullbak
--incremental-dir=/new7
3) 删除数据库数据
rm -rf /var/lib/mysql/*
4) xtrackup恢复数据
xtrabackup --copy-back --target-dir=/fullbak
5)修改数据库所有者/组用户为mysql
chown -R mysql:mysql /var/lib/mysql
6)重启数据库服务
systemctl  restart  mysqld
7)登录mysql查看数据
mysql -uroot -p密码
mysql> select count(*) from tarena.salary

3.差异备份与恢复

3.1 着手差异备份工作:

对数据做差异备份前,必须先有一次备份,也就是首次备份,通常啥备份所有数据

比如每周一完全备份,周二到周日差异备份

3.1周一完全备份

xtrabackup --host=127.0.0.1 \
--user=root \
--password=123456 \
--backup \
--target-dir=/allbak \
--datadir=/var/lib/mysql

增加表格数据的操作就不赘述了

周二差异备份(备份周一备份后新产生的数据)

xtrabackup --host=127.0.0.1 \
--user=root \
--password=123456 \
--backup \
--target-dir=/dir2 \
--incremental-basedir=/allbak \
--datadir=/var/lib/mysql

 周三差异备份(备份周一备份后新产生的数据)

xtrabackup --host=127.0.0.1 \
--user=root \
--password=123456 \
--backup \
--target-dir=/dir3 \
--incremental-basedir=/allbak \
--datadir=/var/lib/mysql

因为都是备份的周一备份后新产生的数据,所以实际上只需要在上述命令基础上修改--target-dir=当日备份目录路径

直接推断到周日差异备份(备份周一备份后新产生的数据)

xtrabackup --host=127.0.0.1 \
--user=root \
--password=123456 \
--backup \
--target-dir=/dir7 \
--incremental-basedir=/allbak \
--datadir=/var/lib/mysql

3.2 差异备份恢复

差异恢复数据步骤:

前置准备工作:远程拷贝备份数据到目标主机的根目录

scp –r  root@node1:/allbak  /
scp –r  root@node1:/dir7  /
1)准备恢复数据
xtrabackup --prepare \
--apply-log-only \
--target-dir=/allbak
2)合并数据
xtrackup --prepare \
--apply-log-only \
--target-dir=/allbak \
--incremental-dir=/dir7
3)清空数据库目录
rm -rf /var/lib/mysql/*
4)拷贝数据
xtrabackup --copy-back --target-dir=/allbak
5)修改数据库所有者/组用户为mysql
chown -R mysql:mysql /var/lib/mysql
6)重启数据库服务
systemctl restart mysqld
7)连接数据库服务查看数据(略......)

4.使用binlog日志恢复数据

binlog日志介绍:

1.也称为二进制日志

2.mysql服务日志文件的一种

3.保存除查询之外的所有sql命令

4.可用于数据的备份和恢复

5.配置mysql主从同步的必要条件

4.1 在node1主机的mysql命令行下查看日志:

注:日志文件默认保存在/var/lib/mysql目录下,默认日志名binlog,如果在/etc/my.cnf.d/mysql-server.cnf修改过bin-log的配置应按照配置文件查找

假设bin-log的配置改为/mylog/node1

mysql> show master status;

+----------------+----------+--------------+------------------+-------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| node1.000001 |      156 |              |                  |                   |
+----------------+----------+--------------+------------------+-------------------+

exit退出mysql

mysql> exit

在linux系统命令行将日志文件远程拷贝到目标主机

scp /mylog/node1.000001 root@node2:/root/

4.2 在node2主机使用日志恢复数据

1)查看日志是否在目标主机
ls /root/node1.000001
2)执行日志恢复数据

 恢复数据命令:

mysqlbinlog /目录/文件名 | mysql -uroot -p密码

结合实际应为:

mysqlbinlog /root/node1.000001 | mysql -uroot -p密码
3)使用mysql查询命令对比数据是否备份成功

二、mysql增量备份,差异备份,完全备份,binlog备份比较优缺点

在Linux环境下,MySQL数据库的备份可以通过以下方式进行:

  1. 完整备份(Full Backup):备份整个数据库。

  2. 差异备份(Differential Backup):仅备份上次完整备份后发生变化的数据。

  3. 增量备份(Incremental Backup):仅备份自上次增量备份以来发生变化的数据。

  4. binlog备份:备份MySQL的二进制日志文件(binlog),记录了所有数据库更改的历史。

优缺点对比:

备份名称优点缺点
完整备份简单

1.数据冗余

2.备份时间长

差异备份备份数据量小

恢复时需要先恢复完整备份

增量备份

1.备份数据量小

2.恢复数据快

需要上次的完整备份或差异备份
binlog备份

1.能够精确到行级别

2.恢复速度快

需要mysq‘的二进制更能开启

实际选择哪种备份策略取决于数据的重要性、恢复需求和备份策略的实施复杂度。

三、扩展内容:redis的备份与恢复

第一种方案:RDB

1. 新建RDB文件:

1)关闭redis
systemctl stop redis
2)删除数据库数据
rm -rf /var/lib/redis/*
3)修改redis.conf配置

设置存盘间隔为120秒且10个key,改变数据自动存盘设置:存盘间隔120秒且10个key改变,则数据自动存盘

vim /etc/redis.conf
save 900 1
#save 300 10
save 120 10     # 2分钟内且有>=10个变量改变,就把内存里的数据复制到dump.rdb文件里
save 60 10000
4)启动redis
systemctl start redis
5)查看dump.rdb的详细信息
#查看dump.rdb
ls /var/lib/redis/dump.rdb
提示没有该文件或目录就行
6)redis插入数据

要在2分钟内存储大于等于10个变量

redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> mset a 1  b 2  c 3  d 4 
OK
192.168.88.70:6379> mset ... (像上面那个例子一样添加数据,凑足至少10个变量的改动...)
192.168.88.70:6379> exit
7)再次查看dump.rdb的详细信息
#redis赋值后查看是否有dump.rdb文件
ls /var/lib/redis/ -l 

2.使用RDB文件恢复数据

1)拷贝dump.rdb文件(数据的备份文件)到其他目录
cp /var/lib/redis/dump.rdb /opt/

#查看是否拷贝成功
ls /opt/*.rdb
2)清空数据库数据
redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> FLUSHALL 
192.168.88.70:6379> keys *
192.168.88.70:6379> exit
3)停止redis服务
systemctl stop redis
4)把/var/lib/redis/目录的dump.rdb文件删除
rm -rf /var/lib/redis/*
5)把备份dump.rdb文件拷贝到数据库目录/var/lib/redis/下
cp /opt/dump.rdb /var/lib/redis/
6)启动redis服务
systemctl start redis 
7)连接redis服务查看数据
redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> keys *

第二种方案:使用AOF恢复数据

1.启用AOF

config set  appendonly yes #启用aof文件

config rewrite #保存配置

redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> config set  appendonly yes #启用aof文件
192.168.88.70:6379> config get  appendonly #查看是否启用
192.168.88.70:6379> config rewrite #保存配置
192.168.88.70:6379> exit

#查看数据库目录是否有.aof文件
ls /var/lib/redis
#查看文件行数
wc -l /var/lib/redis/appendonly.aof 


测试增加数据,行数是否变化:
#进入redis命令行,添加存储数据
redis-cli  -h 192.168.88.70 -p 6379
192.168.88.70:6379> 使用set或者mset增加存储变量
192.168.88.70:6379> keys * #查看变量
192.168.88.70:6379> exit

#查看文件函数
wc -l /var/lib/redis/appendonly.aof 

2.使用AOF文件恢复数据

1)备份aof文件到其他目录(比如/opt)
第一步.备份aof文件
cp /var/lib/redis/appendonly.aof /opt/
#查看是否备份成功
ls /opt/*.aof
2)清空数据库
redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> flushall 
192.168.88.70:6379> exit
3)停止redis服务
systemctl stop redis
4) 删除/var/lib/redis/目录下的文件

为了不影响备份效果,删除/var/lib/redis/下的aof文件或者rdb文件

rm -rf /var/lib/redis/*
5)把备份的aof文件拷贝到数据库目录/var/lib/redis/下
cp /opt/appendonly.aof /var/lib/redis/
6)启动redis服务
systemctl start redis
7)连接redis服务查看效果
redis-cli -h 192.168.88.70 -p 6379  
192.168.88.70:6379> keys *

如果redis-cli命令连接命令行失败,先查看appendonly文件的owner和group是不是redis,不是redis的使用chown改成redis的主和组,然后再尝试连接redis命令行,如下图所示:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一夜之间,苹果杀死无数AI工具创业公司!GPT-4o深度整合进苹果

就在刚刚&#xff0c;苹果发布会WWDC2024官宣了一系列AI相关的重磅升级。 由于这一波AI升级攒的太大了&#xff0c;苹果甚至索性创造了一个新的概念——苹果智能&#xff08;Apple Intelligence&#xff09;。 如果你认为 苹果智能 Siri升级&#xff0c;那你就大错特错了。 …

Ubuntu,Linux服务器安装Mellanox MCX653105A IB网卡HCA卡驱动

驱动下载地址 https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ 选择对应操作系统 进入目录运行 安装成功显示 如果中途报错&#xff0c;需要核对下载的版本&#xff0c;并且把原来安装的卸载

在 TypeScript 中,定义类型时你用 Types 还是 Interfaces?

什么是 Types 和 Interfaces&#xff1f; Types 和 Interfaces 是 TypeScript 中两种用于定义数据结构的工具。它们可以帮助开发者在编写代码时约束变量和对象的类型&#xff0c;从而减少错误并提高代码的可读性。 Types&#xff1a;Types 允许你定义各种类型&#xff0c;包括基…

TCP四次挥手全过程详解

TCP四次挥手全过程 有几点需要澄清&#xff1a; 1.首先&#xff0c;tcp四次挥手只有主动和被动方之分&#xff0c;没有客户端和服务端的概念 2.其次&#xff0c;发送报文段是tcp协议栈的行为&#xff0c;用户态调用close会陷入到内核态 3.再者&#xff0c;图中的情况前提是双…

迅狐矩阵系统:智能化多平台内容管理与发布

迅狐矩阵系统是一套专为提高数字内容管理和发布效率而设计的综合性解决方案。它通过一系列智能化功能&#xff0c;帮助用户实现多平台内容的高效管理和发布&#xff0c;以下是系统的几大核心优势&#xff1a; 多平台绑定发布 迅狐矩阵系统支持用户绑定多个平台的多个账号&…

深入浅出 Qt 中 QListView 的设计思想,并掌握大规模、高性能列表的实现方法

在大规模列表控件的显示需求中&#xff0c;必须解决2个问题才能获得较好的性能&#xff1a; 第一就是数据存在哪里&#xff0c; 避免出现数据的副本。第二就是如何展示Item&#xff0c;如何复用或避免创建大量的Item控件。 在QListView体系里&#xff0c;QAbstractListModel解…

1.Anaconda-创建虚拟环境的手把手教程

文章目录 介绍&#xff08;必看&#xff09;正文版本信息模块安装流程1.创建虚拟环境2.激活环境3.退出虚拟环境4.安装python(激活虚拟环境)5.安装tensorflow(激活虚拟环境)6.安装matplotlib7.protobuf版本太高会有问题(激活虚拟环境) 常用的指令&#xff08;一定会用到&#xf…

基于C#开发web网页管理系统模板流程-主界面统计功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计-CSDN博客 统计功能是管理系统很常见的功能&#xff0c;例如仓库管理系统要统计某时间段的出入库以整合利润情况&#xff0c;再例如论文管理系统要统计男女生的分数情况等等…

day35|1005.K次取反后最大化的数组和 134. 加油站135. 分发糖果

文章目录 python语法记录 sort格式 1005.K次取反后最大化的数组和思路方法一方法二 按照绝对值排序 教程&#x1f388;✨ 背住 按照绝对值进行降序排序的语法是&#xff1a; 134. 加油站思路方法一 教程解法方法二 暴力求解 135. 分发糖果思路方法一 总结 python语法记录 sort …

那些年我看过的技术书(持续更新,大佬的成长之路)

作为一个技术人啊&#xff0c;要学会多看书&#xff0c;发展自己。哦也&#xff01;你可以不关注&#xff0c;就把文章点个收藏吧&#xff0c;万一以后想看书了呢&#xff1f; 网络安全 CTF篇 入门篇 《极限黑客攻防&#xff1a;CTF赛题揭秘》 Web篇 Reserve篇 《IDApro…

Nature | 百年未变?博士评定机制该改改了!

19世纪初&#xff0c;德国和法国先后开始授予现代科研博士学位。时至今日&#xff0c;大学的科研与教学早已不同于往昔。但惊人的是&#xff0c;获得和评定博士学位的流程却几乎没变。但改革势在必行。 博士生导师可以从其他教育阶段的创新中学到很多东西。 Innovation in PhD…

TinyHttpd源码精读(三)

在上一章中我们一起看了如何实现静态的网页&#xff0c;在这里我们一起看Tinyhttpd最后的一部分&#xff0c;动态网页的实现&#xff1a;在这里首先声明下因为cgi脚本的支持问题&#xff0c;所以我会新建一个简单的cgi脚本然后将路径导向到这个脚本&#xff1a; 0.perl的配置&…

3、SLAM算法中的运动模型和观测模型和常用传感器类型

SLAM算法中的运动模型和观测模型 常用传感器类型&#xff1a;局部传感器&#xff08;相机、IMU、激光雷达等&#xff09;在小区域内提供了精确的位姿&#xff0c;而全局传感器&#xff08;GPS、磁力计、气压计等&#xff09;在大尺度环境中提供了有噪声但是全局无漂移的定位。 …

【three.js】光源对物体表面影响

目录 一、受光照影响材质 二、光源简介 2.1 点光源 光源位置 点光源辅助观察 完整代码,粘贴即用 2.2 环境光 2.3 平行光 平行光辅助观察 实际生活中物体表面的明暗效果是会受到光照的影响,比如晚上不开灯,你就看不到物体,灯光比较暗,物体也比较暗。在threejs中,…

金融数据中心布线运维管理解决方案

金融行业的核心业务&#xff0c;如交易、支付、结算等&#xff0c;对网络的依赖程度极高。布线作为网络基础设施的重要组成部分&#xff0c;其稳定性和可靠性直接关系到业务的连续运行。因此&#xff0c;良好的布线管理能够确保网络系统的稳定运行&#xff0c;减少因网络故障导…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后&#xff0c;将会出现以下对话框 &#xff1a; 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步&#xff0c;下一步&#xff1a; 下一步&#xff1a; 下一步&#xff0c;这里我…

encoding Token和embedding 傻傻分不清楚?

encoding 编码 “encoding” 是一个在计算机科学和人工智能领域广泛使用的术语&#xff0c;它可以指代多种不同的过程和方法。核心就是编码&#xff1a;用某些数字来表示特定的信息。当然你或许会说字符集(Unicode)更理解这种概念&#xff0c;编码更强调这种动态的过程。而字符…

Rejetto HTTP文件服务器 未授权RCE漏洞复现(CVE-2024-23692)

0x01 产品简介 Rejetto HTTP File Server(HFS)是一个基于HTTP协议的文件服务器软件,旨在为用户提供简单、轻量级且易于使用的文件共享解决方案。功能强大、易于使用的文件服务器软件,无论是个人使用还是团队协作,HFS都能满足用户的需求,提高工作效率。 0x02 漏洞概述 …

vue3根据按钮切换更新echarts对应的数据

效果图 初始化注意 setOption的函数定义&#xff0c;option是指图表的配置项和数据&#xff0c;notMerge是指是否不跟之前设置的 option 进行合并。默认为 false。即表示合并。如果为 true&#xff0c;表示所有组件都会被删除&#xff0c;然后根据新option 创建所有新组件 //…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…