欢迎访问生活随笔!

生活随笔

您现在的位置是:首页 > 形式科学 > 操作系统 > 其他OS

其他OS

复制过程中丢失文件-(复制过程中丢失文件怎么办)

发布时间:2022-09-28其他OS 电脑专家
文件在复制过程中丢失
(文件在复制过程中丢失怎么办)
1.redis 从复制原理出发从库到主库发送同步请求,主库接收从库发送的同步请求,主库开始使用 bgsave 生成 rdb 文件主库 rdb 文件

文件在复制过程中丢失

(文件在复制过程中丢失怎么办)

1.redis 从复制原理出发从库到主库发送同步请求,主库接收从库发送的同步请求,主库开始使用 bgsave 生成 rdb 文件主库 rdb 文件生成后保存到磁盘,让将 rdb 从仓库接收主仓库发送的文件 rdb 文件,将 rdb 内存中载入文件

与主库同步时,从库中清空所有数据,因此在做 redis 尽量选择没有任何数据的主从 redis

架构图


环境准备

2.部署两台 redis

2.1 192.168.81.210 配置

1.创建redis部署路径[root@redis-1 ~]# mkdir -p /data/redis_cluster/redis_6379/{conf,pid,logs,data}[root@redis-1 ~]# tree /data/redis_cluster//data/redis_cluster/└── redis_6379 ├── conf ├── logs ├── pid └── data 2.下载redis[root@redis-1 ~]# mkdir /data/soft[root@redis-1 ~]# cd /data/soft[root@redis-1 /data/soft]# wget https://repo.huaweicloud.com/redis/redis-3.2.9.tar.gz3.编译安装redis[root@redis-1 /data/soft]# tar xf redis-3.2.9.tar.gz -C /data/redis_cluster/[root@redis-1 /data/soft]# cd /data/redis_cluster/[root@redis-1 /data/redis_cluster]# ln -s redis-3.2.9/ redis[root@redis-1 /data/redis_cluster]# cd redis/src[root@redis-1 /data/redis_cluster/redis]# make && make install4.准备配置文件[root@redis-1 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf daemonize yesbind 192.168.81.210 127.0.0.1port 6379pidfile /data/redis_cluster/redis_6379/pid/redis_6379.pidlogfile /data/redis_cluster/redis_6379/logs/redis_6379.logdatabases 16dbfilename redis_6379.rdbdir /data/redis_cluster/redis_6379/data/save 900 1save 300 100save 60 10000appendonly yesappendfilename "appendonly.aof"appendfsync alwaysappendfsync everysecappendfsync nono-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yes5.启动redis[root@redis-1 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf2.2 192.168.81.220 配置

由于 redis-1 一套已经部署好了 redis,我们可以直接复制使用

1.使用rsync将redis-1的redis复制你的目录[root@redis-1 ~]# rsync -avz /data root@192.168.81.220:/2.查看拷贝过来的目录文件[root@redis-2 ~]# ls /data/redis_cluster/redis redis-3.2.9 redis_6379[root@redis-2 ~]# ls /data/redis_cluster/redis_6379/conf data logs pid3.编译安装redis,使系统能够使用redis直接执行命令make install即可,因为编译步骤在redis-1已经做了[root@redis-2 ~]# cd /data/redis_cluster/redis-3.2.9/[root@redis-2 /data/redis_cluster/redis-3.2.9]# make install4.修改redis配置文件[root@redis-2 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf bind 192.168.81.220 127.0.0.15.启动redis[root@redis-2 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf3.redis 主从复制配置

3.1.批量创建主库 key

[root@redis-1 ~]# for i in{0..2000}; do redis-cli set k_${i}v_${i}; echo "k_${i}is ok"; done127.0.0.1:6379> DBSIZE(integer) 2001

3.2.配置从库连接主库

实现两种配置方式 Redis 主从复制:

配置文件实现命令执行命令

3.2.1.在配置文件中设置

1.修改配置文件[root@redis-2 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf slaveof 192.168.81.210 6379 #指定主库ip和端口2.重启redis[root@redis-2 ~]# redis-cli shutdown[root@redis-2 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf

3.2.2.命令行热更新配置

[root@redis-2 ~]# redis-cli127.0.0.1:6379> SLAVEOF 192.168.81.210 6379OK

3.3.检查主库数据同步主库数据

1.从库中执行keys检查数据是否相同[root@redis-2 ~]# redis-cli 127.0.0.1:6379> keys * 2.在主库上新建一个key,检查从库是否存在主:127.0.0.1:6379> set name jiangxlOK从:127.0.0.1:6379> get name "jiangxl"k_114,检查从库是否也删除了主:127.0.0.1:6379> del k_114(integer) 1从:127.0.0.1:6379> get k_114(nil)

3.4.在查看日志时,主要从同步原理

主库从库有记录复制的详细日志

4.redis 从复制危险操作开始

4.1.使用热更新配置误操作

redis 如果使用热更新配置进行主从复制,有时候因为选错了主机,把从库误认为是主库,所以在主库上执行了 slaveof,这将导致主库上的数据被清空,因为从库中没有数据

从库同步主库时,将清空所有原始数据

误操作过程

从库数据为0127.0.0.1:6379> DBSIZE(integer) 0主库数据为2001127.0.0.1:6379> DBSIZE(integer) 2001在主库上同步操作本应从库的数据127.0.0.1:6379> SLAVEOF 192.168.81.220 6379OK再次查看数据,127数据已清空.0.0.1:6379> DBSIZE(integer) 0

4.2.避免热更新配置误操作

在配置文件中直接配置主从而不使用热更新 slaveof 先执行 bgsave,手动备份数据,然后在数据目录中,将 rdb 将文件复制成另一个文件备份,这样即使有问题,也可以恢复

bgsave 之后不需要重启,直接备份 rdb 文件即可

1.手动持久化127.0.0.1:6379> BGSAVEBackground saving started2.备份rdb文件[root@redis-1 ~]# cd /data/redis_cluster/redis_6379/[root@redis-1 /data/redis_cluster/redis_6379]# cd data/[root@redis-1 /data/redis_cluster/redis_6379/data]# cp redis_6379.rdb redis_6379.rdb.bak3.主库再次同步错误,数据丢失127.0.0.1:6379> SLAVEOF 192.168.81.220 6379OK127.0.0.1:6379> keys *(empty list or set)4.还原备份rdb先停止文件redis,在还原[root@redis-1 ~]# redis-cli shutdown[root@redis-1 /data/redis_cluster/redis_6379/data]# cp redis_6379.rdb.bak redis_6379.rdb5.检查还原后的数据[root@redis-1 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf 127.0.0.1:6379> DBSIZE(integer) 20015.模拟 redis 主要从复制错误数据恢复

模拟 redis 恢复同步误操作数据

大致思路:

清空两台 redis 在主库上创建一些数据,然后使用 bgsave 命令将数据保存到磁盘中,然后将磁盘 rdb 文件备份将从数据库中同步,模拟主库数据丢失 rdb 还原数据库备份文件

本实验的主要目的是操作 redis 备份还原

5.1.清空数据

两台 redis 都需要操作

先关闭再删除数据再启动

[root@redis-1 ~]# redis-cli shutdown[root@redis-1 ~]# rm -rf /d