1. 程式人生 > >mongodb全庫備份與恢復

mongodb全庫備份與恢復

一次伺服器異常事件導致mongodb服務掛掉無法重啟,報錯資訊:

2017-10-10T14:35:16.078+0800 I NETWORK  [initandlisten] connection accepted from 192.168.1.52:55362 #4 (2 connections now open)
2017-10-10T14:35:16.111+0800 I QUERY    [conn4] query chelun.cw_user_position query: { $query: { uid: "22014082" }, $comment: "This is a query comment", $orderby: {} } planSummary: IXSCAN { uid: 1.0 } ntoreturn:999999 ntoskip:0 nscanned:1 nscannedObjects:1 keyUpdates:0 writeConflicts:0 numYields:1 nreturned:1 reslen:468 locks:{} 31ms
2017-10-10T14:35:16.166+0800 F -        [conn4] Invalid access at address: 0x7fe6e3645038
2017-10-10T14:35:16.195+0800 F -        [conn4] Got signal: 7 (Bus error).

 0xf662c9 0xf65942 0xf65c9e 0x7ff2f79787e0 0x7ff2f64636d5 0x7ff2f6ca5886 0xd2981c 0xd4902c 0xd50ad6 0xd49976 0x9046cc 0xc3f001 0xc3df09 0xa32f4c 0xa33705 0xbd54a4 0xbd5854 0xbd5e8d 0x9a7e29 0x9a919c 0x9a96db 0x9ac11d 0x9d0a04...skipping...

查詢了資料,這種情況是mongodb異常關閉導致出錯,嘗試使用repair修復沒有成功,找尋各種啟動修復方法也均沒有成功。好在服務不是核心業務,利用從庫的備份(或者定期的備份資料)來恢復到一個新的庫;

1、新建mongodb例項

假定服務埠定位27027,配置檔案如下:

bind_ip=192.168.xx.xx
#指定伺服器監聽的埠,預設是27017
port=27027

#以守護程序的方式執行MongoDB
fork=true

objcheck=true

#2G
#oplogSize=2000

#pidfile
pidfilepath=/home/LBSUser/pidfile/mongo_27027.pid

#指定資料目錄,預設是/data/db/。每個mongod程序都需要獨立的目錄,
#啟動mongod時就會在資料目錄中建立mongod.lock檔案,防止其他mongod程序使用該資料目錄。
dbpath=/data/LBSdb

#指定日誌輸出路徑,如果不指定則會在終端輸出。每次啟動都會覆蓋原來的日誌,如果不想覆蓋就要用--logappend選項
logpath=/data/log/mongodb_27027.log

logappend=true

master=true

#auth=true

profile=2

slowms=1

#only:預設為空,用於從選項,指定一個數據庫進行復制
#only=test


#.禁止HTTP狀態介面
nohttpinterface=true
#.禁止REST介面-在生產環境下建議不要啟用MongoDB的REST介面
rest=false

#keyFile=/home/LBSUser/etc/keyfile

指定配置檔案啟動mongodb服務:
mongod -f /home/LBSUser/LBSmongo/mongodb.conf

(這裡從庫或者叢集搭建略)

搭建好後,準備資料

二、匯出資料

從原例項的從庫節點中匯出最新的資料備份(原埠是27017)

