test.php.bak,MongoDB热备份工具:解决官方版备份缺陷

贺春旸,凡普金科DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一、二版作者,曾任职于中国移动飞信、安卓机锋网。致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。

工具下载:点击文末【阅读原文】或登录云盘

前言

目前官方MongoDB社区版是不支持Hot Backup热备份的,我们只能通过mongodump等逻辑备份工具导出bson文件,再mongorestore导入,类似MySQL的mysqldump工具。

在备份副本集时,我们需指定--oplog选项记录备份间产生的增量数据,类似mysqldump --single-transaction --master-data=2(做一致性快照并记录当前的binlog点)。

对副本集的成员恢复,需先切成单机版,mongorestore必须指定--oplogReplay选项,以恢复到某一时刻的快照,最后还需填充oplog(增量数据以哪个位置点开始断点续传),mongorestore -d local -c oplog.rs dump/oplog.bson,最后一步再切为副本集成员重新启动。

中小型数据库备份起来简单快捷,如果过TB级的数据量,那将是痛苦的。

如果你的oplog设置过小,很有可能在备份恢复这段时间,oplog被覆盖重写,那么你将永远无法加入副本集集群里。

概述

Percona MongoDB 3.2版本默认开始支持WiredTiger引擎的在线热备份,解决了官方版只能通过mongodump逻辑备份这一缺陷。

参考文献:

注意事项

1、要在当前dbpath中对数据库进行热备份,请在admin数据库上以管理员身份运行createBackup命令,并指定备份目录。

2、可以替换一台从库为Percona MongoDB,做备份使用。(我这里实测是Percona MongoDB 3.4版本)

原理

Percona MongoDB HotBackup热备份原理:

你可以想象成xtrabackup工具

备份:

首先会启动一个后台检测的进程,实时检测MongoDB Oplog的变化,一旦发现oplog有新的日志写入,立刻将日志写入到日志文件WiredTiger.backup中(你可以strings WiredTiger.backup查看oplog操作日志的变化);

复制MongoDB dbpath的数据文件和索引文件到指定的备份目录里;

......

恢复:

将WiredTiger.backup日志进行回放,将操作日志变更应用到WiredTiger引擎里,最终得到一致性快照恢复;

把备份目录里的数据文件直接拷贝到你的dbpath下,然后启动MongoDB即可,会自动接入副本集集群。

运行

这里我封装了一个PHP脚本,直接在SHELL里运行即可。

1、环境准备:

shell> yum install -y php-pear php-devel php gcc openssl openssl-devel cyrus-sasl cyrus-sasl-devel

2、php-mongo驱动安装:

shell> pecl install mongo

把extension=mongo.so加入到/etc/php.ini最后一行。

3、创建mongodb超级用户权限(备份时使用)

db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})

4、修改pmongo_bak.php配置信息

//*************修改下面的配置信息***************//

$user = "admin"; //使用root用户权限

$pwd = '123456';

$host = '192.168.180.26'; //在从库上热备

$port = '27017';

$authdb = 'admin'; //权限认证数据库

$BAKDIR = "/data/bak/";

$BAKDIR .= date('Y_m_d_H_i_s');

//*************下面的代码不用修改***************//

$m = new MongoBak($user,$pwd,$host,$port,$authdb,$BAKDIR);

......

5、前台运行:

shell> php pmongo_bak.php(以root权限运行)

6、写入系统crontab里

00 01 * * * /usr/bin/php /root/php_mongodb/pmongo_bak.php > /root/php_mongodb/bak_status.log 2 >&1

7、不支持远程备份,需将备份脚本部署在从库里。如果你想把数据备份到远程,可以采用NFS等文件系统mount挂载上。

下载方式

登录云盘链接:

即可下载工具脚本

现通过dbaplus社群免费为大家提供Percona MongoDB HotBackup热备份工具的下载使用。若使用过程中有任何问题或建议,可随时与我们联系,欢迎大家试用!

相关链接:

更多免费工具&脚本

97741210ef2a77991ea2640f76ffbf39.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zookeeper工作原理、安装配置、工具命令简介

1 Zookeeper简介Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等等。 ZooKeeper是一个分布式的,开放源码的分布式应用程序…

流式大数据处理的三种框架:Storm,Spark和Samza

许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍,然后尝试快速、高度概述其异同。 Apache Storm 在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology&#x…

models.ForeignKey( ,on_delete=models.CASCADE)    # 关联外键

# 关联外键 sgrade models.ForeignKey("Grades",on_deletemodels.CASCADE) 版本跟新后忘记加on_deletemodels.CASCADE 报错困扰了很久 多读报错信息 from django.db import models# Create your models here. class Grades(models.Model):gname models.Cha…

java 产生无重复的随机数,Java创建无重复的随机数

小编典典最简单的方法是创建一个可能数字的列表(1..20或任何数字),然后用对其进行混洗Collections.shuffle。然后,只需考虑你想要的许多元素。如果你的范围最终等于你需要的元素数量(例如,用于洗牌的卡片),则这非常好。如果你想要…

linux_bash_shell_cheat_sheet(自译)

