MongoDB ל DBA ומפתחים הלכה למעשה – חלק ב - ilDBA Portal

MongoDB ל DBA ומפתחים הלכה למעשה – חלק ב

16/02/2016 | פורסם על ידי

בחלק הקודם הצגתי לכם את היתרונות העיקריים של MongoDB וקצת מבוא ל-JSON ו-BSON. בחלק הזה נתחיל לדבר קצת על התכלס: איך מתקינים, איך מתחילים לעבוד ואיך מעלים את שרת ה-MongoDB. במאמר נדבר על התקנה בסביבה של Windows אבל חשוב לציין ש-MongoDB קיים גם ב-Linux (ואפילו יותר נפוץ בו).

התקנה של MongoDB ושימוש ב Shell

המבנה של MongoDB דומה לזה של RSBMS: לשניהם יש database. טבלה ב RDBMS מקבילה ל-Collection ב MongoDB כאשר שורה ב RDBMS הוא document ב MongoDB. ב-Mongo shell ניתן לרשום פקודות Database שונות: למשל פקודות ספירה (count) שמוצאת את מספר ה documents ב collection. בנוסף, ניתן לבצע פקודות אדמיניסטרציה כמו הפקודה copydb המעתיקה DB Instance. בהמשך אדגים נראה כיצד מבצעים מתוך ה-shell ניהול ה DB ואחזור נתונים ב 3 אופנים:

  • Database commands
  • Mongo shell JavaScript helper methods
  • Mongo shell help methods

התקנה של MongoDB 3.2.0, Standalone

לצורך הנוחות נדגים במאמר זה עבודה עם MongoDB על גבי Windows, כך שתוכלו לתרגל זאת במחשב האישי שלכם. קובץ ההתקנה של MongoDB 3.2. עבור מערכת הפעלה Windows הוא mongodb-win32-x86_64-2008plus-ssl-3.2.0-signed.msi. בכול מקרה יש להוריד את הגרסה המתאימה מהכתובת :

http://www.mongodb.org/downloads

במידה והייתה התקנה קודמת של MongoDB ויצרו Service עבור MongoDB יש לבצע לו stop לפני ההתקנה. רק אז יתאפשר לגשת למחיצה בה מותקנים קבצי ה Data וה Log של MongoDB ולבצע לה שינוי שם או מחיקה.

ההתקנה תעשה באופן הבא : יש לבחור בקובץ ההתקנה, מקש ימני ולבחור ב Run As Administrator. ההתקנה היא פשוטה. בסיום ההתקנה יש להוסיף את מחיצת ה Bin ש ל MongoDB למשתנה path של מערכת ההפעלה (למשל D:\Program Files\MongoDB\Server\3.2\bin).

מחיצת ה- Bin של MongoDB

לאחר ההתקנה של MongoDB, במחיצת ה- bin, בדוגמא D:\Program Files\MongoDB\Server\3.2\bin, יהיה קבצי האפליקציה הבאים, שזהים עבור Linux ו- Windows. הנה הפירוט שלהם בקצרה :

Application         Function
-----------         ---------------------------------------------------------------
bsondump            Reads contents of BSON-formatted rollback files.
mongo               The database shell.
mongod              The core database server.
mongodump           Database backup utility.
mongoexport         Export utility (JSON, CSV, TSV), not reliable for backup.
mongofiles          Manipulates files in GridFS objects.
mongoimport         Import utility (JSON, CSV, TSV), not reliable for recoveries.
mongooplog          Pulls oplog entries from another mongod instance.
mongoperf           Check disk I/O performance.
mongorestore        Database backup restore utility.
mongos              Mongodb shard process.
mongosniff          Sniff/traces MongoDB database activity in real time, Unix-like systems only.
mongostat           Returns counters of database operation.
ngotop              Tracks/reports MongoDB read/write activities.
mongorestore        Restore/import utility.

mongo1

הרצה של MongoDB Enterprise

הקמת הסביבה

מחיצת ההתקנה של MongoDB היא D:\Program Files\MongoDB\Server\3.2.MongoDB דורש מחיצה עבור המידע. מחיצת ברירת מחדל היא \data\db. אנחנו ניצור את המחיצות הבאות ידנית או ע"י הפקודה md.

