I created a dump.rdb using redis server version 2.8.22. It is ignored when redis server 3.2 is started. Is the data format in Redis 3.2 backward compatible with that in version 2.8.22?
It is not backward compatabile. I have tested the same and it works fine. The values in dump.rdb is stored in the folder you have your executable redis-server. So make sure you copy the file in 2.8.22 to 3.2. Otherwise values on dump.rdb inside 3.2 folder alone will be shown. Also make sure your redis server is not running during this process. Also make sure you start the redis server with ./redis-server redis.conf command. Only in redis.conf you will have the path to your dump.rdb file, by default it will take the dump file in parallel to redis-server.
I am following this tutorial to create a Redis cluster:
http://redis.io/topics/cluster-tutorial
In this tutorial I need to run several redis-server instances on port 7000 through 7005. However after I run the first instance successfully and try to run the second instance the nodes.conf file seems to be locked and I get the following error message:
"Sorry, the cluster configuration file nodes.conf is already used by a different Redis Cluster node. Please make sure that different nodes use different cluster configuration files."
Do I need a separate nodes.conf for every server instance? Or do I need a separate redis-server executable in each instance directory and run it from there?
The tutorial suggests you to use separated folders for each instance configuration, so each instance will also generate the nodes.conf on its own folder.
Create a redis.conf file inside each of the directories, from 7000 to
7005.
You need to have the .conf files on separated folders for each instance, and the executable must be ran from that folders.
Assuming you have the redis-server on /tmp/redis-cluster/, and the redis.conf on each /tmp/redis-cluster/700x folder:
cd /tmp/redis-cluster/7000
../redis-server ./redis.conf
This way the nodes.conf will be generated on the current folder 7000.
Note that you must first issue a cd to change the current directory, and from that folder execute the redis-server that is one folder up (../)
I recently installed Redis on OS X. I did an initial load of some objects, everything in this regard seems to be working perfectly.
I saved the data to dump.rdb and if I launch redis from this directory and don't use a redis.conf file everything goes according to plan.
The problem is that after settling in and setting up a redis.conf file in /etc/redis/ it seems to completely ignore the dbfilename and dir settings.
To be more clear. I created a data directory in: /Library/Redis_Data/.
In the redis.conf I set dbfilename dump.rdb and dir /Library/Redis_Data
If I launch: redis-server /etc/redis/redis.conf it simply refuses to load the dump.rdb.
I've run redis-cli and can read the config parameters get config dbfilename and get config dir and they return the correct values, but no data gets restored.
I also enabled AOF. The file appendonly.aof which resides in the same directory will be recreated if I delete it and start the server again.
Lastly...if I run save from the cli it will completely wipe out and create a new dump.rdb over my data.
Any thoughts?
FYI: redis server v=2.6.9 sha=00000000:0 malloc=libc bits=64
Thanks.
Solved:
Looking back this morning on this issue I managed to discover the problem.
I originally added my data without enabling appendonly mode. After this test load I setup my environment and decided it would be great to enable appendonly.
What I discovered is this. If you have data in the dump.rdb but the appendonly.aof file is empty and appendonly is turned on; Redis will ignore the dump.rdb instead assuming there is nothing to be done because the appendonly.aof transactions don't exist.
What I did: Turned off appendonly in the config file and restarted Redis with the normal directory setup. This then loaded the dump.rdb as per my config file. I then ran the command from redis-cli config set appendonly yes followed by save.
This then created the appendonly.aof file with all the transactions. Set appendonly back to yes in the config and all was right.
Cheers,
damnabit
I transferred my redis snapshot (dump.rdb file) using scp to a remote server. I need to run a redis server on this remote and recover the data from the dump.rdb file. How can I do that?
For databases where the appendonly flag is set to no, you can do the following:
Stop Redis (because Redis overwrites the current rdb file when it exits).
Copy your backup rdb file to the Redis working directory (this is the dir option in your Redis config). Also, make sure your backup filename matches the dbfilename config option.
Start Redis.
If, on the other hand, you need to restore an rdb file to the appendonly database, you should do something along the lines of:
Stop Redis (because Redis overwrites the current rdb file when it exits).
Copy your backup rdb file to the Redis working directory (this is the dir option in your Redis config). Also, make sure your backup filename matches the dbfilename config option.
Change the Redis config appendonly flag to no (otherwise Redis will ignore your rdb file when it starts).
Start Redis.
Run redis-cli BGREWRITEAOF to create a new appendonly file.
Restore the Redis config appendonly flag to yes.
Specifically, this is the relevant bit of documentation from the Redis config file comments:
# Note that you can have both the async dumps and the append only file if you
# like (you have to comment the "save" statements above to disable the dumps).
# >> Still if appendonly mode is enabled Redis will load the data from the
# >> log file at startup ignoring the dump.rdb file.
There is nothing specific to do. Just install the redis server on the new machine, and edit the configuration file. You just need to change the following parameters to point to the location of the dump file you have just copied.
# The filename where to dump the DB
dbfilename mydump.rdb
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# Also the Append Only File will be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /data/mydirectory/
Finally, the redis server can be started in the normal way.
Assuming that you run Redis 2.6 or higher, your Redis snapshot filename is dump.rdb, and it exists in the directory /home/user/dbs, the following command would do the trick:
redis-server --dbfilename dump.rdb --dir /home/user/dbs
Relevant section from the official documentation: Passing arguments via the command line
Or you can:
Stop your redis server / instance, eg., service redis6379 stop
Copy the dump.rdb file to the right location, eg., cp /path/to/dump-6379.rdb /var/lib/redis/dump-6379.rdb. Give it the right permissions (user:group should be redis:redis and mode 644)
Start your redis server / instance, eg., service redis6379 start
It is important that you stop the redis server before copying the file to the right location, because Redis saves a snapshot before terminating, so it will replace your file.
Besides, you might want to back up the existing dump.rdb file first.
I would like to add here a tiny detail that did not get mentioned and I will not use config file but instead specify everything in the command line.
When both mydump.rdb and appendonly.aof files are specified when starting redis-server, it will be the appendonly.aof file that wins such that the data from appendonly.aof gets loaded. For example:
redis-server --dbfilename mydump001.rdb --dir /data --appendonly yes
The above start invocation will use the /dir location to find the presence of mydump001.rdb or appendonly.aof files. In this case, redis-server will load the contents from appendonly.aof. If appendonly.aof does not exists, it will create an empty /data/appendonly.aof and the redis-server will be empty.
If you want to load a specific dump file, you can do:
redis-server --dbfilename mydump001.rdb --dir /data
I added this answer coz it is not obvious which is which. In the presence of 2 backup files, and this is often not mentioned.
start redis on your second server, like so:
$ > redis-server /path/to/my/redis/configuration/file/redis.conf
when redis starts, it will find your rdb file because it will look for the name
and file path in the configuration file (redis.conf) that you supply when
start the redis server, as above.
to supply the file name and path, just edit two lines in the redis.conf file template (supplied in the root directory of the redis source. Save your revised version as redis.conf in the directory location that you supplied upon starting the server.
You will find the settings you need in the redis.conf template in the source top-level directory, at lines 127 and 137 (redis version 2.6.9).
# The filename where to dump the DB
dbfilename dump.rdb
# The working directory
dir ./
as you can see, defaults are provided for both settings
so just change the first of these two lines (127) to identify your rdb file
and in the second (137) substitute the default "./" for the actual file path
for your snapshot rdb file; save the redis.conf with your changes, and start redis passing in this new conf file.
This solution work with redis-cluster, but should work too with redis.
Install this dependencie https://github.com/sripathikrishnan/redis-rdb-tools
pip install rdbtools python-lzf
after that execute this
rdb -c protocol /path/to/dump.rdb | redis-cli -h host -p port --pipe
If this is a cluster, the port should the master`s port.
try set appendonly no.
In My case, *.aof file was empty(0 byte), must set appendonly=no then make it load the dump.rdb
Install https://github.com/leonchen83/redis-rdb-cli
rmt -s ./your-dump.rdb -m redis://host:port -r
Now the redis can not background save.
I just want to dump it and restart.
How could I dump the redis? I've always this error :
"Can't re-open the VM
swap file: /tmp/redis.swap. Exiting."
Delete the dump.rdb file. (or simply move it somewhere e.g ~/saved-rdb/., where redis-server won't find it.)
Start redis-server
Note: dump.rdb is your data. By deleting it you are starting fresh (meaning data lost).