#!/usr/local/bin/ruby
# date: 06-12-2014
# auther: lucifer
# use fsync and lock to the file-system before backup the file-system
# mongo-ruby-driver version > 1.10.0
require ‘mongo’
require ‘fileutils’
require ‘date’
include Mongo
include BSON
# the members of replcation-set
# test mongodb server version 2.6.0
# host=”192.168.11.51″
# The port of members
# If the port is 27017 by default then otherport don’t need to assignment
# otherport=””
# port=otherport.length !=0 ? otherport : MongoClient::DEFAULT_PORT
# opts={:pool_size=> 5, :pool_timeout=> 10}
# Create a new connection
# client=MongoClient.new(host, port, opts)
uri_string=”mongodb://caoqing:xxxxxxxx@x.x.x.x:27017/admin”
client=MongoClient.from_uri(uri=”#{uri_string}”)
db=client[‘admin’]
# fsync and lock the database
cmd=OrderedHash.new
cmd[:fsync]=1
cmd[:lock]=true
# p cmd
db.command(cmd)
# datafile path
d=”/var/lib/mongo”
# dir=Dir.new(“#{d}”)
# entries=dir.entries
# entries.delete_if { |entry| entry=~ /^\https://www.jb51.net/article/}
# convert the relative path to the full path
# entries.map! { |entry| File.join(dir.path, entry) }
# maintain only the type of file
# entries.delete_if { |entry| !File.file?(entry) }
# p entries
start=Date.today.to_s
prev=(Date.today – 7).to_s
dest=”/backup/#{start}”
sour=”/backup/#{prev}”
FileUtils.rm_rf(“#{sour}”) if File::exist?(“#{sour}”)
Dir.mkdir(“#{dest}”, 0755) unless File::exist?(“#{dest}”)
FileUtils.cp_r Dir.glob(“#{d}/**”), dest if client.locked?
puts “*” * 20
puts “\tbackup complete”
puts “*” * 20
# DB::SYSTEM_COMMAND_COLLECTION
# unlock the database
db[“$cmd.sys.unlock”].find_one
client.close