מחיצה עבור קובץ הקונפיגורציה :

D:\mongodb

מחיצה עבור קבצי ה- DBs :

D:\mongodb\data\db

מחיצה עבור קובץ ה- log :

D:\mongodb\data\log

אפשר להגדיר מחיצה אלטרנטיבית ע"י האופציה –dbpathשל mongod.exe. דוגמא :

D:\mongodb\bin\mongod.exe --dbpath d:\test\mongodb\data

אם שם הנתיב מכיל רווחים, יש להשתמש בגרשיים כפולים. דוגמא :

D:\mongodb\bin\mongod.exe --dbpath "d:\test\mongo db data"

אפשר לציין את dbpath בקובץ הקונפיגורציה. בהמשך.

העלאה תהליך MongoDB ה- Database

בשביל להתחיל את רכיב השרת הראשי של MongoDB database שנקרא mongod, יש להריץ את mongod.exe מ – cmd. במקרה שלנו :

"D:\Program Files\MongoDB\Server\3.2\bin\mongod.exe"

אנו נעלה את רכיב השרת עם הערכים המתאימים עבור הפרמטרים –dbpath ו –logpath באופן הבא :

C:\>"D:\Program Files\MongoDB\Server\3.2\bin\mongod.exe" --dbpath=D:\mongodb\data\db --logpath D:\mongodb\log\mongod.log

אם זה לא פעם ראשונה שהעלינו את התהליך של mongodb, לקובץ ה Log הקודם יתבצע שינוי שם ותוספת התאריך, וייווצר קובץ mongod.log חדש במחיצה D:\mongodb\log. נקבל את ההודעה הבאה :

2016-01-06T11:38:10.769+0200 I CONTROL [main] log file "D:\mongodb\log\mongod.log" exists; moved to "D:\mongodb\log\mongod.log.2016-01-06T09-38-10".

אם בסוף קובץ ה log D:\mongodb\log\mongod.log, נקבל את ההודעה waiting for connections זה סימן שהתהליך mongod.exe רץ בהצלחה.
mongo2

אם לא נשתמש בפרמטרים –dbpath ו –logpath עם ערכי מחיצות שלא קימות נקבל את ההודעה הבאה בחלון ה CMD:

2016-01-05T16:52:06.584+0200 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory D:\db not found., terminating
2016-01-05T16:52:06.584+0200 I CONTROL [initandlisten] dbexit: rc: 100

[h2]יצירה קובץ קונפיגורציה עבור MongoDB[/h2]

הפקדות הבאות מייצרות קובץ קונפיגורציה עם D:\mongodb\mongod.cfg עם הפרמטרים logpath ו dbpath.

echo logpath=D:\mongodb\log\mongod.log > "D:\mongodb\mongod.cfg"
echo dbpath= D:\mongodb\data\db >> "D:\mongodb\mongod.cfg"

את תוכן הקובץ mongod.cfg נוכל לראות ע"י הפקודה type באופן הבא :

type "D:\mongodb\mongod.cfg"

mongo3
[h2]יצירה של MongoDB service[/h2]

אנחנו רוצים ש MongoD יעלה באופן אוטומאטי. אם יצרנו service בשם MongoDB בתקנות קודמות נמחק אותו באופן הבא:

C:\>sc.exe delete mongodb

פלט במידה ונמחק ה service :

[SC] DeleteService SUCCESS

mongo4
את ה- service של MongoDB ניתן ליצור ע"י הפקודה sc עם האופציה create. מתוך cmd נוכל לראות את האופציות השונות ע"י הרצת הפקודה sc.exe create.

את ה- service של MongoDb נוכל ליצור באופן הבא :

sc.exe create MongoDB binPath= "\"D:\Program Files\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"D:\mongodb\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

אם יצירת ה Service הצליחה הפלט יהיה

[SC] CreateService SUCCESS

את service של MongoDB נוכל להוריד ולהעלות ע"י הפקודות net stop ו net start בהתאמה . דוגמא :

