2014-04-22 6 views

Antwort

18

Wenn Sie nicht MIGRATE COPY wegen Ihrer redis Version verwenden, können Sie möglicherweise jede Taste einzeln kopieren möchten, welche dauert länger, aber Sie müssen sich nicht bei den Computern selbst anmelden und können Daten von einer Datenbank in eine andere verschieben. Hier ist, wie ich alle Schlüssel aus einer Datenbank in eine andere kopieren (aber ohne Konservierungs TTLS)

#set connection data accordingly 
source_host=localhost 
source_port=6379 
source_db=0 
target_host=localhost 
target_port=6379 
target_db=1 

#copy all keys without preserving ttl! 
redis-cli keys \* | while read key; do echo "Copying $key"; redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key" | head -c -1|redis-cli -x -h $target_host -p $target_port -n $target_db RESTORE "$key" 0; done 

Schlüssel werden nicht overwriten werden würde, denn das ist der Schlüssel löschen, bevor das Kopieren oder die gesamte Datenbank bündig vor dem Start.

+0

Für redis-Versionen> 2.6 können Sie den Migrationsbefehl 'redis-cli keys \ * | verwenden während Leseschlüssel; echo "Copying $ key"; abc = "MIGRATE localhost 1234 $ key 0 5000 COPY"; redis-cli "MIGRATE localhost 1234 $ key 0 5000 COPY"; done' –

+0

Ich habe [eine Liste, die auch Authentifizierung und TTL unterstützt] erstellt (https://gist.github.com/nicStuff/ee7feb8eed00174a46db42812545b403). @uditmittal das ist toll, bedenke sowieso, dass MIGRATE die Authentifizierung nicht einmal in der Version 3.2 unterstützt. – reallynice

0

Nicht direkt. Ich würde vorschlagen, das immer bequeme redis-rdb-tools-Paket (von Sripathi Krishnan) zu verwenden, um die Daten von einem normalen rdb-Speicherauszug zu extrahieren und es erneut in eine andere Instanz zu schreiben.

Siehe https://github.com/sripathikrishnan/redis-rdb-tools

+0

Neben Didier Antwort: wenn Sie diese online tun und inkrementell können Sie eine Kombination aus ['SCAN'] (http://redis.io/commands/scan) und [' MIGRATE'] (http://redis.io/commands/migrate) verwenden –

-1

Versuchen dump zuerst alle Schlüssel entleeren und dann zur Wiederherstellung der gleichen

+0

Ich versuche das aber Fehler beim Wiederherstellen in der Anforderung db.Its zeigen den Fehler-Target Key-Name ist beschäftigt. – Subo

+1

Dies liegt möglicherweise daran, dass dieser Schlüsselname bereits in der Zieldatenbank vorhanden ist. Versuchen Sie, eine neue Datenbank zu erstellen, und stellen Sie dann die freigegebenen Schlüssel wieder her. Stellen Sie außerdem sicher, dass die db während der Wiederherstellung ordnungsgemäß umgeschaltet wird und nicht die vorherige ist, was zu einem Konflikt führen kann. –

0

Soweit ich verstehe, was Sie brauchen Schlüssel aus einem bestimmten DB (z 5) zu einem bestimmten DB sagen 10. kopieren Wenn das der Fall ist, Sie redis Datenbank dumper (https://github.com/r043v/rdd) verwenden können. Obwohl laut Dokumentation hat es einen Schalter (-d) zur Auswahl einer Datenbank für den Betrieb, aber nicht für mich, so was ich getan habe

1.) Bearbeiten Sie die rdd.c Datei und suchen Sie nach Int Haupt (int argc, char argv) Funktion
2.) ändern Sie den DB als pro Ihre Anforderung
3.) kompilieren Sie das src von ** machen

4.) Dump alle Tasten ./rdd -o "save.rdd"
5.) Editieren Sie die rdd.c-Datei erneut und ändern Sie den DB
6.) Stellen Sie erneut
Import7.) durch mit ./rdd "save.rdd" -o es "IP" -p "Port"

0

Ich weiß, das ist alt einfügen, aber für diejenigen von Ihnen, hierher zu kommen bilde Google :

Ich habe gerade eine Befehlszeilenschnittstelle Dienstprogramm zu Npm und Github veröffentlicht, mit dem Sie Schlüssel kopieren können, die ein bestimmtes Muster (gerade *) von einer Redis-Datenbank zu einer anderen entsprechen.

können Sie das Dienstprogramm finden Sie hier:

https://www.npmjs.com/package/redis-utils-cli

0
redis-cli -a $source_password -p $source_port -h $source_ip keys /*| while read key; 
do echo "Copying $key"; 
redis-cli --raw -a $source_password -h $source_ip -p $source_port -n $dbname DUMP "$key"| head -c -1| redis-cli -x -a $destination_password -h $destination_IP -p $destination_port RESTORE "$key" 0; 
0

Kopiert alle Schlüssel aus der Datenbank Nummer 0 bis Datenbank Nummer 1 auf localhost.

redis-cli --scan | xargs redis-cli migrate localhost 6379 '' 1 0 copy keys

Wenn Sie den gleichen Server/Port Sie einen Timeout-Fehler erhalten, aber die Tasten scheinen erfolgreich sowieso zu kopieren.GitHub Redis issue #1903

0

Wenn Tasten innerhalb des gleichen redis Motors, dann könnten Sie die internen Gebrauch Befehl MOVE für das (Pipelining für mehr Geschwindigkeit) Migration:

#!/bin/bash 

#set connection data accordingly 
source_host=localhost 
source_port=6379 
source_db=4 
target_db=0 

total=$(redis-cli -n 4 keys \* | sed 's/^/MOVE /g' | sed 's/$/ '$target_db'/g' | wc -c) 
#copy all keys without preserving ttl! 
time redis-cli -h $source_host -p $source_port -n $source_db keys \* | \ 
    sed 's/^/MOVE /g' | sed 's/$/ 0/g' | \ 
    pv -s $total | \ 
    redis-cli -h $source_host -p $source_port -n $source_db >/dev/null 
Verwandte Themen