麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
1172
2023-05-03
为***服务器配置备份脚本
有效管理数据、服务和信息对一个公司的成功至关重要。在数据日益增长的世界里,选择正确的数据管理解决方案比以往更加重要。*** 是一个新兴的开源 NoSQL 数据库,可用于海量数据管理。它提供了高性能、高可用性和易于扩展的特性。数据管理的一个关键要素是定期执行备份,预防数据丢失,而且不应手动完成此项工作。可使用多种不同方法在 *** 中执行备份,但本文只展示了如何使用 mongodump 和 mongorestore 配置和运行备份脚本。
设置 *** 实例
执行以下步骤,设计可通过 cron 作业自动运行的 *** 备份脚本。可根据业务需求来自定义备份脚本。
备注:要跟随本教程中的步骤进行操作,请创建一个单独的用户(例如名为 mongo 的用户),在 *** 中执行管理操作。
1、从 *** Download Center 安装 ***。*** 二进制文件位于 /opt/mongodb/mongodb/bin/ 目录中。安装 *** 时使用 root 用户凭证。
2、以 root 用户身份进行登录,然后创建一个组和用户:
# groupadd mongogrp # vi /etc/group mongogrp:x:1005:
3、将用户 mongo 添加到刚创建的组 mongogrp 中:
# useradd mongo -d /home/mongo -f -1 -g mongogrp -m
4、验证是否已创建该用户:
# cd /home # ls -l drwxr-xr-x 2 mongo mongogrp 4096 Oct 18 07:25 mongo vi /etc/passwd mongo:x:1005:1005::/home/mongo:
5、设置用户 mongo 设置密码:
# passwd mongo
调用 *** shell
1、打开一个新会话并以用户 mongo 登录:
$ sudo su – mongo
2、找到 *** 安装的 bin 目录:
$ cd /opt/mongodb/mongodb/bin/ $ ls bsondump mongo mongod mongodump mongoexport mongofiles mongoimport mongooplog mongoperf mongorestore mongos mongosniff mongostat mongotop
3、要运行这些实用程序,bin 目录必须对用户 mongo 具有适当的访问权 。使用 root 用户凭证,并为 mongo 用户提供对 bin 目录的适当访问权。
4、验证第 2 步中所示的实用程序是否位于 bin 目录下。
5、调用 *** shell 时有两个选项:一个使用 SSL,一个不使用 SSL。下面给出了两个选项的使用说明。
a、要调用 *** shell,请使用以下选项运行 mongo 命令:
如果不使用 SSL 调用 *** shell,请使用以下选项运行 mongo
b、命令:
其中:
备注:在这里,您将获得 *** shell V3.2。现在可以执行各种操作了。
本文使用 SSL 执行 *** 命令和实用程序。
> show dbs testdb1 0.800GB local 0.000GB mydb 0.300GB
*** 备份和还原功能
要备份 *** 数据库,请使用 mongodump 实用程序,它位于 bin 目录中。这会将所有数据都备份到默认位置 /bin/dump 上的 dump 文件夹中。*** 使用默认端口 27017。可以使用实用程序 mongodump 执行热(在线)和冷(离线)备份。
离线 *** 备份
*** 服务器有一个主要的守护进程,名为 mongod 。 Mongod 管理数据访问、数据请求和后台操作。要执行离线备份,首先要停止 mongod 服务,这会停止 *** 实例。然后,执行备份并启动 *** 实例。
要创建离线 *** 备份,请执行以下操作:
创建一个备份目录。基于 *** 数据库的大小,在各个备份位置创建备份目录。在这里,将备份目录创建为 /mongo_data/backup:
# mkdir /mongo_data/backup # ls –l
2、将所有者更改为用户 mongo :
# chown -R mongo:mongogrp /mongo_data/backup/ # ls –l
3、停止 mongod 实例:
service mongod stop
4、执行离线备份。首先,以 mongo 用户身份进行登录并找到 bin 目录:
5、启动 mongod 实例,方法是键入 service mongod start 。
在线 *** 备份
要执行在线备份,请连续运行 mongodump 命令,然后重新启动 mongod 实例。可以使用或不使用 SSL 来运行此命令。两个命令都在下方给出。
要使用 SSL 执行 mongodump 命令,该命令看起来类似于:
要不使用 SSL 执行 mongodump 命令,该命令看起来类似于:
使用 mongodump 执行小型分片集群备份
如果分片集群包含一个小数据集,可以使用 mongodump 连接到 mongos 。
在 *** 分片集群中, mongodump 是处理来自应用层的查询的路由服务。为了执行该操作,它会确定此数据在分片集群中的位置。
如果基础架构可以在合理的时间量内执行完整备份,而且一个存储系统可以保存整个 *** 数据集,那么可以创建 *** 集群备份。默认情况下, mongodump 向非主要节点发出其查询。
要对分片集群执行备份,请使用 mongodump ,如以下命令所示:
备注:在 mongodump 捕获输出期间,应用程序可以继续修改数据。对于副本集, mongodump 提供了 --oplog 选项,以便包含在执行 mongodump 操作期间生成的输出 oplog 条目。这允许相应的 mongorestore 操作重放捕获到的 oplog。要还原使用 --oplog 创建的备份,请使用 mongorestore 和 --oplogReplay 选项。但是,对于副本集,可以考虑 *** Cloud Manager 或 Ops Manager。
恢复场景
如果知道故障是如何发生的和如何从故障中恢复,那么可以更好地规划和避免故障场景。以下各节将模拟不同类型的故障,并给出在您的环境中出现其中一种故障时可以执行的一系列步骤。
场景 1.整个数据库意外丢弃或受损坏
人为错误或硬件故障可能损害或损坏整个数据库。如果出现这种情况,可以应用 mongodump 的***一次完整备份恢复整个数据库,并使用 mongorestore 实用程序还原它。
在此场景中,我们假设数据库为 testdb1,其中的集合(比如 users 和 students)包含一些记录,如下所示。
第 1 步.验证数据库和集合
a、以 mongo 用户身份进行登录:
$ sudo su – mongo
b、找到 bin 目录:
$ cd /opt/mongodb/mongodb/bin/
c、调用 *** shell:
d、验证数据库和集合:
> show dbs testdb1 0.800GB local 0.000GB mydb 0.300GB > use testdb1 switched to db testdb1 > show collections student users > 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 } { "name" : "Aadya", "age" : 3 }
第 2 步.备份整个数据库
使用以下代码备份整个数据库:
第 3 步.模拟故障
要模拟故障场景,需要完全丢弃数据库。
a、连接到数据库:
> use testdb1 switched to db mydb
b、验证集合:
> show collections student users
c、验证当前数据库:
> db testdb1
d、丢弃数据库:
> db.dropDatabase() { "dropped" : "testdb1", "ok" : 1 }
第 4 步.还原数据库 testdb1
使用实用程序 mongorestore 还原备份镜像,如下所示。在此示例中,还原的***备份镜像位于备份位置 /mongo_data/backup/testdb1 。
第 5 步.验证数据库和集合
要验证数据库是否已还原,请连接到数据库并查询集合:
> show dbs testdb1 0.800GB local 0.000GB mydb 0.300GB > use testdb1 switched to db testdb1 > show collections student users > db.student.find({},{_id:0}) > db.users.find({},{_id:0})
场景 2.意外丢弃某个集合
有时,尤其是在数据库中有成千上万个集合时,可能会意外丢弃某个集合。要恢复意外丢弃的集合,需要使用备份位置上该集合(例如 collection.name.bson )的***备份。在此场景中,我将介绍如何使用集合 student 执行这些功能,该集合遭到丢弃并使用 mongorestore 实用程序还原它。
第 1 步.验证集合
使用以下代码验证集合:
> use testdb1 switched to db testdb1 > show collections student users > 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 步.备份集合
仅在集合级别上执行备份:
备注:确保在备份位置(例如 mongo_data/backup)上创建了一个文件 student.bson。
第 3 步.模拟故障
要模拟此故障,可完全丢弃该集合。
a、连接到数据库:
> use testdb1 switched to db testdb1
b、丢弃集合:
> db.student.drop() true
c、验证内容是否已丢弃:
> db.student.find({},{name:1,age:1,_id:0})
第 4 步.还原集合
备注:可以使用 mongodump 执行数据库级备份,如有需要,可以仅从备份目录还原所需的集合。
第 5 步.验证集合
要验证集合是否已还原,请连接到数据库并查询该集合:
> use testdb1 switched to db testdb1 > show collections student users > 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 -R mongo:mongogrp /mongo_data/backup
以 mongo 用户身份进行登录:
mongo@pre-mongo01 $pwd /mongo_data/backup
创建备份脚本:
mongo@pre-mongo01:/mongo_data/backup$ vi run_backup.sh
以下代码给出了备份脚本的样本内容:
授予权限
保存该文件并向它授予 755 权限:
mongo@pre-mongo01:/mongo_data/backup$ chmod 755 run_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 -l no crontab for mongo
创建一个新 cron 作业:
mongo@pre-mongo01:/mongo_data/backup$ vi mycron.txt
根据备份策略添加运行此 crob 作业的备份时间表。例如:
30 02 * * * /mongo_data/backup/run_backup.sh >> /mongo_data/backup/run_backup.sh.out
设置 cron 作业并验证它:
mongo@pre-mongo01:/mongo_data/backup$ crontab mycron.txt mongo@pre-mongo01:/mongo_data/backup$ crontab -l 30 02 * * * /mongo_data/backup/run_backup.sh >> /mongo_data/backup/run_backup.sh.out
结束语
您已为 *** 数据库服务器配置并运行了备份脚本,并更好地了解了如何使用 mongodump 和 mongorestore 实用程序执行备份和还原。您使用一个 cron 作业调度并运行了备份脚本。可以使用该备份脚本来调度、维护和管理 *** 数据库服务器的备份。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。