我想拍摄一个在应用程序www中运行的数据库的快照,并将其放入应用程序staging中。当我对克隆或创建/导入执行此操作时,所有数据都不可用。
我该怎么做呢?
matt@server:~$ dokku run www curl http://www:password@dokku-couchdb-www:5555/www
{"db_name":"www","doc_count":4966,"doc_del_count":232,"update_seq":46475,"purge_seq":0,"compact_running":false,"disk_size":3071180923,"data_size":334987077,"instance_start_time":"1500006610823893","disk_format_version":6,"committed_update_seq":46475}因此,您可以看到有4966个文档。
matt@server:~$ dokku couchdb:clone www staging_www
-----> Starting container
Waiting for container to be ready
=====> CouchDB container created: staging_www
DSN: http://staging_www:password@dokku-couchdb-staging-www:5555/staging_www
-----> Copying data from www to staging_www
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1110M 0 1110M 0 0 30.4M 0 --:--:-- 0:00:36 --:--:-- 31.9M
-----> Done因此,克隆中没有错误。然后我跑
dokku couchdb:link staging_www staging
dokku couchdb:promote staging_www staging并且没有错误,但是如果我检查数据库:
matt@server:~$ dokku run staging curl http://staging_www:password@dokku-couchdb-staging-www:5555/staging_www
{"db_name":"staging_www","doc_count":1,"doc_del_count":0,"update_seq":1,"purge_seq":0,"compact_running":false,"disk_size":4188,"data_size":342,"instance_start_time":"1509536857606369","disk_format_version":6,"committed_update_seq":1}文档计数为1,而我无法访问staging应用程序中的任何数据。
同样的,我也尝试过
dokku couchdb:export www > www.couch
dokku couchdb:create staging_www
dokku couchdb:import staging_www < www.couch
dokku couchdb:link staging_www staging
dokku couchdb:promote staging_www staging没有错误,但我最终在数据库中找到了1个文档。
我该怎么做?
发布于 2017-11-09 11:37:25
使用dokku 0.9.4和'dokku couchdb service plugin‘1.0.0
解决方案非常简单。在第一次尝试之后
root@dokku01:~# dokku couchdb:clone www staging_www
并且克隆db失败。你需要销毁staging_www
root@dokku01:~# dokku couchdb:destroy staging_www
再做一次克隆。
root@dokku01:~# dokku couchdb:clone www staging_www
现在它将像预期的那样工作。您可以使用以下命令检查新数据库
root@dokku01:~# curl -X GET 'http://staging_www:password@dokku-couchdb-staging-www:5555/staging_www/_all_docs?include_docs=true&attachments=true'
从www导出,然后在新创建的staging_www中导入转储也是可行的。
这是CouchDB插件中的一个错误,找出它的根本原因将是一件非常有趣的事情。
更新
此错误的根本原因是用于备份和还原'couchdb- backup‘的bash脚本。在某些情况下,脚本中的“curl调用”无法到达数据库,因此恢复操作不起作用。
克隆数据库是:创建新实例,导出(备份)旧数据,然后在新数据库中导入(恢复)该备份。
下面的脚本是来自couchdb服务插件的更新的'clone‘脚本。它对“couchdb-backup”导入怪癖的恢复能力更强。
#!/usr/bin/env bash
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_BASE_PATH/common/functions"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
service-clone-cmd() {
#E you can clone an existing service to a new one
#E dokku $PLUGIN_COMMAND_PREFIX:clone lolipop lolipop-2
#A service, service to run command against
#A new-service, name of new service
declare desc="create container <new-name> then copy data from <name> into <new-name>"
local cmd="$PLUGIN_COMMAND_PREFIX:clone" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1" NEW_SERVICE="$2" CLONE_FLAGS_LIST="${@:3}"
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
[[ -z "$NEW_SERVICE" ]] && dokku_log_fail "Please specify a name for the new service"
verify_service_name "$SERVICE"
PLUGIN_IMAGE=$(service_version "$SERVICE" | grep -o "^.*:" | sed -r "s/://g")
PLUGIN_IMAGE_VERSION=$(service_version "$SERVICE" | grep -o ":.*$" | sed -r "s/://g")
service_create "$NEW_SERVICE" "${@:3}"
dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE"
attempts=5
attemptcount=0
R=2
succ_str=' Successfully.'
until [[ $R = 0 || $R = 1 ]]; do
attemptcount=$((attemptcount+1))
STDOUT1=$(service_export "$SERVICE" | service_import "$NEW_SERVICE" 2>&1) || true
if [[ ! "$STDOUT1" = *"${succ_str}" ]]; then
if [ $attemptcount = $attempts ]; then
R=1
echo -e "\nERROR: CouchDB Import failed - Stopping\n"
else
echo -e "\nWARN: CouchDB Import Reported an error - Attempt ${attemptcount}/${attempts} - Retrying...\n"
sleep 1
fi
else
R=0
fi
done
dokku_log_info1 "Done"
exit $R
}
service-clone-cmd "$@"/var/lib/dokku/plugins/available/couchdb/subcommands/clone上的旧版本应该替换为这个新版本。
发布于 2017-11-04 21:08:00
我通常只使用couchdb dokku插件found here
简单易用
https://stackoverflow.com/questions/47055971
复制相似问题