Starting with Redis 3.0. 6 MIGRATE supports a new bulk-migration mode that uses pipelining in order to migrate multiple keys between instances without incurring in the round trip time latency and other overheads that there are when moving each key with a single MIGRATE call.
Import an RDB backup file into a Redis instanceClick the Browse button and navigate to the Cloud Storage bucket that stores the RDB file you want to import. Click the RDB file and then click the Select button. Click the Import button. Confirm that you want to import, and click the Import button.
So, you can back up or copy the database file while the Redis server is running. Assuming that you're backing it up to a directory under your home folder, performing that backup is as simple as typing: sudo cp /var/lib/redis/dump.
First, create a dump on server A.
A$ redis-cli
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis/"
127.0.0.1:6379> SAVE
OK
This ensures dump.rdb
is completely up-to-date, and shows us where it is stored (/var/lib/redis/dump.rdb
in this case). dump.rdb
is also periodically written to disk automatically.
Next, copy it to server B:
A$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb
Stop the Redis server on B, copy dump.rdb (ensuring permissions are the same as before), then start.
B$ sudo service redis-server stop
B$ sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb
B$ sudo chown redis: /var/lib/redis/dump.rdb
B$ sudo service redis-server start
The version of Redis on B must be greater or equal than that of A, or you may hit compatibility issues.
Save a snapshot of the database into a dump.rdb by either running BGSAVE
or SAVE
from the command line. This will create a file named dump.rdb in the same folder as your redis server. See a list of all server commands.
Copy this dump.rdb to the other redis server you want to migrate to. When redis starts up, it looks for this file to initialize the database from.
If you have the connectivity between servers it is better to set up replication (which is trivial, unlike with SQL) with the new instance as a slave node - then you can switch the new node to master with a single command and do the move with zero downtime.
It is also possible to migrate data using the SLAVEOF command:
SLAVEOF old_instance_name old_instance_port
Check that you have receive the keys with KEYS *
. You could test the new instance by any other way too, and when you are done just turn replication of:
SLAVEOF NO ONE
Since Redis 5.0 is recommended to use REPLICAOF
as SLAVEOF
is deprecated - see manual
Nowadays you can also use MIGRATE, available since 2.6.
I had to use this since I only wanted to move the data in one database and not all of them. The two Redis instances live on two different machines.
If you can't connect directly to Redis-2 from Redis-1, use ssh port binding:
ssh [email protected] -L 1234:127.0.0.1:6379
A small script to loop all the keys using KEYS and MIGRATE each key. This is Perl, but hopefully you get the idea:
foreach ( $redis_from->keys('*') ) {
$redis_from->migrate(
$destination{host}, # localhost in my example
$destination{port}, # 1234
$_, # The key
$destination{db},
$destination{timeout}
);
}
See http://redis.io/commands/migrate for more info.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With