redis-shake4迁移数据(蛮好用)
redis-shake下载地址:https://github.com/tair-opensource/RedisShake/releases
测试环境redis需要从公有云迁移到私有云,就用redis-share测试一下。
下载后解压(就两个文件,执行文件和配置文件):
[root@gcv-x-test-sharedb-oracle redis]# cat shake.toml ##我只需要复制db0得数据,然后目标库存到db42 function = """ shake.log(DB) if DB == 1 then return end local db1 = 0 local db2 = 42 if DB == db1 then DB = db2 elseif DB == db2 then DB = db1 end shake.call(DB, ARGV) """ ##需要PSync 协议,但是一般云厂商都是禁用了SYNC和PSYNC命令 #[sync_reader] #cluster = false # set to true if source is a redis cluster #address = "10.27.137.74:6379" # when cluster is true, set address to one of the cluster node #username = "" # keep empty if not using ACL #password = "xxxxxx" # keep empty if no authentication is required #tls = false #sync_rdb = true # set to false if you don't want to sync rdb #sync_aof = true # set to false if you don't want to sync aof ##我只能用这个模式scan [scan_reader] cluster = false # set to true if source is a redis cluster address = "10.27.137.74:6379" # when cluster is true, set address to one of the cluster node username = "" # keep empty if not using ACL password = "xxxxx" # keep empty if no authentication is required ksn = false # set to true to enabled Redis keyspace notifications (KSN) subscription tls = false # [rdb_reader] # filepath = "/tmp/dump.rdb" [redis_writer] cluster = false # set to true if target is a redis cluster address = "10.251.93.8:6379" # when cluster is true, set address to one of the cluster node username = "" # keep empty if not using ACL password = "5xxx" # keep empty if no authentication is required tls = false [advanced] dir = "data" ncpu = 2 # runtime.GOMAXPROCS, 0 means use runtime.NumCPU() cpu cores pprof_port = 0 # pprof port, 0 means disable status_port = 0 # status port, 0 means disable # log log_file = "shake.log" log_level = "info" # debug, info or warn log_interval = 5 # in seconds # redis-shake gets key and value from rdb file, and uses RESTORE command to # create the key in target redis. Redis RESTORE will return a "Target key name # is busy" error when key already exists. You can use this configuration item # to change the default behavior of restore: # panic: redis-shake will stop when meet "Target key name is busy" error. # rewrite: redis-shake will replace the key with new value. # ignore: redis-shake will skip restore the key when meet "Target key name is busy" error. rdb_restore_command_behavior = "panic" # panic, rewrite or skip # redis-shake uses pipeline to improve sending performance. # This item limits the maximum number of commands in a pipeline. pipeline_count_limit = 1024 # Client query buffers accumulate new commands. They are limited to a fixed # amount by default. This amount is normally 1gb. target_redis_client_max_querybuf_len = 1024_000_000 # In the Redis protocol, bulk requests, that are, elements representing single # strings, are normally limited to 512 mb. target_redis_proto_max_bulk_len = 512_000_000 # If the source is Elasticache or MemoryDB, you can set this item. aws_psync = "" # example: aws_psync = "10.0.0.1:6379@nmfu2sl5osync,10.0.0.1:6379@xhma21xfkssync" [module] # The data format for BF.LOADCHUNK is not compatible in different versions. v2.6.3 <=> 20603 target_mbbloom_version = 20603
然后执行即可:
日志:
工具蛮好用的,简单易懂实用。
参数和原理可看官网说明,写的蛮清楚得。https://tair-opensource.github.io/RedisShake/zh/guide/introduction.html