數據庫的啓動和停止是數據庫最基本的操作,也是數據庫能夠提供服務和被連接管理的前提條件。不同的數據庫啓動和停止的方式有一些差異,但也有相同之處,啓動和關閉也必定會和數據庫的進程有關。
在oracle數據庫中,數據庫的啓動和停止都是分三個過程的,正常的啓動方法都是在sqlplus中執行startup命令啓動,或者shutdown immediate命令關閉數據庫;
在一些特殊的情況下,會通過shutdown abort或者kill後臺進程的方式強制關閉數據庫;
在MySQL數據庫中,數據庫的啓動也是通過mysqld或者mysqld_safe命令加配置文件的方式進行啓動,關閉時使用mysqladmin工具加shutdown選項的命令進行mysql數據庫的正常關閉;
通過確認kill進程的方式與shutdown命令的方式停止過程相同,也可以通過kill進程的方式實現mysql的關閉;
對於MongoDB數據庫的啓動和停止,可以通過下面的方法進行研究:
啓動MongoDB
進入MongoDB安裝目錄
# cd mongodb-linux-x86_64-2.*.*
執行下面的命令啓動MongoDB
# ./bin/mongod --port 33334 --fork --logpath data/log/mongodb.log --dbpath data/db
啓動相關參數說明如下:
--port 啓動端口號
--fork 以守護進行方式啓動
--logpath mongodb 日誌輸出路徑
--dbpath mongodb 數據文件路徑
其他選項可以執行命令查看: ./bin/mongod --help
操作演示:
編寫MongoDB啓動文件:
vim start.sh 腳本內容如下:
cd mongodb-linux-x86_64-2.*.*
./bin/mongod --port 33334 --fork --logpath data/log/mongodb.log --dbpath data/db
停止腳本啓動:
chmod +x start.sh
./start.sh
執行結果出現 start sucessful ,說明mongod啓動完成,可以通過下面兩種方式確認MongoDB啓動過程:
確認進程:
$ ps -axu | grep mongo
確認日誌:
cd /data/log
tail -f mongodb.log
安全停止MongoDB進程
向MongoDB進程發送信號用於停止MongoDB,如果要安全停止可以有兩種信號:sigint 信號,或者 sigterm信號
如何停止:
$ kill -2 8888
其中 8888 爲mongod進程號 ,該進程號可以通過 ps -axu |grep mongo 獲取;
-2 表示向mongod進程發送sigint信號
$ kill -4 8888
其中 8888 爲mongod進程號 ,該進程號可以通過 ps -axu |grep mongo 獲取;
-4 表示向mongod進程發送sigterm信號
上面2種方式如何做到停止安全
mongod進程收到sigint信號或者sigterm信號,會做一些處理:
關閉所有打開的連接;
將內存數據強制刷新到磁盤;
當前的操作執行完畢;
。。。。
安全停止
除了上面兩種直接針對進程的停止方式,還有使用mongod命令shutdown的安全停止方式:
> use admin; --使用管理員數據庫
> db.shutdownServer();
不安全的停止方式有:
$ kill -9 8888
其中 8888 爲mongod進程號 ,該進程號可以通過 ps -axu |grep mongo 獲取;
-9 表示向mongod進程發送sigkill信號,MongoDB直接停止,不會做一些相關處理;
數據庫直接關閉;
數據丟失;
數據文件損壞;
修復數據庫(成本高,有風險)
通過上面的分析可以看出,MongoDB的啓動過程和其他數據庫類似,主要是校驗數據庫文件的一致性,一般不會有太多風險,只要數據庫能夠正常啓動即可;
對於MongoDB的停止,可以通過mongo工具中的shutdown命令安全停止,也可以在查詢到MongoDB進程號後,使用kill -2,kill -4 兩種方式實現相同的安全停止方式;
如果對MongoDB使用kill -9的方式,則是不安全的停止方式,有可能造成各種問題;
而安全停止和不安全停止的區別在於:安全停止在發出停止命令後,數據庫在後臺會進行一系列的操作來保證數據庫最終是一致性關閉;
但如果是不安全停止,則數據庫進程直接沒有,數據庫不會再後臺做一系列的操作保證一致性關閉,下次啓動時,就有可能發生各種問題。