2012年2月 的存檔

使用nslookup查詢域名服務器

2012年2月29日 沒有評論

nslookup最簡單的用法就是能夠查詢出域名對應的IP地址,適用于A記錄或CNAME記錄。如果需要知道域名的解析服務器是誰,也可以使用nslookup,但是需要加參數,這個命令是window、linux自帶的,但是在參數的表述上有些不相同,例如:

//用法:
nslookup 參數 域名

//window 用法
nslookup -qt=ns netingcn.com

//linux 用法
nslookup -type=ns netingcn.com

注意:如果不帶參數,就是查詢域名對應的IP,查詢域名解析服務器的域名是自己頂級域名,不要加www。

mysqldump 每條記錄都用insert

2012年2月28日 沒有評論

默認情況下,使用mysqldump備份出來的表記錄都是在一條insert語句,這樣對于導入來說效率要高些,但是遇到記錄很多的大表,可能會超過緩存區的大小,從而導致備份失敗,可以使用參數實現一條記錄一個insert語句,例如:

mysqldump -uroot -p --skip-opt dbname > bak.sql

Mongodb 備份與恢復

2012年2月23日 沒有評論

可以使用Mongodb自帶的mongodump和mongorestore工具來實現數據庫的備份和恢復。其用法比較簡單,可以使用如下命令來獲取幫助信息:

mongodump --help

mongorestore --help

備份使用命令mongodump,如果執行該命令不帶任何參數,會把本機上運行的在默認端口的mongodb中的除local數據庫外的所有數據庫備份下來,存放在當前執行命令的目錄下的dump(如果不存在該目錄會自動創建)目錄中,并按照數據庫的名字存放在不同的不同的目錄下,例如有個數據庫名為test,那么其備份的文件存放的位置為./dump/test目錄下。大部分情況下,我們可能不會這么干,那么可以通過-d來指定需要備份的數據,-o來指定備份存放的位置,同時可以使用-h來指定需要備份的主機地址。例如:

mongodump -h 127.0.0.1:27017 -d atagdata -o /data/dump
或
mongodump -h 127.0.0.1 --port 27017 -d atagdata -o /data/dump
備份本機上的atagdata數據庫中的所有collections到/data/dump目錄中
每個collections都是以一個文件獨立存在,存放路徑為/data/dump/atagdata/collections_name.bson

mongodump -h 192.168.1.211 --port 27017 -d atagdata -o /data/dump
備份遠程數據庫到本地

mongodump -h 127.0.0.1:27017 -d atagdata -c log_01 -o /data/dump
備份atagdata數據庫中collections名為log_01的數據

注意:備份不能一次指定多個數據庫,也不能一次指定多個collections,也就是說,要么一次備份下來所有數據庫,要么一次只備份一個指定的庫,同理,在指定了數據庫的情況下,要么全部備份該庫下的所有collections,要么只備份指定的一個collections,所以要想只備份幾個指定的庫或collections時,可以多次執行備份命令,修改其數據庫名或collections名即可。另外如果數據庫需要認證,可以使用-u和-p來指定用戶名和密碼。

上述用mongodump備份下來的文件,可以通過mongorestore來進行恢復。可以mongodb實例沒有啟動的情況下執行恢復操作,這個時候必須使用dbpath來指定存放恢復數據的目錄,另外可以使用directoryperdb來指定數據庫的數據文件是否按文件夾來區分;當然在mongodb已經啟動情況下,也是可以執行恢復操作的,這時候dbpath參數不是必須的,如果指定dbpath,那么dbpath不能指定為當前mongodb實例相同的dppath,反之mongorestore會根據當前運行的實例獲取dbpath、directoryperdb信息,把備份數據恢復當前的mongodb的dbpath中。例如:

mongorestore /data/dump/
把/data/dump/下所有數據庫恢復到當前mongodb中,數據庫名字跟備份時名字相同

mongorestore -d test /data/dump/test
恢復test數據庫到當前mongodb中test數據庫

mongorestore -d new_test /data/dump/test
恢復test數據庫到當前mongodb中,并且數據庫的名字為new_test

mongorestore -d test --drop /data/dump/test
使用drop參數,在恢復前會刪除已有的collections

mongorestore --dbpath /data/db_1 --directoryperdb --drop /data/dump/
把/data/dump/下所有數據庫恢復到/data/db_1目錄中,數據庫名字跟備份時名字相同

PHP strtotime 性能問題

2012年2月22日 沒有評論

在php中對一個有五萬多個元素的數組進行遍歷同時做一些簡單的邏輯運算,發生耗時居然達到了13秒之多,通過排發現耗時的操作都是在strtotime上,使用strtotime把字符串“2012-02-22 10:07:34”轉化為秒形式。開始以為就是strtotime的效率有問題,后來突然想起來,如果在PHP 5中,如果沒有顯式的設置timezone,php會有一個警告信息,猜測造成strtotime耗時的原因就是php需要處理警告,在php.ini中設置date.timezone = PRC 后在測試,果然不需要那么久了。

總結:在php 5后需要設置timezone,否則可能在進行日期、時間操作函數造成性能問題,另外在錯誤日志會出現大量的警告信息。

