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

news2024/11/25 2:56:53

一、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命令行,如下图所示:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗行业携手用友BIP收入云,开启高效收入管理新时代

在医疗行业&#xff0c;收入管理是实现可持续发展的重要环节。随着医疗改革的深入和市场竞争的加剧&#xff0c;医疗机构需要寻找有效的收入管理破局方法。用友BIP收入云作为一款强大的收入管理工具&#xff0c;为医疗行业提供了有力的支持。 一、医疗行业收入管理破局方法 精细…

多视图变换矩阵与SLAM位姿估计中的地图点投影的几何约束

定义 Homography & projective transform M ( 3 4 ) [ f s x c ′ 0 a f y c ′ 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 ] [ R 3 3 0 3 1 0 1 3 1 ] [ I 3 3 T 3 1 0 1 3 1 ] \underset{(3 \times 4)}{\mathbf{M}}\left[\begin{array}{ccc} f & s & x_c^{\pr…

前端已学习内容

一、HTMLCSS 1、黑马B站视频-27小时 地址&#xff1a;基础班导学-精讲与实战_哔哩哔哩_bilibili 说明&#xff1a;讲义已下载。两个小项目还没学没练。 2、菜鸟教程 地址&#xff1a;HTML 简介 | 菜鸟教程 二、JavaScript 1、菜鸟教程 网址&#xff1a;JavaScript 教程 …

【点击收藏】鸿蒙HarmonyOS实战开发—如何实现应用悬浮窗

前言 鸿蒙登场&#xff01;它的征途是万物互联 备受瞩目的华为HarmonyOS 2&#xff08;即鸿蒙系统&#xff09;正式发布。同时&#xff0c;华为发布了多款搭载鸿蒙系统的新产品&#xff0c;包括Mate 40系列新版本、Mate X2新版本、华为WATCH 3系列、华为MatePad Pro等手机、智能…

vue-editor设置字体font-family

背景&#xff1a;Vue项目中需要用到富文本编辑器&#xff0c;所以选择了vue-editor这个富文本编辑器&#xff0c;发现字体font-family只有三种Sans Serif、Serif、MonoSpace可以选择&#xff0c;满足不了产品的需求&#xff0c;所以用想要定义成常用字体&#xff0c;主要是需要…

AGI时代的奠基石:Agent+算力+大模型是构建AI未来的三驾马车吗

★AI Agent&#xff1b;人工智能体&#xff0c;RPA&#xff1b;大语言模型&#xff1b;prompt&#xff1b;Copilot&#xff1b;AGI&#xff1b;ChatGPT&#xff1b;LLM&#xff1b;AIGC&#xff1b;CoT&#xff1b;Cortex&#xff1b;Genius&#xff1b;MetaGPT&#xff1b;大模…

借助ChatGPT撰写学术论文,如何设定有效的角色提示词指

大家好&#xff0c;感谢关注。这个给大家提供关于论文写作方面专业的讲解&#xff0c;以及借助ChatGPT等AI工具如何有效辅助的攻略技巧。有兴趣的朋友可以添加我&#xff08;yida985&#xff09;交流学术写作或ChatGPT等AI领域相关问题&#xff0c;多多交流&#xff0c;相互成就…

段页式管理

缝合怪&#xff01;&#xff01;&#xff01; 分页、分段的对比 分段分页段页式管理 先将进程按逻辑模块分段&#xff0c;再将各段分页 段页式管理的逻辑地址结构 段号页号页内偏移量 段号的位数&#xff1a;决定了每个进程最多可以分为几个段。 页号的位数&#xff1a;决定…

马斯克怒了,禁止员工使用苹果设备,抨击库克出卖数据给OpenA

昨晚&#xff0c;苹果发布会正式宣布了一系列重磅AI升级&#xff0c;甚至创造了一个新的概念——苹果智能&#xff08;Apple Intelligence&#xff09;。 这次升级在操作系统的交互层面上进行了智能化改进&#xff0c;使得更多自然语音和语言理解的控制成为可能&#xff0c;将…

常见数据编码方式

数据编码方式&#xff1a; 二进制数字信息在传输过程中可以采用不同的代码&#xff0c;各种代码的抗噪声特征和定时功能各不相同&#xff0c;实现费用也不一样。下面介绍几种常用的编码方式。 1、单极性码 在这种编码方案中&#xff0c;只用正的&#xff08;或负的&#xff09;…

服务器如何远程桌面连接不上,服务器远程桌面连接不上解决办法

服务器远程桌面连接不上&#xff0c;是IT运维中常见的挑战之一。针对这一问题&#xff0c;专业的解决方法通常涉及以下几个方面的排查与操作&#xff1a; 首先&#xff0c;我们需要检查网络连接是否正常。远程桌面连接依赖于稳定的网络连接&#xff0c;因此&#xff0c;确认服务…

第十九节:暴力递归到动态规划

一 动画规划的概念 优化出现重复解的递归 一旦写出递归来&#xff0c;改动态规划就很快 尝试策略和状态转移方程是一码事 学会尝试是攻克动态规划最本质的能力 如果你发现你有重复调用的过程&#xff0c;动态规划在算过一次之后把答案记下来&#xff0c;下回在越到重复调用过程…

Java四舍五入保留小数

这里介绍两种方法&#xff1a; package Book.jj.hh;import java.text.DecimalFormat; //使用DecimalFormat类 public class Demo1 {public static void main(String[] args) {double num 123.52631;DecimalFormat a new DecimalFormat("#.00"); //小数点后有几个0…

UE4 RPC进行网络同步

说明 基于UE本身提供的RPC同步机制 RPC远程过程调用允许客户端或服务器通过网络连接相互发送消息&#xff1a; 使用时需要注意&#xff1a; 1、必须从 Actor 上调用 2、Actor 必须被复制&#xff0c;注意勾选BP中Replicates&#xff0c;或使变量bReplicates true 3、注意如…

揭秘独孤信印章:多面性与历史地位的双重传奇

2024高考已经结束&#xff0c;小编回顾前几年高考试卷时发现在2019年全国高考II卷中&#xff0c;一枚古老的印章被做成了一道数学题。这枚印章不仅因其独特的多面体设计而引人注目&#xff0c;更因为其背后所代表的历史人物——独孤信&#xff0c;而成为了热门的话题。那么&…

pip切换至国内镜像超简单方法

新配置的python环境&#xff0c;pip安装包超时 这里给出最简单配置国内镜像的方法 这里将服务器地址切换为国内清华镜像&#xff0c;具体执行的命令如下&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 执行完&#xff0c;看到上面提…

【C++ 类和对象】初始化列表

文章目录 1. 构造函数体赋值2. 初始化列表&#x1f50d; 1. 构造函数体赋值 &#x1f34e;① 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:// 构造函数 Date(int year, int month, int day) {_y…

面试题:如何避免索引失效?

(1) 范围条件查询 (2) 不要在索引上使用函数运算, 否则索引也会失效. 比如在索引上使用切割函数, 就会使索引失效. (3) 字符串不加引号, 造成索引失效. (4) 尽量使用索引覆盖, 避免 select *, 这样能提高查询效率. 如果索引列完全包含查询列, 那么查询的时候把要查的列写出来…

一文教你如何实现并发请求的失败自动重试及重试次数限制

需求 在并发接口请求的时候&#xff0c;能够自动对失败的请求进行重发尝试&#xff08;超过指定重试次数则不再重试&#xff09;,并将最终的结果返回&#xff08;包含每个请求是否成功、返回结果&#xff09; 核心思路 代码实现 使用案例 为了演示我们代码的最终实现效果&a…

期权交易单位是什么?期权懂新手必看!

今天带你了解期权交易单位是什么&#xff1f;很多对期权还不太熟悉的朋友&#xff0c;不知道期权的单位是什么&#xff0c;下面小编就来告诉你期权的交易单位到底是什么&#xff1f; 期权交易单位是什么&#xff1f; 50ETF期权的交易单位&#xff0c;用大白话来说&#xff0c;…