【说明】 发现错误或不足请务必联系我!!! linux_bash_shell_cheat_sheet.pdf (英文原本以及译本下载,链接失效请私信或邮箱联系) 转载于:https://www.cnblogs.com/15ho/p/5947534.html

Day04-循环和列表

循环和列表 一、循环(***) 1.1 概念 广义:一个周期现象或者重复出现的情况,这种状态被称为循环 狭义:在满足条件的情况下,反复执行某一段代码,在编程语言中出现的这种现象被称为循环。被反复执行的这段代码被称为循环…

热血街头Java,下载_我爱法语 V3.01 多国语言版_6z6z下载站

我爱法语是一款功能强大的法语电子词典工具。融合了法汉,汉法,法法,英法,法英,英汉,法意等各类词库。该工具使用灵活,操作简单,充分吸收了法汉、汉法、法法、英法、法英、英汉、法意…

【demo练习二】:WPF依赖属性的练习

2016-10-11 依赖属性demo小样&#xff1a; 要求&#xff1a;在窗口中点击按钮&#xff0c;利用设置“依赖属性”把Label和TextBox控件里的属性值进行改变。 MainWindow.xaml代码&#xff1a; <Window x:Class"依赖属性1.MainWindow" xmlns"http://schemas.m…

BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP

【题目分析】 沉迷水题&#xff0c;吃枣药丸。 【代码】 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int ij;i<k;i) #define ll long long int cot[512],c1[512]…

Django中object.all

前言 先抛出一个问题。银行就相当于一个数据库&#xff0c;你去银行取钱存钱办卡销卡&#xff0c;是你告诉银行柜员方便还是你自己去操作电脑办卡取卡方便&#xff1f;&#xff08;你还不一定会&#xff0c;假设自动存款机还没发明&#xff09;&#xff0c;object在数据库中就…

java中为什么设计包装类,Java 中为什么要设计包装类

最近文章更新频率慢了&#xff0c;因为最近在准备暑期实习&#xff0c;之前寻思着一边复习一边写文章&#xff0c;两全其美。后来发现一篇读起来比较舒服的文章写出来加上配图得花上四五个小时甚至更多&#xff0c;但这个知识点我可能半个小时就能复习完了&#xff0c;春招在即…

bfc

BFC 已经是一个耳听熟闻的词语了&#xff0c;网上有许多关于 BFC 的文章&#xff0c;介绍了如何触发 BFC 以及 BFC 的一些用处&#xff08;如清浮动&#xff0c;防止 margin 重叠等&#xff09;。虽然我知道如何利用 BFC 解决这些问题&#xff0c;但当别人问我 BFC 是什么&…

Python语法异常 Exception

常见异常&#xff1a;Exception 所有异常的基类AttributeError 特性应用或赋值失败时引发IOError 试图打开不存在的文件时引发IndexError 在使用序列中不存在的索引时引发KeyError …

Python的Django框架中forms表单类的使用方法详解

Form Form的验证思路 前端&#xff1a;form表单 后台&#xff1a;创建form类&#xff0c;当请求到来时&#xff0c;先匹配&#xff0c;匹配出正确和错误信息。 Django的Form验证实例&#xff1a; 创建project&#xff0c;进行基础配置文件配置 settings.py settings.py之…

java读取gpx文件,从Leaflet导出GPX文件

我想要做的是让用户通过选择Leaflet中的一些GeoJson功能来创建GPX文件 . 我这样做的方法是创建一个新的GeoJson图层来存储所选的特征&#xff0c;然后用一个名为togpx(https://github.com/tyrasd/togpx)的插件将其转换为gpx . 现在我有一个gpx文件&#xff0c;但我没有t know h…

Mono Compatibility

The easiest way to describe what Mono currently supports is:Everything in .NET 4.5 except WPF, WWF, and with limited WCF and limited ASP.NET 4.5 async stack. System.Web and WCF are candidates for ‘almost immediate’ porting from the .NET reference source …

Python的Django框架中forms表单类的使用方法详解2

用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解。 Form表单的功能 自动生成HTML表单元素检查表单数据的合法性如果验证错误&#xff0c;重新显示表单&#xff08;数据不会重置&#xf…

生动形象的理解API是如何工作的!

API(Application Programming Interface,应用程序编程接口) 简单来说&#xff0c;就是其他人开发出来一块程序&#xff0c;你想用&#xff0c;他会告诉你调用哪个函数&#xff0c;给这个函数传什么参数&#xff0c;然后又会返回给你一个什么样的结果&#xff0c;你不需要知道他…

ann matlab,人工神经网络ann及其matlab仿真.ppt

人工神经网络ann及其matlab仿真人工神经网络 的研究方法及应用刘 长 安2004. 12. 31 引 言 利用机器模仿人类的智能是长期以来人们认识自然、改造自然和认识自身的理想。 研究ANN目的&#xff1a; (1)探索和模拟人的感觉、思维和行为的规律&#xff0c;设计具有人类智能的计算机…

字符串与树的结合

https://leetcode.com/problems/scramble-string/?tabDescription 虽然题目不常见&#xff0c;但是里面关于字符串调转和递归的思路&#xff0c;还是很有代表性的。 https://discuss.leetcode.com/topic/14337/share-my-4ms-c-recursive-solution/2 这个解法也把里面关于递归的…