forked from 0k/0k-charms
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. |
Write
Preview
Loading…
Cancel
Save
Reference in new issue