كيف يمكنك تنفيذ تفريغ قاعدة بيانات نيو 4 جي داخل حاوية عامل ميناء?

يتم تشغيل حاوية عامل الميناء ل نيو 4 جي كما في الوثائق وتعمل بشكل صحيح باستخدام الأمر التالي:

$ docker run \    --detach \    --publish=7474:7474 \    --publish=7473:7473 \    --publish=7687:7687 \    --volume=$HOME/neo4j/data:/data \    --volume=$HOME/neo4j/logs:/logs \    --volume=$HOME/neo4j/ssl:/ssl \    --ulimit=nofile=40000:40000 \    --name=myname-neo4j \    neo4j:3.1.1

عندما أحاول إجراء neo4j-admin تفريغ قاعدة البيانات أحصل على خطأ:

$ docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dumpcommand failed: the database is in use -- stop Neo4j and try again

ومع ذلك ، إذا تم إيقاف عملية نيو 4 ، والتي يبدو أنها الطريقة الوحيدة لتحرير قاعدة البيانات ، يتم إغلاق الحاوية. يبدو أن هذا هو السلوك المتوقع من عامل الميناء. لذلك ، يبدو أنه من المستحيل الاتصال neo4j-admin dump من داخل الحاوية دون استخدام قاعدة البيانات.

كيف يمكن حل هذا مع الاستمرار في استخدام عامل الميناء?

1: إيقاف الحاوية.

docker stop myname-neo4j

2: إزالة الحاوية

docker rm myname-neo4j

3: تشغيل الحاوية كما وضع تفاعلي (- ذلك) دون خيار (فصل) وتنفيذ قذيفة (/بن/باش ).

docker run \--publish=7474:7474 \--publish=7473:7473 \--publish=7687:7687 \--volume=$HOME/neo4j/data:/data \--volume=$HOME/neo4j/logs:/logs \--volume=$HOME/neo4j/ssl:/ssl \--ulimit=nofile=40000:40000 \--name=myname-neo4j \-it \neo4j:3.1.1 \-c /bin/bash

أنت الآن داخل حاوية نيو 4 جي دون تشغيل الأجسام القريبة من الأرض.

4: تأكد من أن الأجسام القريبة من الأرض لا تصل من خلال زيارة نقطة نهاية أوري في (http://yourhost:7474). يجب أن ترى رسالة" غير قادر على الاتصال".

5: تفريغ قاعدة البيانات الخاصة بك

docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dump

فعلت هذا:

docker stop [neo4j container]    docker run --name dump --entrypoint="/bin/bash" -it -v $HOME/neo4j/data:/data neo4j:3.1.1 -c "neo4j-admin dump --to=/data/db.dump"    docker start [neo4j container]

ثم يمكنك إما الحفاظ على & مثل; تفريغ & مثل; الحاويات وإعادة استخدامها, أو مجرد إزالته. سيتم تطبيق نفس المفهوم مع معلمة نقطة الدخول و-ج لإجراء التحميل.

عن طريق الصدفة انها الآن أسهل بكثير للقيام بذلك في نيو 4ج 4.0 لأنه يمكنك إيقاف وبدء قواعد البيانات دون الحاجة إلى إغلاق حاوية عامل الميناء كله.

حتى إذا أردنا أن تأخذ تفريغ قاعدة بيانات تسمى 'فو' ،ونحن نفعل ما يلي:

STOP DATABASE foodocker exec -it our-neo4j-container neo4j-admin dump --database=foo --to=/tmp/foo.db.dumpdocker cp our-neo4j-container:/tmp/foo.db.dump .START DATABASE foo

كتب أيضا على النحو بلوق وظيفة - https://markhneedham.com/blog/2020/01/28/neo4j-database-dump-docker-container/

كان لي نفس المشكلة من قبل ، لذلك كتبت هذا الحل لتفريغ البيانات نيو 4ج وسحبه خارج الحاوية إلى الجهاز المضيف.

docker rm --force neo4j-dumpdocker run \--name neo4j-dump \--env-file /storage/bin/.neo4j.env \--mount type=bind,source=<neo4j_data_folder>,target=/data \neo4j:3.1.1 bin/neo4j-admin dump --database=graph.db --to=/graph.db.dumpdocker cp `docker ps -aqf "name=neo4j-dump"`:/graph.db.dump <target_dump_file>docker rm --force neo4j-dump

سيؤدي ذلك إلى إنشاء حاوية جديدة وتفريغ البيانات بدلا من بدء خدمة نيو 4ج ، ثم نسخ التفريغ إلى المضيف ، فقط تحديث وإلى لك