背景
- 最近学习redis想能够将dump文件进行导入处理.
- 看到比较好的办法都是使用ruby ,但是公司的网络太感人了.
- 想着比较简单的办法是通过docker方式来搭建.
- 这里简单记录一下搭建过程.
dockerfile
FROM redis
RUN echo "" > /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list
RUN cat /etc/os-release
RUN redis-cli -v
RUN apt-get update && apt-get install ruby-dev -y \
&& apt-get install make -y \
&& apt-get install procps -y \
&& apt-get install gcc -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# RUN gem sources -a http://ruby.taobao.org/
RUN gem install redis-dump -V
注意事项
W: Failed to fetch http://mirrors.aliyun.com/debian/dists/bullseye/InRelease Temporary failure resolving 'mirrors.aliyun.com'
W: Failed to fetch http://mirrors.aliyun.com/debian-security/dists/bullseye-security/InRelease Temporary failure resolving 'mirrors.aliyun.com'
W: Failed to fetch http://mirrors.aliyun.com/debian/dists/bullseye-updates/InRelease Temporary failure resolving 'mirrors.aliyun.com'
W: Failed to fetch http://mirrors.aliyun.com/debian/dists/bullseye-backports/InRelease Temporary failure resolving 'mirrors.aliyun.com'
- 简单学习了下应该是Docker内的网络没有dns解析导致的方法为:
cd /etc/docker
vim daemon.json
# 添加内容
{
"dns": ["8.8.8.8", "114.114.114.114"]
}
# 重启一下docker即可
systemctl restart docker
docker build && docker save
docker build . -t redis-dump
docker save redis-dump |gzip > redis-dump.tar.gz
在公司内部进行使用.
导出为 json 注意 集群模式 我不太明白怎么导出
docker run -it --net=host redis-dump redis-dump -u redis://10.110.82.137 -a Password >/deploy/redis-dump.json
注意可以根据帮助尽心进行处理:
Try: /usr/local/bin/redis-dump show-commands
Usage: /usr/local/bin/redis-dump [global options] COMMAND [command options]
-u, --uri=S Redis URI (e.g. redis://hostname[:port])
-d, --database=S Redis database (e.g. -d 15)
-a, --password=S Redis password (e.g. -a 'my@pass/word')
-s, --sleep=S Sleep for S seconds after dumping (for debugging)
-c, --count=S Chunk size (default: 10000)
-f, --filter=S Filter selected keys (passed directly to redis' KEYS command)
-b, --base64 Encode key values as base64 (useful for binary values)
-O, --without_optimizations Disable run time optimizations
-V, --version Display version
-D, --debug
--nosafe
导入到redis中来.
cat /deploy/21.30.json | docker run -i --net=host redis-dump redis-load -n -d 15 -u redis://127.0.0.1:6379
注意 docker run 不能有t 不然会报错:
the input device is not a TTY