分類: PHP 標簽:

MongoDB Replica Set 配置

2012年2月21日 沒有評論

Replica Set 節點類型分為三種:

  • standard:常規節點,它存儲一份完整的數據副本,參與選舉投票,有可能成為primary節點;
  • passive:存儲了完整的數據副本,參與投票,不能成為primary節點;
  • arbiter:仲裁節點,只參與投票,不接收復制的數據,也不能成為primary節點。

本文配置使用2個常規節點和一個arbiter節點,arbiter節點由于不同步數據,所以負載會很小,部署對硬件沒有太大的要求。

假設192.168.1.211、192.168.1.212為常規節點,192.168.1.68為arbiter節點。三個節點上的mongodb都是用下面的配置文件,文件存放在/etc/mongodb.cnf:

dbpath = /data/db/
logpath = /data/log/m.log
logappend = true
port = 27017
fork = true
directoryperdb = true
journal = true
replSet = test
rest = true

其中replSet 的 Id 為 test,這個值對應initiate中的”_id”,使用rest參數后可以在web管理界面中顯示Replica Set中其他mongodb實例的信息。

使用命令

/usr/local/mongodb/bin/mongod --config /etc/mongodb.cnf

分別啟動三個機器上的mongodb實例,使用mongodb客戶端登陸兩個常規節點中的任何一個,執行如下命令:

rs.initiate(
	{"_id" : "test",
	 "members" : [
		{"_id" : 1, "host" : "192.168.1.211"},
		{"_id" : 2, "host" : "192.168.1.212"},
		{"_id" : 3, "host" : "192.168.1.68", "arbiterOnly" : true}
	]
});

或

rs.initiate(
	{"_id" : "test",
	 "members" : [
		{"_id" : 1, "host" : "192.168.1.211"},
		{"_id" : 2, "host" : "192.168.1.212"}
	]
});

rs.addArb('192.168.1.68');

可以使用rs.conf()查看配置情況,rs.status()查看各個節點的狀態,經過一小段時間后,他們會選一臺作為PRIMARY,其他的常規節點為SECONDARY,同時在js shell中看到提示符從“>”變為對應的 “PRIMARY>” 或 “SECONDARY>” 或 “ARBITER>”。可以在PRIMARY是通過rs.stepDown()來切換PRIMARY,執行此命令后會在剩余的常規節點選一個來充當PRIMARY。

關于初始化中配置members的其他可選參數,可以到官網上查看,地址:http://www.mongodb.org/display/DOCS/Replica+Set+Configuration

MongoDB的啟動和停止腳本

2012年2月20日 1 條評論

Mongodb腳本:把命令行的內容保存到一個文件中,把該文件放在/usr/bin(或任何系統設置的PATH路徑中)下,就可以直接用該文件來啟動或停止服務了。

本人比較傾向把啟動mongodb的參數放在配置文件中,直觀且便于管理,例如把參數寫入/etc目錄下的mongodb.cnf文件中,參數設置如下:

#configuration Options for MongoDB
#
# For More Information, Consider:
# - Configuration Parameters: http://www.mongodb.org/display/DOCS/Command+Line+Parameters
# - File Based Configuration: http://www.mongodb.org/display/DOCS/File+Based+Configuration
dbpath = /data/db/
logpath = /data/log/m.log
logappend = true

#bind_ip = 127.0.0.1
port = 27017
fork = true
#auth = true
noauth = true
directoryperdb = true
journal = true

可以使用命令:

/usr/local/mongodb/bin/mongod --config /etc/mongodb.cnf

來啟動mongodb,所以啟動腳本就可以這么寫

#!/bin/sh

/usr/local/mongodb/bin/mongod --config /etc/mongodb.cnf

假設該文件命名為mongodb-start,存放于/usr/bin下,現在就可以直接用mongodb-start來啟動服務了,注意,該文件要有執行的權限。

停止mongodb服務腳步如下:

#!/bin/bash

pid=`ps -o pid,command ax | grep mongod | awk '!/awk/ && !/grep/ {print $1}'`;
if [ "${pid}" != "" ]; then
    kill -2 ${pid};
fi

其實就是通過ps、grep、awk命令找到mongod的進程號,在通過kill來關閉mongod服務,當然查詢進程號的命令還有很多,任取一種即可,例如:

ps -C mongod -f | grep mongod |tr -s ' ' | cut -d ' ' -f 2
或
ps aux | grep mongod | grep -v "grep" | awk -F" "  '{print $2}'

Centos中配置NFS

2012年2月20日 沒有評論

NFS服務器端需要安裝nfs-utils和portmap這兩個安裝包,同時要確保nfs、portmap服務啟動。把需要共享出去的目錄添加在/etc/exports文件中,格式為:

服務器上共享的目錄  客戶端主機名稱1或IP1(參數1,參數2) 客戶端主機名稱2或IP2(參數3,參數4)

