redisをAWS ElastiCacheに移行した
オンプレredisに乗ってるデータをAWSに移行した時のメモ ※redis初心者です
- redisはnot cluster
- 一部のデータベースのデータのみ移行
- ttl含む
- 参考(↓) stackoverflow.com
手元のPC(mac)を経由して移行
A(オンプレ) -> PC -> B(AWS)
#!/bin/bash source_host=A source_port=6379 source_db=1 target_host=B target_port=6379 target_db=1 redis-cli -h $source_host -p $source_port -n $source_db keys \* | while read key do ttlmilli=$(( $(redis-cli -h $source_host -p $source_port -n $source_db ttl "$key")*1000 )) redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key"| /usr/local/opt/coreutils/libexec/gnubin/head -c-1| redis-cli -x -h $target_host -p $target_port -n $target_db RESTORE "$key" "$ttlmilli" done
この方法だとttlが無限だとエラーになるのでよしなに
僕の場合は、無限のものは無視してOKだったのでそのまま実行した
macのheadコマンドとgnu版でオプションが違ったのでgnu版をインストールするのぢゃ
- ループ回数がエグくて時間かかった
- 僕の場合、valが文字列だったので、わざわざdumpしなくても良く、一度コマンドリスト作ってから実行すればもっと早く終わったなぁと思った
- 移行終わってからmigrateコマンドがあることを知った