[记录点滴] 使用工具和命令对redis数据进行备份恢复

0x00 摘要

本文记录了如何使用工具对redis数据进行恢复备份,涉及的有Redis-Dump,MySQL,Redis管道命令。

0x01 简介

如果希望把Redis数据备份成json格式,我们可以使用Redis-Dump,其网址是 https://github.com/delano/redis-dump,目前版本是 v0.4 BETA。

如果想短期大规模进行批量插入,可以考虑使用管道。redis-cli实用程序支持称为管道的新模式,该模式就是为了执行批量插入而存在的。

0x02 安装Redis-Dump

node

编译需要使用到node,所以先安装node

下载npm包

wget https://nodejs.org/dist/v6.11.3/node-v6.11.3-linux-x64.tar.xz

解压,创建链接

将压缩包解压到/opt目录下。可以看到bin目录下有两个可执行文件node和npm,在/usr/local/bin中创建该文件的链接

tar -xvf node-v6.11.3-linux-x64.tar.xz
cd /opt/
mv /root/node-v6.11.3-linux-x64 .
sudo ln -s /opt/node-v6.11.3-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /opt/node-v6.11.3-linux-x64/bin/npm /usr/local/bin/npm

然后使用node -v,npm -v验证是否成功

node -v
npm -v

Redis-Dump

安装redis-dump

npm install redis-dump -g
/opt/node-v6.11.3-linux-x64/bin/redis-dump -> /opt/node-v6.11.3-linux-x64/lib/node_modules/redis-dump/bin/cli/redis-dump
/opt/node-v6.11.3-linux-x64/lib
└─┬ redis-dump@0.1.10
├── async@1.5.2
├─┬ optimist@0.3.7
│ └── wordwrap@0.0.3
└─┬ redis@2.8.0
├── double-ended-queue@2.1.0-0
├── redis-commands@1.3.1
└── redis-parser@2.6.0

创建链接

 ls /opt/node-v6.11.3-linux-x64/bin/redis-dump
sudo ln -s /opt/node-v6.11.3-linux-x64/bin/redis-dump /usr/local/bin/redis-dump

0x03 应用Redis-Dump

备份

可以直接dump整个数据库

redis-dump -h your_ip -p your_port -a your_password > 1.json

恢复

< db_full.json redis-load -u :your_password@your_ip:your_password

失败情况

