这期内容当中小编将会给大家带来有关怎样利用MySQL学习MongoDB中的备份和恢复,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。
如何利用MySQL学习MongoDB之备份和恢复
1、MySQL备份和恢复
MySQL备份方式大体上分为以下3种:
直接拷贝数据库文件
使用mysqlhotcopy备份数据库
使用mysqldump备份数据库
(1)、直接拷贝数据库文件
最为直接、快速、方便,缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在靠背文件前,执行以下SQL语句:
FLUSHTABLESWITHREADLOCK;
也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。
但对于Innodb类型表来说,还需要备份其日志文件,即ib_logfile*文件。因为当Innodb表损坏时,就可以依靠这些日志文件来恢复。
(2)、使用mysqlhotcopy备份数据库
mysqlhotcopy是perl程序。它使用LOCKTABLES、FLUSHTABLES和cp或scp来快速备份数据库。对于备份数据库或单个表来说它是最快的途径,但它只能运行在本地服务器上,且mysqlhotcopy只能备份MyISAM表,对于Innodb表则无招可施了。
(3)、使用mysqldump备份数据库
mysqldump是SQL级别的备份,它将数据表导成SQL脚该篇文章件,在不同的MySQL版本之间升级时相对比较合适,这也是最主流的备份方法。
2、MongoDB备份和恢复
MongoDB提供了两个命令来备份(mongodump)和恢复(mongorestore)数据库。
(1)、mongodump备份工具
我们先看一下此工具的帮助信息:
[chinastor.com-root@localhostbin]#./mongodump--helpoptions:--helpproducehelpmessage-v[--verbose]bemoreverbose(includemultipletimesformoreverbositye.g.-vvvvv)-h[--host]argmongohosttoconnectto(/s1,s2forsets)--portargserverport.Canalsouse--hosthostname:port--ipv6enableIPv6support(disabledbydefault)-u[--username]argusername-p[--password]argpassword--dbpathargdirectlyaccessmongoddatabasefilesinthegivenpath,insteadofconnectingtoamongodserver-needstolockthedatadirectory,socannotbeusedifamongodiscurrentlyaccessingthesamepath--directoryperdbifdbpathspecified,eachdbisinaseparatedirectory-d[--db]argdatabasetouse-c[--collection]argcollectiontouse(somecommands)-o[--out]arg(=dump)outputdirectoryor"-"forstdout-q[--query]argjsonquery--oplogUseoplogforpoint-in-timesnapshotting--repairtrytorecoveracrasheddatabase[chinastor.com-root@localhostbin]#
如何利用MySQL学习MongoDB之备份和恢复
例如我们的系统中有一个叫做”foo”库,下面我们将演示如何将这个库备份出来:
[chinastor.com-root@localhostbin]#./mongodump-dfoo-o/data/dumpconnectedto:127.0.0.1DATABASE:footo/data/dump/foofoo.system.indexesto/data/dump/foo/system.indexes.bson3objectsfoo.system.usersto/data/dump/foo/system.users.bson1objectsfoo.t2to/data/dump/foo/t2.bson1objectsfoo.t1to/data/dump/foo/t1.bson2objects[chinastor.com-root@localhostbin]#
通过工具返回信息,我们看到的是foo中的数据已经被备份成bson格式的文件了,接下来我们到备份的目录下去验证一下:
[chinastor.com-root@localhostdump]#ll/data/dump/foo/总计16-rw-r--r--1rootroot19304-2211:55system.indexes.bson-rw-r--r--1rootroot9104-2211:55system.users.bson-rw-r--r--1rootroot6604-2211:55t1.bson-rw-r--r--1rootroot4904-2211:55t2.bson[chinastor.com-root@localhostdump]#
结果证明foo库中的表已经被成功备份出来,接下来我们将演示如何将备份恢复回去。
(2)、mongorestore恢复工具
我们先看一下此工具的帮助信息:
[chinastor.com-root@localhostbin]#./mongorestore--helpusage:./mongorestore[options][directoryorfilenametorestorefrom]options:--helpproducehelpmessage-v[--verbose]bemoreverbose(includemultipletimesformoreverbositye.g.-vvvvv)-h[--host]argmongohosttoconnectto(/s1,s2forsets)--portargserverport.Canalsouse--hosthostname:port--ipv6enableIPv6support(disabledbydefault)-u[--username]argusername-p[--password]argpassword--dbpathargdirectlyaccessmongoddatabasefilesinthegivenpath,insteadofconnectingtoamongodserver-needstolockthedatadirectory,socannotbeusedifamongodiscurrentlyaccessingthesamepath--directoryperdbifdbpathspecified,eachdbisinaseparatedirectory-d[--db]argdatabasetouse-c[--collection]argcollectiontouse(somecommands)--objcheckvalidateobjectbeforeinserting--filterargfiltertoapplybeforeinserting--dropdropeachcollectionbeforeimport--oplogReplayreplayoplogforpoint-in-timerestore[chinastor.com-root@localhostbin]#
例如我们先将”foo”库删除了:
[chinastor.com-root@localhostbin]#./mongoMongoDBshellversion:1.8.1connectingto:test>usefooswitchedtodbfoo>db.dropDatabase();{"dropped":"foo","ok":1}>showdbsadmin0.0625GBlocal(empty)test0.0625GB>
然后下面我们将演示如何恢复这个库:
[chinastor.com-root@localhostbin]#./mongorestore--directoryperdb/data/dumpconnectedto:127.0.0.1SunApr2212:01:27/data/dump/foo/t1.bsonSunApr2212:01:27goingintonamespace[foo.t1]SunApr2212:01:272objectsfoundSunApr2212:01:27/data/dump/foo/t2.bsonSunApr2212:01:27goingintonamespace[foo.t2]SunApr2212:01:271objectsfoundSunApr2212:01:27/data/dump/foo/system.users.bsonSunApr2212:01:27goingintonamespace[foo.system.users]SunApr2212:01:271objectsfoundSunApr2212:01:27/data/dump/foo/system.indexes.bsonSunApr2212:01:27goingintonamespace[foo.system.indexes]SunApr2212:01:27{name:"_id_",ns:"foo.system.users",key:{_id:1},v:0}SunApr2212:01:27{name:"_id_",ns:"foo.t2",key:{_id:1},v:0}SunApr2212:01:27{name:"_id_",ns:"foo.t1",key:{_id:1},v:0}SunApr2212:01:273objectsfound[chinastor.com-root@localhostbin]#
通过工具返回信息,我们看到的是foo中的数据已经被恢复回来了,接下来我们到库里去验证一下:
[chinastor.com-root@localhostbin]#./mongoMongoDBshellversion:1.8.1connectingto:test>usefooswitchedtodbfoo>showcollections;system.indexessystem.userst1t2>
结果证明foo库表已经被成功恢复回来了。
上述就是小编为大家分享的怎样利用MySQL学习MongoDB中的备份和恢复了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。