
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据备份是程序员保护数据安全常用的一种方法,而今天我们就通过案例分析来了解一下,数据库常见的备份方法都有哪些。
a)通过数据库全库冷备份:
如在Master刚刚启动之后,还没有应用程序连接上Master之前,通过执行SHOWMaster STATUS 命令从Master端获取到我们可以使用的LogPosition。如果我们无法在Master启动之后控制应用程序的连接,那么可能在我们还没有来得及执行SHOWMaster STATUS 命令之前就已经有数据写进来了,这时候我们可以通过mysqlbinlog客户端程序分析Master新的一个BinaryLog 来获取其一个有效的LogPosition。
b)通过LVM或者ZFS等具有snapshot功能的软件进行"热备份"
文件系统运行在LVM上面,那么我们都可以通过相关的命令对MySQL的数据文件和日志文件所在的目录就做一个Snapshot,这样就可以得到了一个基本和全库冷备差不多的备份集。为了保证我们的备份集数据能够完整且一致,我们需要在进行Snapshot过程中通过相关命令(FLUSHTABLES WITH READ LOCK)来锁住所有表的写操作,在做完Snapshot之后,我们就可以UNLOCKTABLES 了
因为加了锁,所以更容易获得logposition : SHOW MASTER STATUS
c)mysqldump 客户端程序
如果不能停机冷备份,而且也没有运行在b)上的文件系统,就需要使用mysqldump客户端程序.
可以锁定表(不支持事务,FLUSH TABLES WITH READ LOCK), 或者—single-transaction选项(支持事务)来保持数据的完整性.
获得logposition: 使用mysqldump的 --master-data
d)通过现有某一个Slave端进行“热备份”
如果现在已经有Slave从我们需要搭建Replication环境的Master上进行复制的话,那我们这个备份集就非常容易取得了。。我们可以暂时性的停掉现有Slave(如果有多台则仅仅只需要停止其中的一台).同时执行一次FLUSHTABLES 命令来刷新所有表和索引的数据。这时候在该Slave上面就不会再有任何的写入操作了,我们既可以通过copy所有的数据文件和日志文件来做一个全备份,同时也可以通过Snapshot(如果支持)来进行备份。
通过现有Slave来获取备份集的方式,不仅仅得到数据库备份的方式很简单,连所需要LogPosition,甚至是新Slave后期的配置等相关动作都可以省略掉,只需要新的Slave完全基于这个备份集来启动,就可以正常从Master进行复制了。
整个过程中我们仅仅只是在短暂时间内停止了某台现有Slave的复制线程,对系统的正常服务影响很小,所以这种方式也基本可以称之为“热备份”。
a)恢复全库冷备份集
由于这个备份集是一个完整的数据库物理备份,我们仅仅只需要将这个备份集通过FTP或者是SCP之类的网络传输软件复制到Slave所在的主机,根据Slave上my.cnf配置文件的设置,将文件存放在相应的目录,覆盖现有所有的数据和日志等相关文件,然后再启动Slave端的MySQL,就完成了整个恢复过程。
b)恢复对Master进行Snapshot得到的备份集
对于通过对Master进行Snapshot所得到的备份集,实际上和全库冷备的恢复方法基本一样,的差别只是先需要将该Snapshot通过相应的文件系统mount到某个目录下,然后才能进行后续的文件拷贝操作。之后的相关操作和恢复全库冷备份集基本一致,就不再累述。
c)恢复mysqldump得到的备份集
通过mysqldump客户端程序所得到的备份集,和前面两种备份集的恢复方式有较大的差别。因为前面两种备份集的都属于物理备份,而通过mysqldump客户端程序所做的备份属于逻辑备份。恢复mysqldump备份集的方式是通过mysql客户端程序来执行备份文件中的所有SQL语句。
d)恢复通过现有Slave所得到的热备份
通过现有Slave所得到的备份集和上面一种或者二种备份集也差不多。如果是通过直接拷贝数据和日志文件所得到的备份集,那么就和全库冷备一样的备份方式,如果是通过Snapshot得到的备份集,就和二种备份恢复方式完全一致。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。