C:\> net start MongoDB
The MongoDB service was started successfully.

C:\>net stop Mongodb
The MongoDB service is stopping..
The MongoDB service was stopped successfully.

mongo5

מובן שאפשר לבצע את כל הפעילות הנ"ל ב כמובן שאפשר לבצע זאת ב PowerShell. קובץ ה-log מוגדר בפרמטר logpath שמוגדר בקובץ הקונפיגורציה. במקרה שלנו : logpath=D:\mongodb\log\mongod.log . קובץ זה יוןצר מחדש כל פעם שנעלה MongoDB. קובץ ה- log הנוכחי mongod.log, קבצי ה- log הקודמים יהיה בפורמט mongod.log.DDDD-MM-DDTHH-MM-SS למשל : mongod.log.2016-01-05T14-52-06.
mongo6
כדי לדעת אם MongoDB עלה בהצלחה ניפתח את קובץ ה- log mongod.log. בסופו צ"ל רשום

[initandlisten] waiting for connections on port 27017

אם ננסה להפעיל את mongodb למרות שה- service למעלה נקבל את ההודעה הבאה

2016-01-07T10:00:24.892+0200 E NETWORK [initandlisten] listen(): bind() failed errno:10048 Only one usage of each socket address (protocol/network address/port) is normally permitted. for socket:.0.0:27017

mongo7

התחברות ל MongoDB ע"י  ה Mongo Shell.

בשביל להתחבר ל MongoDB דרך mongo.exe נפתח חלון cmd אחר.

"D:\Program Files\MongoDB\Server\3.2\bin\mongo.exe"

mongo8
נקבל הודעה מהסוג

Hotfix KB2731284 or later update is not installed, will zero-out data files

אחת הסיבות לקבלת ההודעה הזו היא ש MongoDB מותקן על מחיצה עם רווחים בשם כמו D:\Program Files\MongoDB\Server\3.2. אם זו הסיבה אפשר להתעלם מההודעה. אם הסיבה לכך היא שהמחיצה D:\data\db לא קיימת, יש ליצור את המחיצה.

בשביל לפתוח mongo shell בלי להתחבר נבצע :

>mongo –nodb

לאחר מכן נפתח Connection ע"י שימוש ב Constructor של JavaScript : Mongo(). בררת המחדל שלו הוא localhost ופורט 27017.

>connection=new Mongo()

getDB() הוא method ב Mongo shell שמאפשר לקבוע עם איזה DB נעבוד. אם בסיס נתונים test לא היה קיים הוא יוותר האופן אוטומאטי.

>db=connection.getDB("test")

שימוש ב Mongo(), שהוא constructor, הוא שימושי אם מתחברים לשרת ופורט שהם לא בררת מחדל. למשל מטעמי אבטחה. לחילופין ניתן להשתמש ב method בשם connect שמאפשרת להתחבר ל MongoDB ב MongoDB Shell אחרי שהתחברנו ל mongo shell עם האופציה mongo –nodb.

>db = connect("localhost:27017/test");

mongo9
להתראות בחלק הבא!

The following two tabs change content below.

דוד יצחק

דוד יצחק , DBA אפליקטיבי ותשתיתי של SQL Server, Oracle ,Sybase Anywhere מזה 17 שנה עם התמחות בשיפור ביצועים, שרידות, זמינות גבוהה, רפלקציה, תוספים גיאוגרפיים, אבטחת מידע ו-Business Intelligence. הוא מרכז את פורום DBA צפון של ilOUG ומרצה בפורום משתמשי SQL Server.

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

MongoDB ל DBA ומפתחים הלכה למעשה

אין טעם לחזור ולספר מה החשיבות של בסיסי נתונים Nosql. על פי הסקרים האחרונים בין ה Nosql מסוג Document DB, MongoDB הוא המוביל. בסדרה זו אני אציג ניהול של MongoDB דרך ה Shell וכלי הניהול החדשים של גרסה 3.2. בהקשר של [...]
http://hadoop.apache.org

עולם ה-Big Data ופתרון ה- Hadoop

זהר אלקיים במאמר מעניין בנושא Big Data [...]
Copyright 2017 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: