복붙노트

[REDIS] 어떻게 레디 스 ''DUMP`와`RESTORE` (오프라인)을 사용 하는가?

REDIS

어떻게 레디 스 ''DUMP`와`RESTORE` (오프라인)을 사용 하는가?

나는 파일 (또는 파이프)로 레디 스의 DUMP 명령, 리디렉션을 시도했지만이 오류를보고 복원

$ redis-cli dump test > /tmp/test.dump
$ cat /tmp/test.dump | redis-cli -x restore test1 0
(error) ERR DUMP payload version or checksum are wrong
$ redis-cli dump test | redis-cli -x restore test1 0
(error) ERR DUMP payload version or checksum are wrong

나는 MIGRATE 온라인이 작업을 수행 할 수 있지만, MIGRATE는 원래 서버에서 해당 키를 삭제하는 것이 알고, 나는 내 레디 스 공용 인터넷에 노출하고 싶지 않아요.

이 예를 들어 일부 타사 옵션, 레디 스-RDB-도구가 있지만, 모든 후, 정확히 어떻게 DUMP을하고 작업을 복원?

해결법

  1. ==============================

    1.직렬화 형식은 (는 RDB 덤프에 사용 된 것과 같은 하나) 바이너리이기 때문에 덤프 / 복구 명령은 정말, 명령 줄에서 사용할 수 있도록 설계되어 있지 않습니다. 그것은 쉘 (이하 "인쇄"형식을 사용하는 경우에도) 해당 문자를 해석하는 경향이 있기 때문에 불편합니다.

    직렬화 형식은 (는 RDB 덤프에 사용 된 것과 같은 하나) 바이너리이기 때문에 덤프 / 복구 명령은 정말, 명령 줄에서 사용할 수 있도록 설계되어 있지 않습니다. 그것은 쉘 (이하 "인쇄"형식을 사용하는 경우에도) 해당 문자를 해석하는 경향이 있기 때문에 불편합니다.

    여기에 "인쇄"형식은 다음과 같습니다

    $ redis-cli lpush test 1 2 3 4 5
    (integer) 5
    $ redis-cli dump test
    "\n\x15\x15\x00\x00\x00\x12\x00\x00\x00\x05\x00\x00\xf6\x02\xf5\x02\xf4\x02\xf3\x02\xf2\xff\x06\x00\x1c\x8a\xda\x0e}\xcb\xe1."
    

    은 "인쇄"형식은 정말 실제 데이터를 기대 -x 옵션에 대한 입력으로 사용할 수 없습니다. 이 레디 스-CLI의 잘못된 동작입니다.

    그러나, 원시 포맷을 취득 할 수있는 쉬운 방법이있다 :

    $ redis-cli --raw dump test | hexdump -C
    00000000  0a 15 15 00 00 00 12 00  00 00 05 00 00 f6 02 f5  |................|
    00000010  02 f4 02 f3 02 f2 ff 06  00 1c 8a da 0e 7d cb e1  |.............}..|
    00000020  2e 0a                                             |..|
    

    마지막 문자가 잘못 때문에 지금, 그것은는에서 --raw 덤프의 결과가 복원 -x 직접 파이프 할 수 없습니다. --raw 및 인쇄 덤프의 출력을 비교. 당신은 --raw 옵션은 마지막에 추가 \ n을 추가 알 수 있습니다. 원시 옵션은 100 % 원료입니다 ;-)

    이 여분의 문자는 데이터가 -x 옵션으로 처리 할 수 ​​있습니다 전에 제거해야합니다. 마지막으로,에서 덤프의 출력이 복원 파이프 (GNU / 리눅스 시스템에 대한) 정확한 명령은 다음과 같습니다

    $ redis-cli --raw dump test | head -c-1 | redis-cli -x restore test1 0
    OK
    

    이것은 꽤 없습니다. 나는 대부분의 사람들이 펄 / 파이썬 / 루비 스크립트가 아니라 같은 작업을 수행 할 수있는 쉘의 의존 할 것으로 예상된다.

  2. from https://stackoverflow.com/questions/16127682/how-to-use-redis-dump-and-restore-offline by cc-by-sa and MIT license