当前位置: 首页 > 科技观察

为MongoDB服务器配置备份脚本

时间:2023-03-12 04:39:54 科技观察

数据、服务和信息的有效管理对公司的成功至关重要。在数据不断增长的世界中,选择正确的数据管理解决方案比以往任何时候都更加重要。MongoDB是一个新兴的开源NoSQL数据库,用于海量数据管理。它提供高性能、高可用性和易扩展性。数据管理的一个关键要素是执行定期备份以防止数据丢失,这不应手动完成。在MongoDB中执行备份的方法有很多种,但本文仅介绍如何使用mongodump和mongorestore配置和运行备份脚本。要设置MongoDB实例,请执行以下步骤来设计可以通过cron作业自动运行的MongoDB备份脚本。备份脚本可根据业务需要定制。注意:要按照本教程中的步骤进行操作,请创建一个单独的用户(例如,名为mongo的用户)以在MongoDB中执行管理操作。1.从MongoDB下载中心安装MongoDB。MongoDB二进制文件位于/opt/mongodb/mongodb/bin/目录中。安装MongoDB时使用root用户凭据。2、以root用户登录,然后创建组和用户:#groupaddmongogrp#vi/etc/groupmongogrp:x:1005:3。将用户mongo添加到新创建的组mongogrp:#useraddmongo-d/home/mongo-f-1-gmongogrp-m4。验证用户是否已经创建:#cd/home#ls-ldrwxr-xr-x2mongomongogrp4096Oct1807:25mongovi/etc/passwdmongo:x:1005:1005::/home/mongo:5、设置用户mongo设置密码:#passwdmongo调用MongoDBshell1,打开一个新会话,以mongo用户登录:$sudosu–mongo2,找到MongoDB安装的bin目录:$cd/opt/mongodb/mongodb/bin/$lsbsondumpmongomongodmongodumpmongoexportmongofilesmongoimportmongooplogmongoperfmongorestoremongosmongosniffmongostatmongotop3,这些工具,bin目录必须有合适的用户mongo的访问权限。使用root用户凭据并为mongo用户提供对bin目录的适当访问权限。4.验证步骤2中显示的实用程序是否位于bin目录中。5.调用MongoDBshell时有两种选择:一种是带SSL的,一种是不带SSL的。下面给出了使用这两个选项的说明。A。要调用MongoDBshell,运行带有以下选项的mongo命令:以下选项:$。/mongo--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123pre-mongo01.ibmcloud.com:27017其中:认证文件:/opt/mongodb/mongodb/cert/mongo.server。trust-certs.pempassword123:sslPEMKeyPasswordportno:27017Hostname:pre-mongo01.ibmcloud.com注意:在这里您将获得MongoDBshellV3.2。现在可以执行各种操作。本文使用SSL执行MongoDB命令和实用程序。>showdbstestdb10.800GBlocal0.000GBmydb0.300GBMongoDB备份和恢复功能要备份MongoDB数据库,请使用位于bin目录中的mongodump实用程序。这会将所有数据备份到默认位置/bin/dump的转储文件夹中。MongoDB使用默认端口27017。可以使用实用程序mongodump执行热(在线)和冷(离线)备份。离线MongoDB备份MongoDB服务器有一个名为mongod的主守护进程。Mongod管理数据访问、数据请求和后台操作。要执行离线备份,首先停止mongod服务,这将停止MongoDB实例。然后,执行备份并启动MongoDB实例。创建离线MongoDB备份:创建备份目录。根据MongoDB数据库的大小,在各个备份位置创建备份目录。这里创建备份目录为/mongo_data/backup:#mkdir/mongo_data/backup#ls–l2,修改属主为用户mongo:#chown-Rmongo:mongogrp/mongo_data/backup/#ls–l3,停止mongod示例:servicemongodstop4。执行离线备份。首先以mongo用户登录,找到bin目录:$pwd/opt/mongodb/mongodb/bin$./mongodump--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud.com:27017--out/mongo_data/backup/5。通过键入servicemongodstart启动mongod实例。在线MongoDB备份要执行在线备份,请连续运行mongodump命令,然后重新启动mongod实例。此命令可以在有或没有SSL的情况下运行。下面给出了这两个命令。要使用SSL执行mongodump命令,该命令类似于:$./mongodump--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud。com:27017--out/mongo_data/backup/要在没有SSL的情况下执行mongodump命令,该命令类似于:$./mongodump--hostpre-mongo01.ibmcloud.com--port27017--out/mongo_data/backup/Usemongodump执行小型分片集群备份如果您的分片集群包含一个小型数据集,您可以使用mongodump连接到mongos。在MongoDB分片集群中,mongodump是一种路由服务,用于处理来自应用层的查询。为此,它确定此数据在分片集群中的位置。如果基础设施可以在合理的时间内完成全量备份,并且一个存储系统可以容纳整个MongoDB数据集,那么创建MongoDB集群备份是可能的。默认情况下,mongodump向非主节点发出查询。要执行分片集群的备份,请使用mongodump,如以下命令所示:$./mongodump--hostpre-mongo01.ibmcloud.com--port27017注意:在mongodump捕获输出时,应用程序可以继续修改数据。对于副本集,mongodump提供--oplog选项以包括在mongodump操作期间生成的输出oplog条目。这允许相应的mongorestore操作重放捕获的oplog。要恢复使用--oplog创建的备份,请使用带有--oplogReplay选项的mongorestore。但是,对于副本集,请考虑MongoDBCloudManager或OpsManager。恢复场景如果您知道故障是如何发生的以及如何从中恢复,则可以更好地规划和避免故障场景。以下部分模拟不同类型的故障,并提供在您的环境中发生其中一种故障时您可以采取的一系列步骤。场景1.整个数据库被意外删除或损坏人为错误或硬件故障可能会危及或损坏整个数据库。如果发生这种情况,您可以使用mongodump的最后一个完整备份恢复整个数据库,并使用mongorestore实用程序恢复它。在这种情况下,让我们假设数据库是testdb1,其中包含用户和学生等集合,其中包含一些记录,如下所示。步骤1.验证数据库和集合以mongo用户身份登录:$sudosu–mongob找到bin目录:$cd/opt/mongodb/mongodb/bin/c调用MongoDBshell:$./mongo--ssl--sslCAFile../cert/mongo.server。trust-certs.pem--sslPEMKeyPasswordpassword123pre-mongo01.ibmcloud.com:27017d,验证数据库和集合:>showdbstestdb10.800GBlocal0.000GBmydb0.300GB>usetestdb1switchedtodbtestdb1>showcollectionsstudentusers>db.student.find({},{_id:0}){"rollno":1,"name":"amol","subject":"english","marks":90}{"rollno":2,"name":"rachna","subject":"english","marks":85}{"rollno":3,"name":"Bob","subject":"english","marks":75}>db.users.find({},{_id:0}){"name":"Amol","age":39}{"name":"Bob","age":30}{"name":"Rachna","age":36}{"名称":"阿迪亚","age":3}步骤2.备份整个数据库使用以下代码备份整个数据库:$./mongodump--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud.com:27017–dbtestdb1--out/mongo_data/backup/2017-01-24T04:14:07.252-0500writingtestdb1.studentto2017-01-24T04:14:07.253-0500writingtestdb1.usersto12-24T:14:07.254-0500donedumpingtestdb1.student(3documents)2017-01-24T04:14:07.254-0500donedumpingtestdb1.users(3documents)Step3.Simulatethefailure为了模拟故障场景,你需要完全丢弃数据库a。连接到数据库:>usetestdb1switchedtodbmydbb,验证集合:>showcollectionsstudentusersc,验证当前数据库:>dbtestdb1d,删除数据库:>db.dropDatabase(){"dropped":"testdb1","ok":1}步骤4.恢复数据库testdb1使用实用程序mongorestorerestore备份映像,如下所示。在此示例中,还原的***备份映像位于备份位置/mongo_data/backup/testdb1。$./mongorestore--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud.com:27017--dbtestdb1/mongo_data/backup/testdb1步骤5。验证数据库和集合要验证数据库是否已恢复,请连接到数据库并查询集合:>showdbstestdb10.800GBlocal0.000GBmydb0.300GB>usetestdb1switchedtodbtestdb1>showcollectionsstudentusers>db.student.find({},{_id:0})>db.users.find({},{_id:0})场景2.不小心丢弃了一个集合有时候,尤其是当数据库中有几千个集合时,很可能不小心丢弃了一个集合。要恢复意外删除的集合,您需要在备份位置使用该集合的***备份(例如collection.name.bson)。在这种情况下,我将描述如何使用集合student执行这些功能,该集合被丢弃并使用mongorestore实用程序恢复它。步骤1.验证集合使用以下代码验证集合:>usetestdb1switchedtodbtestdb1>showcollectionsstudentusers>db.student.find({},{_id:0}){"rollno":1,"name":"amol","subject":"english","marks":90}{"rollno":2,"name":"rachna","subject":"english","marks":85}{"rollno":3,"name":"Bob","subject":"english","marks":75}步骤2.备份集合仅在集合级别执行备份:$./mongodump--ssl--sslCAFile../cert/mongo。server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud.com:27017--dbtestdb1--collectionstudent--out/mongo_data/backup注意:确保在备份位置创建了一个文件(例如mongo_data/备份)student.bson。第3步。模拟失败要模拟此失败,请完全删除集合。A。连接数据库:>usetestdb1switchedtodbtestdb1b,dropcollection:>db.student.drop()truec,验证内容是否被drop:>db.student.find({},{name:1,age:1,_id:0})步骤4.恢复集合$./mongorestore--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud.com:27017--dbmydb--collectionstudent/mongo_data/backup/testdb1/student.bson注意:可以使用mongodump进行数据库级别的备份,必要时从备份目录中只恢复你需要的集合。步骤5.验证集合要验证集合是否已恢复,请连接到数据库并查询集合:>usetestdb1switchedtodbtestdb1>showcollectionsstudentusers>db.student.find({},{_id:0}){"rollno":1,"name":"amol","subject":"english","marks":90}{"rollno":2,"name":"rachna","subject":"english","marks":85}{"rollno":3,"name":"Bob","subject":"english","marks":75}使用crob作业创建并运行备份脚本要根据业务需要设置备份策略,您需要设置自定义的备份脚本:run_backup.sh。您还需要设置一个cron作业来运行此备份。创建备份脚本下面的示例备份脚本run_backup.sh基于以下条件。该脚本首先从备份位置删除超过30天的备份映像。它在备份位置执行所有数据库的每日备份。然后该脚本向日志文件backup.log中写入一条注释,指示备份操作删除的内容以及执行备份的时间。默认情况下,mongodump不会捕获本地数据库的内容。如果需要,应单独添加。要使用应用程序名称唯一标识每个数据库备份,必须在备份脚本中定义一些参数。下一节将展示这一点。创建备份目录以root身份登录:#mkdir/mongo_data/backup将所有者更改为mongo用户:#chown-Rmongo:mongogrp/mongo_data/backup以mongo用户登录:mongo@pre-mongo01$pwd/mongo_data/backup创建一个备份脚本:mongo@pre-mongo01:/mongo_data/backup$virun_backup.sh以下代码给出了备份脚本的示例内容:#/bin/bashcd/opt/mongodb/mongodb/bin/echo`date`>>/mongo_data/backup/backup.logAPP_NAME="app1"MONGO_HOST="pre-mongo01.ibmcloud.com"MONGO_PORT="27017"TIMESTAMP=`date+%F-%H%M`MONGODUMP_PATH="/opt/mongodb/mongodb/bin/mongodump"BACKUPS_DIR="/mongo_data/backup/$APP_NAME-$TIMESTAMP"BACKUP_NAME="/mongo_data/backup/$APP_NAME-$TIMESTAMP"mkdir-p$BACKUPS_DIRcd/opt/mongodb/mongodb/bin/#Deleteallbackupsolderthan30daysfrom/mongo_data/backupecho“删除以下超过30天的备份文件:”>>/mongo_data/backup/backup.logfind/mongo_data/backup/-typed-name'app1-*'-mtime+30>>/mongo_data/backup/backup。logfind/mongo_data/backup/-typed-name'app1-*'-mtime+30-execrm-rf{}+#Runthedailybackup'local'databaseonly.fordatabaseNameinlocaldoecho"Startingdailybackupof$databaseName....">>/mongo_data/backup/backup.log./mongodump--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud.com:27017--db$databaseName>>/mongo_data/backup/backup.log#Runthedailybackupofremainingdatabases.echo"Startingdailybackupofalldatabases...">>/mongo_data/backup/backup.log./mongodump--ssl--sslCAFile../cert/mongo.server.trust-certs.pem--sslPEMKeyPasswordpassword123--hostpre-mongo01.ibmcloud.com:27017>>/mongo_data/backup/backup.logif[$?!=0];thenecho"Failedtomakebackupof$databaseNameon`date+%F_%T`"|mailx-s"MongoDBbackupfailed"amolbarsagade@in.ibm.comfidonemv/opt/mongodb/mongodb/bin/dump$BACKUP_NAMEecho`date`>>/mongo_data/backup/backup.logecho"Endofbackuprun">>/mongo_data/backup/backup.logecho"--------------------------------">>/mongo_data/backup/backup.log授予权限保存文件并为其授予755权限:mongo@pre-mongo01:/mongo_data/backup$chmod755run_backup.sh创建一个cron作业以运行备份脚本在mongo_data/backup位置创建一个名为mycron.txt的新cron作业并运行它根据备份策略安排它以mongo用户身份登录:mongo@pre-mongo01:/mongo_data/backup$pwd/mongo_data/backup检查mongo用户的现有cron作业:mongo@pre-mongo01:/mongo_data/backup$crontab-lnocrontabformongo创建一个新的cronjob:mongo@pre-mongo01:/mongo_data/backup$vimycron.txt添加一个备份计划根据备份策略运行这个crobjob例如:3002***/mongo_data/backup/run_backup.sh>>/mongo_data/backup/run_backup.sh.out设置一个cron作业并验证它:mongo@pre-mongo01:/mongo_data/backup$crontabmycron.txtmongo@pre-mongo01:/mongo_data/backup$crontab-l3002***/mongo_data/backup/run_backup.sh>>/mongo_data/backup/run_backup.sh.out结论您已经为MongoDB数据库服务器配置并运行了备份脚本,并且更好地了解了如何使用mongodump和mongorestore实用程序执行备份和恢复。您使用cron作业计划和运行备份脚本。此备份脚本可用于调度、维护和管理MongoDB数据库服务器的备份。