服務器上MongoDB安裝
1 下載MongoDB數據庫,官網地址:http://www.mongodb.org/downloads
2 將下載好的安裝包mongodb-linux-x86_64-2.4.9.tgz通過Xftp工具傳到服務器上的特定目錄下(如:/home/xp/usr/local)
3 將壓縮包解壓,tar xzvf mongodb-linux-x86_64-2.4.9.tgz
4 新建目錄 mongodb 目錄, 用來存放mongodb 數據庫 和 日誌文件
命令:
mkdir mongodb;
cdmongodb;
mkdir db; // 存放數據庫的文件夾
mkdir log ; //存放數據庫日誌文件的文件夾
5 切換到解壓好的 mongodb-linux-x86_64-2.4.9 目錄下,進入 bin 目錄
6 執行 mongod 程序,該程序用來啓動MongoDB的數據庫服務器
一般格式如下:
./mongod--dbpath=/home/xp/usr/local/mongodb/db
--logpath=/home/xp/usr/local/mongodb/log/MongoDB.log
--logappend
--port=27017
--fork
參數解釋:
--dbpath:
數據庫的數據目錄,即新建的mongodb/db文件夾。
--port
端口號,默認端口號是27017。
--fork
以守護進程的方式運行MongoDB。
--logpath
指定日誌輸出路徑,而不是輸出到命令行。如果對文件夾有寫權限的話,系統會在文件不存在時創建它。它會將已有文件覆蓋掉,清除所有原來的日誌記錄。如果想保留原來的日誌,還需要使用--logappend選項。
--logappend
以append方式添加日誌到日誌文件。
7 還可以設置開機自動啓動。把啓動mongodb的啓動命令添加到/etc/rc.local即可,最好使用絕對路徑。
8 Mongod 程序正常啓動會出現:
about to fork child process, waiting untilserver is ready for connections.
forked process: 29517
all output going to: /home/xp/usr/local/mongodb-linux-x86_64-2.4.9/log
child process started successfully, parent exiting
9 測試mongod 是否成功啓動。
檢查端口是啓動,端口爲:27017
命令:netstat –lanp | grep 27017
在bin文件夾下,執行mongo查看安裝是否成功。命令:./mongo
10 啓動mongod過程中遇到的錯誤。Erro number 如果顯示爲 1 ,則說明 權限不夠,需要切換到root,再啓動mongod 程序。
11 常見mongodb數據庫基本操作命令。
瞭解mongodb數據庫基本操作命令最簡單的辦法是進入mongo shell 後打開幫助系統。
命令:
>help
>db.help()
常見的命令有:
1、show dbs
顯示當前數據庫服務器上的數據庫
2、use my_mongodb
切換到指定數據庫my_mongodb的上下文,可以在此上下文中管理my_mongodb數據庫以及其中的集合等
3、show collections
顯示數據庫中所有的集合(collection)
4、db.serverStatus()
查看數據庫服務器的狀態
5、db.user.insert()
插入操作,對應關係數據庫的insert操作。
數據批量導入MongoDB
雖然mongodb數據庫提供了導入數據的工具mongoimport,但由於mongodb只支持JSON和BSON格式的數據,所以要將只是以空格符爲分隔符的數據通過mongoimport 導入數據庫是不可行的。解決辦法是用腳本批量插入,缺點是時間長。
程序基本思路:1、連接數據庫 2、對日誌文件分析處理後逐條插入
腳本使用python編寫,需要預先安裝pymongo包。
其中很多輸出顯示不是必要的,可以刪除。
源碼:
#!/usr/bin/env python
#encoding:utf-8
###################################
# function: analysis the log in the '.' dir to JSON , and
#output the data to the MongoDB.
# data: 2014/3/31
#History: 1.0
###################################
import os
import pymongo
def connect_mongodb():
servers="mongodb://localhost:27017"
conn = pymongo.Connection(servers)
print conn.database_names()
db = conn.my_mongodb #連接庫
return db
def str_process(string,db):
d={}
if string == '\n':
return
string2=str(string)
print '-----'+string
string2=string2.split(' ')
print '---------------'
print string2
for i in string2:
print i
print '------------'
string2[3].split('\n')
d['projectcode']=string2[0]
d['pagename']=string2[1]
d['pageview']=string2[2]
d['bytes']=string2[3][:-1]
db.user.insert(d)
def file_process(source_file,db):
string2=''
f=open(source_file,'r')
print 'file name :'+source_file
while True:
string2=f.readline()
if string2 == '':
break
string2=str_process(string2,db)
print string2
def get_dir_list(dir): #input the dir ,will output the all filename
dat0=[]
for i in os.listdir(dir):
dat0.append(i)
return dat0
def all_file_process():
dir_file_name=''
dir_list=[]
dir_file_name=raw_input('please input the dir name:')
dir_list=get_dir_list(dir_file_name)
print dir_list
db=connect_mongodb()
for i in dir_list:
if str(i) != 'log_file_process.py':
file_process(str(i),db)
all_file_process()
注意的地方:
用的環境是用Xshell 連接到服務器,而且腳本執行週期長,最好使程序在後臺跑。
主要是可以防止網絡掉線或關機,中斷了數據的導入,導致需要重新執行程序。
命令:
nohup ./log_file_process.py &>/dev/null 2> &