[记录点滴] 使用工具和命令对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. Git之实战命令

    相关概念: HEAD: 说简单一点,HEAD就是当前活跃分支的游标. 形象的记忆就是:你现在在哪儿,HEAD就指向哪儿,所以Git才知道你在那儿! 不过HEAD并非只能指向分支的最顶端(时间节点距今最 ...

  2. Redis之过期删除侧率

    Redis 中 key 的过期删除策略 内存碎片如何产生 碎片率的意义 如何清理内存碎片 内存淘汰触发的最大内存 有哪些内存淘汰策略 内存淘汰算法 LRU LFU 1.定时删除 2.惰性删除 3.定期 ...

  3. 算法(第四版)C# 习题题解——3.2

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...

  4. ant 组件全局设置中文 vue

    //引入中文组件import zhCN from 'ant-design-vue/es/locale/zh_CN';//定义 const  locale = zhCN   //包裹根组件 <a- ...

  5. 推荐7个最强Appium替代工具,移动App自动化测试必备!

    在移动应用开发日益火爆的今天,自动化测试成为了确保应用质量和用户体验的关键环节.Appium 作为一款广泛应用的移动应用自动化测试工具,为测试人员所熟知.然而,在不同的测试场景和需求下,还有许多其他优 ...

  6. Navicat连接Oracle数据库报错:oracle library is not loaded解决方法

    连接Oracle时提示"oracle library is not loaded". 去Oracle官网下载Oracle Instant Client Downloads. htt ...

  7. 【Amadeus原创】查找docker里程序源代码路径 上传本地文件

    1. 先找到container id ,诸如,我要进wikijs. id为3f6d2092f6ba docker ps 2. docker exec 进入container里面 docker exec ...

  8. 对象存储 AVIF 图片压缩,邀您参与免费内测!

    对象存储 AVIF 图片压缩免费内测正式开放!AVIF 作为压缩图片中的新主力军,都有哪些特点呢?通过对象存储又要如何使用 AVIF 压缩呢?这篇文章将深入浅出的为您介绍~ ​具体介绍 现在硬件设备越 ...

  9. 鸿蒙应用开发从入门到入行 - 篇3:ArkUI布局基础与制作可交互页面

    鸿蒙应用开发从入门到入行 - 篇3:ArkUI布局基础与制作可交互页面 导读:在本篇文章里,您将掌握事件.装饰器.双向绑定等相关知识,并利用所学知识做一个待办列表的案例. 练手案例:登录界面 开始之前 ...

  10. 藏不住了,这届数字打工人(RPA)想在各行各业“当骨干”!

    数字化时代,最红的"打工人"是谁? 无疑,是RPA(数字化劳动力). 这种由机器人流程自动化+AI驱动,模拟人点击.移动鼠标等在电脑上的操作,在各种规则明确.高重复度业务场景中代替 ...