Valentin Lab
1 year ago
1 changed files with 120 additions and 0 deletions
-
120mongo/README.org
@ -0,0 +1,120 @@ |
|||
#+TITLE: Mongo Charm |
|||
|
|||
* Quick information |
|||
|
|||
** Upgrade |
|||
|
|||
|
|||
Since 4.0.6 based on alpine 3.9, alpine is not packaging mongo |
|||
anymore. So we use the official version (that is huge). We still |
|||
must change entrypoint to enforce proper directory paths. |
|||
|
|||
A ``Dockerfile`` is provided for this mean. |
|||
|
|||
You can fetch latest official tags: |
|||
#+begin_quote |
|||
docker-tags-fetch mongo -l 10 -f '^[0-9]+\.[0-9]+\.[0-9]+$' |
|||
#+end_quote |
|||
|
|||
change it in docker file, then |
|||
|
|||
#+begin_quote |
|||
docker build . -t docker.0k.io/mongo:"$TAG"-myc |
|||
#+end_quote |
|||
|
|||
|
|||
** General Access |
|||
|
|||
You can access mondo db, if running, through |
|||
|
|||
|
|||
#+begin_src sh |
|||
SERVICENAME=mongo |
|||
compose exec "$SERVICENAME" /usr/bin/mongo --quiet --eval "some js code" |
|||
#+end_src |
|||
|
|||
if not running, you might want to run it. |
|||
|
|||
|
|||
The following could be added to actions |
|||
|
|||
*** list databases |
|||
|
|||
|
|||
#+begin_src sh |
|||
SERVICENAME=mongo |
|||
compose exec -T mongo /usr/bin/mongo --quiet \ |
|||
--eval "JSON.stringify(db.adminCommand({listDatabases: 1}))" | \ |
|||
jq -r '.databases[] | .name' |
|||
#+end_src |
|||
|
|||
|
|||
*** Dump database |
|||
|
|||
This one will use the probably already builded image from your project on your |
|||
host to run a competing mongo with a host directory to store the dump. |
|||
|
|||
#+begin_src sh |
|||
PROJECTNAME=myc |
|||
SERVICENAME=mongo |
|||
docker run --rm --name mongo_client -ti \ |
|||
-v /tmp/mongo:/tmp/mongo --network "${PROJECTNAME}_default" \ |
|||
-u root \ |
|||
--entrypoint /bin/sh "${PROJECTNAME}_$SERVICENAME" |
|||
#+end_src |
|||
|
|||
Then inside docker: |
|||
|
|||
#+begin_src sh |
|||
apk add mongodb-tools |
|||
#+end_src |
|||
|
|||
Then for each databases: |
|||
|
|||
#+begin_src sh |
|||
DBNAME="xxx" |
|||
cd /tmp/mongo |
|||
mongodump -h mongo -d "$DBNAME" -o mdump/ |
|||
#+end_src |
|||
|
|||
|
|||
*** Drop database |
|||
|
|||
|
|||
#+begin_src sh |
|||
DBNAME=xxx |
|||
PROJECTNAME=myc |
|||
SERVICENAME=mongo |
|||
docker exec -i "${PROJECTNAME}_${SERVICE}_1" /usr/bin/mongo --quiet < \ |
|||
<(echo " |
|||
use $DBNAME; |
|||
db.dropDatabase(); |
|||
") |
|||
#+end_src |
|||
|
|||
Note: if some connection are active to the database, it might not be |
|||
deleted, you should check by relisting the database. |
|||
|
|||
|
|||
|
|||
*** Restore database |
|||
|
|||
|
|||
#+begin_src sh |
|||
SOURCE_DIR=/tmp/gogocarto |
|||
docker run --rm -ti \ |
|||
-v "$SOURCE_DIR":/tmp/backups/gogocarto \ |
|||
-w /tmp/backups \ |
|||
--entrypoint mongorestore \ |
|||
--network myc_default \ |
|||
myc_mongo \ |
|||
--host rs01/mongo /tmp/backups/ |
|||
#+end_src |
|||
|
|||
There should not have any errors. |
|||
|
|||
Please note that '/tmp/backups' in the last example should contain |
|||
one directory per database. |
|||
|
|||
Note also that you should drop database (see previous section) prior |
|||
to restore them. |
Reference in new issue
xxxxxxxxxx