2. Master/Slave Master/Slave 是一种典型的备份方案,MongoDB 支持 One Master Multi Salver 和 Multi Master One Slave 等多种部署方式。 先从简单的 镜像备份 开始。 $ sudo mkdir -p /var/mongodb/0$ sudo mkdir -p /var/mongodb/1$ sudo ./mongod --for
2. Master/SlaveMaster/Slave 是一种典型的备份方案,MongoDB 支持 "One Master Multi Salver" 和 "Multi Master One Slave" 等多种部署方式。
先从简单的 "镜像备份" 开始。
$ sudo mkdir -p /var/mongodb/0 $ sudo mkdir -p /var/mongodb/1 $ sudo ./mongod --fork --logpath /dev/null --dbpath /var/mongodb/0 --master forked process: 1388 all output going to: /dev/null $ sudo ./mongod --fork --logpath /dev/null --dbpath /var/mongodb/1 --port 27018 --slave --source localhost:27017 --autoresync forked process: 1401 all output going to: /dev/null
autoresync 参数会在系统发生意外情况造成主从数据不同步时,自动启动复制操作 (同步复制 10 分钟内仅执行一次)。除此之外,还可以用 --slavedelay 设定更新频率(秒)。
使用 isMaster、printReplicationInfo、printSlaveReplicationInfo 等命令获取相关状态信息。
$ ./mongo > db.isMaster() { "ismaster" : true, "ok" : 1 } > db.printReplicationInfo() configured oplog size: 990MB log length start to end: 1164secs (0.32hrs) oplog first event time: Mon Aug 23 2010 12:23:54 GMT+0800 (CST) oplog last event time: Mon Aug 23 2010 12:43:18 GMT+0800 (CST) now: Mon Aug 23 2010 12:43:24 GMT+0800 (CST) $ ./mongo localhost:27018 > db.isMaster() { "ismaster" : false, "ok" : 1 } > db.printSlaveReplicationInfo() source: localhost:27017 syncedTo: Mon Aug 23 2010 12:43:58 GMT+0800 (CST) = 10secs ago (0hrs) > show dbs admin local test > use local switched to db local > show collections me pair.sync sources system.indexes > db.sources.find() { "_id" : ObjectId("4c71f8178d806ad3f54dd89a"), "host" : "localhost:27017", "source" : "main", "syncedTo" : { "t" : 1282538738000, "i" : 1 }, "localLogTs" : { "t" : 0, "i" : 0 } }
Slave 的配置信息保存在 local.sources 中。
通常我们会使用主从方案实现读写分离,但需要设置 Slave_OK。
$ ipython IPython 0.10 -- An enhanced Interactive Python. In [1]: from pymongo import * In [2]: m_conn = Connection() In [3]: s_conn = Connection(host="localhost:27018", slave_okay=True) In [4]: m_db = m_conn.test In [5]: s_db = s_conn.test # ----------------------------------------- # In [6]: m_db.users.insert({"name":"user3"}) Out[6]: ObjectId('4c71feb0499b140632000000') In [7]: s_db.users.find_one({"name":"user3"}) # 数据被复制到 Slave Out[7]: {u'_id': ObjectId('4c71feb0499b140632000000'), u'name': u'user3'} In [8]: m_db.users.remove({"name":"user3"}) # 删除 Master 数据 In [9]: for u in m_db.users.find(): print u ....: {u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'} In [10]: for u in s_db.users.find(): print u # Slave 记录被同步删除 ....: {u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'} # ----------------------------------------- # In [11]: s_db.users.insert({"name":"userx"}) # 在 Slave 插入数据 Out[11]: ObjectId('4c71ff2c499b140632000001') In [12]: for u in m_db.users.find(): print u # Master 上无该数据 ....: {u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'} In [13]: for u in s_db.users.find(): print u # Slave 同样没有 ....: {u'_id': ObjectId('4c71fa4d5e01e1ba6d62398f'), u'name': u'user1'}
可见 Slave 读操作正常,但写无效果。
我们还可以部署 "One Slave Two Master" 方案。
$ sudo mkdir -p /var/mongodb/m1 $ sudo mkdir -p /var/mongodb/m2 $ sudo mkdir -p /var/mongodb/s $ sudo ./mongod --fork --dbpath /var/mongodb/m1 --logpath /dev/null --master forked process: 1616 all output going to: /dev/null $ sudo ./mongod --fork --dbpath /var/mongodb/m2 --logpath /dev/null --port 27018 --master forked process: 1627 all output going to: /dev/null $ sudo ./mongod --fork --dbpath /var/mongodb/s --logpath /dev/null --port 27019 --slave forked process: 1638 all output going to: /dev/null
连接 Slave,添加配置。
$ ./mongo localhost:27019 MongoDB shell version: 1.6.1 connecting to: localhost:27019/test > use local switched to db local > db.sources.insert({host:"localhost:27017"}) > db.sources.insert({host:"localhost:27018"}) > db.printSlaveReplicationInfo() source: localhost:27017 syncedTo: Mon Aug 23 2010 13:06:03 GMT+0800 (CST) = 17secs ago (0hrs) source: localhost:27018 doing initial sync
在两台 Master 上添加数据,查看复制效果。
$ ./mongo localhost:27017 MongoDB shell version: 1.6.1 connecting to: localhost:27017/test > use db1 switched to db db1 > db.users.insert({name:"user1"}) > db.users.insert({name:"user2"}) > db.users.find() { "_id" : ObjectId("4c720211ade34e85c5380eab"), "name" : "user1" } { "_id" : ObjectId("4c720214ade34e85c5380eac"), "name" : "user2" } > exit bye
$ ./mongo localhost:27018 MongoDB shell version: 1.6.1 connecting to: localhost:27018/test > use db2 switched to db db2 > db.blogs.insert({title:"aaa"}) > db.blogs.insert({title:"bbb"}) > db.blogs.insert({title:"ccc"}) > db.blogs.find() { "_id" : ObjectId("4c720236f24118cb2f59218d"), "title" : "aaa" } { "_id" : ObjectId("4c720239f24118cb2f59218e"), "title" : "bbb" } { "_id" : ObjectId("4c72023cf24118cb2f59218f"), "title" : "ccc" } > exit bye
$ ./mongo localhost:27019 MongoDB shell version: 1.6.1 connecting to: localhost:27019/test > show dbs admin db1 db2 local > use db1 switched to db db1 > db.users.find() { "_id" : ObjectId("4c720211ade34e85c5380eab"), "name" : "user1" } { "_id" : ObjectId("4c720214ade34e85c5380eac"), "name" : "user2" } > use db2 switched to db db2 > db.blogs.find() { "_id" : ObjectId("4c720236f24118cb2f59218d"), "title" : "aaa" } { "_id" : ObjectId("4c720239f24118cb2f59218e"), "title" : "bbb" } { "_id" : ObjectId("4c72023cf24118cb2f59218f"), "title" : "ccc" } >
一切正常。

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

構建MySQL數據庫的步驟包括:1.創建數據庫和表,2.插入數據,3.進行查詢。首先,使用CREATEDATABASE和CREATETABLE語句創建數據庫和表,然後用INSERTINTO語句插入數據,最後用SELECT語句查詢數據。

MySQL適合初學者,因為它易用且功能強大。 1.MySQL是關係型數據庫,使用SQL進行CRUD操作。 2.安裝簡單,需配置root用戶密碼。 3.使用INSERT、UPDATE、DELETE、SELECT進行數據操作。 4.複雜查詢可使用ORDERBY、WHERE和JOIN。 5.調試需檢查語法,使用EXPLAIN分析查詢。 6.優化建議包括使用索引、選擇合適數據類型和良好編程習慣。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver Mac版
視覺化網頁開發工具