mongodump -h 192.168.xx.xx --port 27017 --oplog -o /data/backup/tmp27107/
匯出記錄:
2017-10-10T15:11:59.215+0800[#######################.]  xx.cw_user_position  19578438/20169757  (97.1%)
2017-10-10T15:12:02.215+0800[#######################.]  xx.cw_user_position  19834340/20169757  (98.3%)
2017-10-10T15:12:05.215+0800[#######################.]  xx.cw_user_position  20113312/20169757  (99.7%)
2017-10-10T15:12:05.645+0800writing xx.cw_user_position metadata to /data/backup/tmp27107/xx/cw_user_position.metadata.json
2017-10-10T15:12:05.653+0800done dumping xx.cw_user_position
2017-10-10T15:12:05.654+0800writing captured oplog to /data/backup/tmp27107/oplog.bson

看到這個後確認匯出成功。

三、使用mongorestore匯入資料

mongorestore匯入資料可以指定庫匯入,我這個直接全量匯入,不指定庫:

mongorestore -h 192.168.xx.xx:27027 -d chelun --dir /data/backup/tmp27107/
注意這裡是直接匯入到我們新的機器上的新例項27027了。
2017-10-10T15:40:28.345+0800[#######################.]  xx.cw_user_position  8.0 GB/8.2 GB  (97.6%)
2017-10-10T15:40:31.345+0800[#######################.]  xx.cw_user_position  8.0 GB/8.2 GB  (97.9%)
2017-10-10T15:40:34.345+0800[#######################.]  xx.cw_user_position  8.0 GB/8.2 GB  (98.2%)
2017-10-10T15:40:37.345+0800[#######################.]  xx.cw_user_position  8.1 GB/8.2 GB  (98.5%)
2017-10-10T15:40:40.345+0800[#######################.]  xx.cw_user_position  8.1 GB/8.2 GB  (98.8%)
2017-10-10T15:40:43.345+0800[#######################.]  xx.cw_user_position  8.1 GB/8.2 GB  (99.1%)
2017-10-10T15:40:46.345+0800[#######################.]  xx.cw_user_position  8.1 GB/8.2 GB  (99.3%)
2017-10-10T15:40:49.345+0800[#######################.]  xx.cw_user_position  8.2 GB/8.2 GB  (99.6%)
2017-10-10T15:40:52.345+0800[#######################.]  xx.cw_user_position  8.2 GB/8.2 GB  (99.9%)
2017-10-10T15:40:53.621+0800restoring indexes for collection xx.cw_user_position from metadata


2017-10-10T15:44:46.613+0800finished restoring xx.cw_user_position
2017-10-10T15:44:46.613+0800restoring users from /data/backup/tmp27107/admin/system.users.bson
2017-10-10T15:44:47.294+0800done
我的資料有點大,匯入時間稍長。

根據匯入的提示,確認匯入都成功了;

四、登陸檢查

做基礎檢查和抽樣檢查

[[email protected] data]# mongo 192.168.xx.xx:27027
MongoDB shell version: 3.0.1
connecting to: 192.168.xx.xx:27027/test
Server has startup warnings:
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten]
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten] ** WARNING: You are running on a NUMA machine.
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten] **          We suggest launching mongod like this to avoid performance problems:
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten] **              numactl --interleave=all mongod [other options]
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten]
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten]
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-10-10T15:12:13.752+0800 I CONTROL  [initandlisten]
> db.system.users.find()
> use admin
switched to db admin
> db.system.users.find()
> db.system.users.find()
{ "_id" : "admin.xx_user", "user" : "xx_user", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "IJUswtPOEvJ1qffHjACQIQ==", "storedKey" : "FoVPjbzw74bcs+8WCShuvluA7ssrU=", "serverKey" : "bQd4TlULaxd/6BMLQHoQtvInNJOw=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
> show dbs;
admin      0.078GB
xx    13.947GB
local      2.077GB
xx2   0.078GB

相關推薦

mongodb備份恢復

一次伺服器異常事件導致mongodb服務掛掉無法重啟,報錯資訊: 2017-10-10T14:35:16.078+0800 I NETWORK [initandlisten] connection accepted from 192.168.1.52:55362 #4

rman管理的備份恢復&使用者管理的備份恢復

1.rman全庫備份: RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; run{ allocate channel c1 type disk; backup database format 'E:\rman2\fulldb_T%T_S%S'; release ch

通過Xtrabackup實現MySQL實例的備份按需單恢復

第二部分 arch tin pri var ins img 備份文件 數據庫的還原 在實際的生產環境中,為了管理方便,我們一般是通過 Xtrabackup實現實例的全庫備份,即將實例上的所有數據庫備份。 但是,考慮到快速恢復 我們常常面臨的需求是快速還原單個數據庫。針對初

mysql數據備份恢復

system ase inux color charsets blog 註釋 更新 create mysqldump -u 用戶名 -p 數據庫名> 備份的文件名 本文中因服務器為多實例,所以在執行登陸等命令時指定了-S參數,即指定其中一個數據庫 備份: mysql

XtraBackup備份恢復MySQL數據

備份 mysql xtrabackup 防偽碼:沒有相當程度的孤獨是不可能有內心的平和。1、概述Percona XtraBackup(簡稱PXB)是 Percona 公司開發的一個用於 MySQL 數據庫物理熱備的備份工具,支持 MySQl(Oracle)、Percona Server 和 Mar

Mysql數據備份恢復--Xtrabackup

mysql innodb xtrabackupMysql數據庫備份與恢復 背景: 作為一個運維工程師,經常會遇到硬件故障(冗余)、軟件故障(bug)、自然災害、黑客攻擊、誤操作等對數據庫破壞的問題,所以一定要做好備份工作,在做好備份後還一定要會恢復,這兩項工作都是很重要的,備份要知道如何備份才能有

Linux運維學習之數據備份恢復

數據庫備份與恢復 linux xtrabackup 今天給大家帶來的是關於數據庫備份與恢復的教程,當我們手賤或者不知道什麽原因導致數據庫的崩潰,甚至刪除數據庫時怎麽辦,總不能跑路吧?所以我們做好日常的備份和相關的災後重建很有必要。 那麽備份都有什麽方式,方法呢?一,文件備份,就是很笨

postgre數據備份恢復

bak 另一個 navicat 一個數 備份數據庫 文件 實現 use 備份與恢復 背景:由於可視化工具navicat上數據傳輸太慢了,因此想要達到復制一個數據庫的效果,可以通過命令來實現,先備份數據庫到服務器某一路徑下,新建一個新的數據庫後,再執行恢復數據庫的命令。步驟:

MySQL創建用戶,常用SQL語句以及數據備份恢復

mysql常用命令 恢復與備份 一、創建普通用戶並授權 1、創建用戶並授權 [root@zlinux ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your

2.MySQL用戶管理,常用SQL語句,MySQL數據備份恢復

MySQL用戶管理 常用MySQL語句 MySQL數據備份與恢復 [toc] MySQL用戶管理,重用SQL語句,MySQL數據庫備份與恢復 一、MySQL用戶管理 1.創建一個普通用戶並授權 首先啟動mysql,然後進入 [root@xavi ~]# /etc/init.d/mysqld sta

96.創建普通用戶並授權,常用SQL語句,MySQL數據備份恢復

創建普通用戶並授權常用SQL語句 MySQL數據庫備份與恢復 一、創建普通用戶並授權 1、創建用戶並授權 [root@sdwaqw ~]# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ;

db2數據備份恢復

ase into div tar 目錄 img OS clas alt 備份 先停掉Tomcat,然後在機器A上執行以下語句: db2stop force db2start db2 force applications all db2 backup database p

MySQL數據的用戶管理、數據備份恢復

sql 創建 user 新建 目錄 數據庫系統 指定 username 目前 MySQL 是一個真正的多線程、多用戶的 SQL 數據庫服務,憑借其高性能、高可靠和易於使用的特性,成為服務器領域中最受歡迎的開源數據庫系統。在2008年以前,MySQL 項目由 MySQL AB

MySQL5.7.20數據備份恢復

時間段 bye tomat 策略 bak del crc32 恢復 備份策略 MySQL數據庫備份與恢復·####造成數據丟失的原因####程序錯誤人為操作錯誤運算錯誤磁盤故障災難(如火災、地震)和盜竊· ####物理與邏輯的角度####1、物理備份:冷備份:在數據關閉的狀

mysqldump備份恢復

一個 like secure exit extra ssi 統計表 建議 per mysql用戶管理 創建授權用戶和密碼 ?grant all on . to ‘user1‘ identified by ‘pwd@1234‘;在mysql中創建連接管理數據庫的用戶,創建用戶

MySQL用備份資料恢復單表資料

備份資料庫時,採用了全庫備份,但是因為某些原因需要回滾一個表的資料到備份資料庫上,如果回滾整個庫就比較費時間,因為可能這個表只有幾十M,但是其它表可能有十幾上百G,這時候就需要將需要恢復的表提取出來了 現在有備份庫fdcsqlmysql-2018_11_30-03_00_01.sql,裡面有多張表,現在需要

Linux -MySQL-數據備份恢復

com sel ESS vpd mage 一個 數據庫名 查看數據庫 ges . >重定向 <反向重定向 show databases; 顯示數據庫數據庫 備份:mysqldump -uroot -p密碼 +數據庫的名稱 > /data/數據

MongoDB 學習之備份恢復(十)

備份 語法 mongodump -h dbhost -d dbname -o dbdirectory -h:伺服器地址,也可以指定埠號 -d:需要備份的資料庫名稱 -o:備份的資料存放位置,此

linux系統下mongodb資料庫的備份恢復

Linux系統下:        備份資料庫:           1)cd到mongodb的bin目錄下               例如: cd  /usr/local/mongodb/bin          2) $ mongodump -h  資料庫所在pc的ip

MongoDB-5:備份恢復

一、簡介     匯入和匯出可以操作本地的mongodb伺服器,也可以操作遠端的伺服器。所有有如下通用選項:         -h host 主機