也遇到过dump失败情况
redis-dump -h your_id -p your_port -a your_password > 1.json
Invalid string length
node_redis: Using .end() without the flush parameter is deprecated and throws from v.3.0.0 on.
Please check the doku (https://github.com/NodeRedis/node_redis) and explictly use flush.

修改dump.js的源码,但是会导致redis-dump命令不可用,估计是什么保护机制吧

可以用filter参数,即导出特定的key,举例如下:

redis-dump -h your_id -p your_port -a your_password -f '*counter*' > 1.json

0x04 管道命令

使用例子

generate_redis_commands_option.py 用来构建测试命令

#!/usr/bin/python
import uuid
import hashlib
import time def create_uuid(): #Via UUID
return str(uuid.uuid1()) for i in range(100000):
print 'set options:test_'+create_uuid(),create_uuid()

generate_redis_data.sh将这些命令转化成Redis Protocol

#!/bin/bash

while read CMD; do
# each command begins with *{number arguments in command}\r\n
XS=($CMD); printf "*${#XS[@]}\r\n"
# for each argument, we append ${length}\r\n{argument}\r\n
for X in $CMD; do printf "\$${#X}\r\n$X\r\n"; done
done < redis_commands.txt

如何使用

python generate_redis_commands_option.py > redis_commands.txt
sh generate_redis_data.sh > redis_data.txt
head -7 redis_data.txt
cat redis_data.txt | redis-cli -p your_port -h your_ip -a your_password --pipe

验证

keys "*option*"

从MySQL迁移

#!/bin/bash
mysql_cmd=/opt/lampstack-5.5.30-1/mysql/bin/mysql
redis_cmd=/opt/redis/redis-3.0.5/src/redis-cli
mysql_host=your_ip
mysql_user=your_user
mysql_pwd=your_password
database=your_database
redis=
cur_dt="$1" table_list=$($mysql_cmd -h$mysql_host -u$mysql_user -p$mysql_pwd $database -A -Bse "show tables") function gen_sql()
{
src_tbl=$1
mysql2redis="
SELECT CONCAT(\
'*3\r\n',\
'$',\
LENGTH(redis_cmd), '\r\n',redis_cmd, '\r\n',\
'$', LENGTH(hkey), '\r\n', hkey, '\r\n',\
'$', LENGTH(hval), '\r\n', hval, '\r'\
)\
FROM (\
SELECT\
'set' AS redis_cmd,\
CONCAT('shop:',shopid) AS hkey,\
deals AS hval\
FROM $src_tbl\
) AS T" echo "$mysql2redis"
} arg=xxxx
mysql2redisCmd=$(gen_sql $arg)
echo $mysql2redisCmd | $mysql_cmd -u$mysql_user -p$mysql_pwd -h$mysql_host $database --skip-column-names --raw | $redis_cmd --pipe

0xFF 参考

如何高效地向Redis插入大量的数据

[记录点滴] 使用工具和命令对redis数据进行备份恢复的更多相关文章

  1. Oracle RAC 常用维护工具和命令

    Oracle RAC 常用维护工具和命令 分类: Oracle Basic Knowledge Oracle RAC2010-03-09 01:02 13987人阅读 评论(6) 收藏 举报 orac ...

  2. RAC 常用维护工具和命令(oracle 10g)

    Oracle 的管理可以通过OEM或者命令行接口. Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrchec ...

  3. Redis学习笔记(5)——Redis数据持久化

    出处http://www.cnblogs.com/xiaoxi/p/7065328.html 一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存 ...

  4. redis开启持久化、redis 数据备份与恢复

    redis持久化介绍  https://segmentfault.com/a/1190000015897415 1. 开启aof持久化.以守护进程启动.远程访问先把配置文件拷贝一份到/etc/redi ...

  5. redis入门指南(七)—— 安全、协议、管理工具及命令属性

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 安全 1.可以使用bind参数绑定一个地址,使redis只接受这个地址的连接. 2.使用requ ...

  6. [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题

    [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题 目录 [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题 0x00 摘要 0x01 引言 0x02 ...

  7. Redis数据导入工具优化过程总结

    Redis数据导入工具优化过程总结 背景 使用C++开发了一个Redis数据导入工具 从oracle中将所有表数据导入到redis中: 不是单纯的数据导入,每条oracle中的原有记录,需要经过业务逻 ...

  8. 使用info命令查看Redis信息和状态

    redis-cli连接服务器后,使用info命令查看Redis信息和状态: ? 1 info 其中memory段显示了redis的内存使用状态. 以下内容复制自:http://redisdoc.com ...

  9. linux网络开发者定位问题常用工具和命令总结

    本文章来自我的微信个人技术公众号---网络技术修炼,公众号中总结普及网络基础知识,包括基础原理.网络方案.开发经验和问题定位案例等,欢迎关注. Linux网络开发者面临的问题往往比较复杂,因此需要使用 ...

  10. 记录一下git 的常用命令

    以后如果要写一个东西,最好先搭建一个本地仓库,用版本控制对其进行操作,可能一开始有一些麻烦,但是很有可能会受益无穷. 说到git,必然会和github联系起来. 不管是在ubuntu里面还是在Wind ...

随机推荐

  1. 新型大语言模型的预训练与后训练范式,Meta的Llama 3.1语言模型

    前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的.公开权重的大型语言模型.最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内 ...

  2. redis 使用lua 生成流水号

    在实际的业务场景中,我们会用到流水号. 之前的流水号做法是,使用redis的全局锁.然后对数据库进行更新,数据库更新 这个也会有一些问题,比如对于同一个流水号,多个线程去更新,由于事务比较长,那么就会 ...

  3. ZCMU-1129

    数学公式题罢了 学长 1.斯特灵公式: 2.对数公式(因为以10为底,得到的是10^x,所以最后向下取整加上1): #include<cstdio> #include<cmath&g ...

  4. 生成式AI如何辅助医药行业智能营销

    生成式AI如何辅助医药行业智能营销 生成式AI在医药行业的智能营销中发挥着日益重要的作用,它通过多种方式辅助医药企业提升市场洞察能力.优化营销策略.增强客户互动和体验,从而推动销售增长和品牌价值的提升 ...

  5. MySql 9 in Docker 利用克隆插件搭建主从

    环境说明 Docker Windows 11 MySql 9.1.0 搭建步骤 1. 准备主库 准备一个主库的配置文件 master.cnf [mysqld] server-id=1 log-bin= ...

  6. BUU get_started_3dsctf_2016

    先checksec一下 32位程序,没开PIE,再观察一下主函数 gets函数有可能是栈溢出,再观察一下后门函数 方法一: 考虑栈溢出后直接跳转到if判断后面的语句,进而跳过if条件判断 from p ...

  7. C#中 自定义验证规则ValidationAttribute的使用

    C#中 自定义验证规则ValidationAttribute的使用 迷恋自留地 进行接口请求的时候难免会对请求字段进行验证,验证对象的所有字段的值是否合乎要求,如进行非空检测,长度检测等等. Requ ...

  8. dockerfile实现tomcat以及java的war包自动部署

    1. 下载jdk和tomcat wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.93/bin/apache-tomcat-8.5.93.tar.g ...

  9. [Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which is not available on your PHP installation.

    [Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which ...

  10. Qt编写地图综合应用39-覆盖物圆形

    一.前言 圆形的应用场景和多边形.矩形基本一致,支持的属性也是一致,比如可以设置线条的颜色.线条的粗细.线条透明度等.也是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县 ...