# IT明星不是夢 # 使用Python部署MongoDB

案例:使用Python部署MongoDB

案例中將會用到各類與系統管理相關的標準庫,包括os、os.path、shutil、tarfile和subprocess模塊。python

MongoDB下載地址以下:linux

wget https://fastdl.mongodb.org/linux/mongodb-linux-s390x-rhel72-4.3.3.tgz

建立目錄,傳入MongoDB軟件包,扁你邪惡python腳本,而且建立一個mongodata目錄用來保存MongoDB的數據庫文件。mongodb

1)建立目錄,導入軟件包

[root@localhost ~]# mkdir MongoDB
[root@localhost ~]# cd MongoDB/
[root@localhost MongoDB]# ls

# IT明星不是夢 # 使用Python部署MongoDB

2)編寫腳本

[root@localhost MongoDB]# vim deploy_mongo.py
#!/usr/bin/python
#-*- coding:utf-8 -*-

from __future__ import print_function
import os
import shutil
import tarfile
import subprocess

def execute_cmd(cmd):
    p = subprocess.Popen(cmd,
                        shell=True,
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE)
    stdout,stderr =p.communicate()
    if p.returncode !=0:
        return p.returncode,stderr
    return p.returncode,stdout

def unpackage_mongo(package, package_dir):
    unpackage_dir = os.path.splitext(package)[0]
    if os.path.exists(unpackage_dir):
        shutil.rmtree(unpackage_dir)
    if os.path.exists(package_dir):
        shutil.rmtree(package_dir)

    t = tarfile.open(package, 'r:gz')
    t.extractall('.')

    shutil.move(unpackage_dir, package_dir)

def create_datadir(data_dir):
    if os.path.exists(data_dir):
        shutil.rmtree(data_dir)
    os.mkdir(data_dir)

def format_mongod_command(package_dir, data_dir, logfile):
    mongod = os.path.join(package_dir,'bin','mongod')
    mongod_format ="""{0} --fork --dbpath {1} --logpath {2}"""
    return mongod_format.format(mongod, data_dir, logfile)

def start_mongod(cmd):
    returncode,out = execute_cmd(cmd)
    if returncode !=0:
        raise SystemExit('執行{0} 錯誤:{1}'format.(cmd, out.decode()))
    else:
        print('執行命令 ({0})成功。'.format(cmd))

def main():
    package = 'mongodb-linux-x86_64-rhel70-4.2.3.tgz'
    cur_dir = os.path.abspath('.')
    package_dir = os.path.join(cur_dir, 'mongo')
    data_dir = os.path.join(cur_dir, 'mongodata')
    logfile = os.path.join(data_dir, 'mongod.log')

    if not os.path.exists(package):
        raise SystemExit('{0} 沒找到'.format(package))

    unpackage_mongo(package, package_dir)
    create_datadir(data_dir)
    start_mongod(format_mongod_command(package_dir, data_dir, logfile))

if __name__ == '__main__':
    main()

執行腳本shell

[root@localhost MongoDB]# python deploy_mongo.py 
執行命令 (/root/MongoDB/mongo/bin/mongod --fork --dbpath /root/MongoDB/mongodata --logpath /root/MongoDB/mongodata/mongod.log)成功。
[root@localhost MongoDB]# ls

# IT明星不是夢 # 使用Python部署MongoDB

代碼說明:數據庫

  1. 在這段程序中,首先在main函數中定義了幾個變量,包括當前目錄的路徑、MongoDB二進制文件所在的路徑、MongoDB數據目錄所在的路徑,以及MongoDB的日誌文件。
  2. 隨後,判斷MongoDB的安裝包是否存在,若是不存在,則經過拋出SystemExit異常的方式結束程序。
  3. 在unpackage_mongo函數中,經過Python程序獲得MongoDB安裝包解壓之後的目錄。若是目錄已經存在,則刪除該目錄。隨後,使用tarfile解壓MongoDB數據庫,解壓完成後,將命令重命名爲mongo目錄。
  4. 在create_datafir目錄中,首先判斷MongoDB數據庫目錄是否存在,若是存在,則刪除該目錄,隨後再建立MongoDB數據庫目錄。
  5. 在start_mongod函數中,執行MongoDB數據庫的啓動命令啓動MongoDB數據庫。爲了在Python代碼中執行shell命令,使用了subprocess庫。將subprocess庫執行shell命令的邏輯封裝成execute_cmd函數,在執行shell命令時,直接調用該函數便可。

訪問測試:vim

[root@localhost MongoDB]# cd mongo/bin/
[root@localhost bin]# ./mongo
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f4240c88-11c6-4144-be74-8f72b10caec6") }
MongoDB server version: 4.2.3
Welcome to the MongoDB shell.
.....
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
相關文章
相關標籤/搜索