注意:可以在一條中設置多個客戶端,也可以使用字碼的方式來確定某一個網段的客戶機,例如:192.168.1.0/24,參數和前面的ip之間沒有空格,可以指定多個參數,可用的參數如下:

  • rw:可讀寫的權限;
  • ro:只讀權限
  • no_root_squash:客戶端登陸 NFS 主機使用共享目錄的使用者,如果是 root 的話,那么對于這個共享的目錄來說,他就具有 root 的權限,這個參數可能造成安全隱患
  • root_squash:客戶端登陸 NFS 主機使用共享目錄的使用者,如果是 root 的話,那么這個使用者的權限將被壓縮成為匿名使用者,通常他的 UID 與 GID 都會變成 nobody 那個系統賬號的身份;
  • all_squash:不論客戶端登陸 NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是 nobody ;
  • anonuid:前面關于 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody,但是您可以自行設定這個 UID 的值,當然,這個 UID 必需要存在于您的 /etc/passwd 中;
  • anongid:同 anonuid ,但是變成 group ID 就是了;
  • sync:數據同步寫入到內存與硬盤當中;
  • async:數據會先暫存于內存當中,而非直接寫入硬盤。

需要說明的是通過rw設置的讀寫權限還需要根據當前登錄的用戶來判斷,例如使用參數(rw,root_squash),假設服務器的上的目錄owner是用戶 test ,且目錄權限是744,這樣的話,客戶端mount上的共享文件還是沒有寫的權限。對于權限這一塊比較搞人,最簡單的辦法是使用參數(rw,no_root_squash),這樣,只要客戶端是使用root登陸的,那么它mount上的共享目的就有一切權限了。

例如把服務器端目錄/data/nfs-dir-192.168.1.211共享給ip為192.168.1.211的客戶端,配置如下:

/data/nfs-dir-192.168.1.211     192.168.1.211(rw,sync,no_root_squash)

這樣就配置完成了,啟動portmap和nfs服務(service port start、service nfs start 或 /etc/init.d/portmap start、/etc/init.d/nfs start),可以通過命令exportfs -v查看共享的目錄。修改了配置文件后,在不重啟nfs服務的情況下也可以使用exportfs -r來使新的配置生效。

客戶端使用mount命令就可以把服務器端的共享目錄mount到本地,例如把上述服務器端的目錄mount到本地的/data目錄上:

mount -t nfs 192.168.1.68:/data/nfs-dir-192.168.1.211/ /data

可以把上述命令加入到/etc/rc.local中,這樣重啟后會自動掛載服務器的共享目錄到本地。

分類: Linux 標簽: ,

linux下MongoDB開機自啟動的問題

2012年2月17日 沒有評論

按照常理,把如下命令

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb

放在/etc/rc.local文件中就可以實現開機自啟動了,第一次重啟機器發現mongodb順利啟動了,再次重啟機器后,通過ps沒有查看到相應mongod進程,也就是啟動失敗了。原因是由于重啟機器,導致非正常停止mongod服務,mongod.lock中還記錄了上次運行的進程號,為了數據的安全需要執行 /usr/local/mongodb/bin/mongod –repair,當然如果直接把mongod.lock文件刪除也可以重新啟動了,例如:

/usr/local/mongodb/bin/mongod --repair
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb

或
rm -rf /data/db/mongod.lock
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb

注意上述啟動Mongodb都是沒有增加journal參數,如果帶了此參數就不會那么麻煩了,例如

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb --journal

就可以了,就算是非正常重啟機器,mongodb也會根據日志去修復數據庫的。

另外,如果mongodb的數據目錄是通過mount的NFS文件夾,自啟動好像有問題的。

分類: Linux, MongoDB 標簽:

python 中強制轉換long型為int型

2012年2月16日 沒有評論

python的int型最大值和系統有關,32位和64位系統看到的結果是不一樣,分別為2的31次方減1和2的63次方減1,可以通過sys.maxint查看此值。

python2.4版本以后,如果int的值超出范圍不會溢出,而是內部轉換為long,找了很久似乎沒有從long型強制轉換成int,這里所說的int取值范圍是和java里一致,即用四個字節表示。代碼如下:

def longToInt(value):
	if value > 2147483647 :
		return (value & (2 ** 31 - 1))
	else :
		return value

通過測試,在32位和64位上運算結果一致,另外2 ** 31 – 1換成常量2147483647對性能有微小的提升。

分類: Python 標簽:

centos中安裝PyMongo庫

2012年2月15日 沒有評論

PyMongo庫提供了python操作mongodb的接口,如果要用python來操作mongodb,就必須安裝PyMongo。安裝有很多方法,這里介紹兩種。

源碼安裝:

PyMongo的源碼存放在git庫中,可以使用git下載到本地,git的安裝參照:http://www.twubdg.tw/centos-git.html,安裝命令如下:

git clone git://github.com/mongodb/mongo-python-driver.git pymongo
cd pymongo/
python setup.py install

使用easy_install安裝:

easy_install是一個工具,不是系統自帶,需要安裝,它的作用類似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan。安裝命令如下:

wget -q http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py

使用安裝PyMongo命令為:

easy_install pymongo
分類: Python 標簽: ,

無覓相關文章插件,快速提升流量

30选5怎么中奖