当前位置: 首页 > 后端技术 > Node.js

Mysql备份与恢复(一)---物理备份

时间:2023-04-03 16:25:20 Node.js

数据库对于一个企业来说比里面的数据更重要,所以做好数据库备份是必不可少的工作。及时备份数据库,可以帮助我们在数据库异常宕机时,及时利用备份数据进行恢复,将数据库宕机带来的影响降到最低。因此,本文主要介绍数据库数据的备份与恢复。由于MyISAM存储引擎中的备份数据是将表保存到一个单独的文件中,比较简单,所以这里主要介绍InnoDB存储引擎的备份恢复机制。全量备份和增量备份的区别全量备份:每次备份都要进行全量备份,所以如果数据量很大,全量备份会消耗更多的时间,给数据库带来很大的压力,但是因为每次都做全量备份都是最新的备份,恢复数据时效率更快。增量备份:只备份每天的增量日志,所以备份效率更高,对数据库的压力更小,但是在恢复数据的时候,需要从全量备份日志加上每天的增量日志来恢复数据,所以恢复数据的效率相对较低。Mysql数据备份大致分为两类:物理备份和逻辑备份。在本文中,我们首先了解物理备份。物理备份物理备份分为热备份和冷备份。冷备份冷备份是最简单的备份方法。其实就是在备份数据的时候停止Mysql服务,然后将data目录下的数据文件复制到备份地址进行存储。当Mysql崩溃时,将备份文件复制到data目录下替换即可完成数据恢复。不过一般情况下不会采用冷备份的方式,因为生产环境中通常都有业务在运行,所以不可能每次都停止Mysql服务进行备份。热备份、快照备份、物理备份一般都是热备份。热备份比冷备份有什么优势?热备可以在Mysql服务开启的情况下进行备份操作,但是热备时只会增加只读限制。热备份首先介绍的备份方法是快照备份。快照备份其实就是把所有的数据文件放在同一个分区,然后在这个分区上进行快照备份,但是快照备份只能存放在本地磁盘,如果本地磁盘出现故障,快照备份的数据可能会丢失.正是因为可能存在磁盘损坏导致数据丢失的情况,所以在生产环境中一般不采用热备份来备份数据。xtrabackup备份热备份的另一种方式是xtrabackup工具备份。2.3以下的xtrabackup工具版本不能备份MyISAM存储引擎,可以备份5.1到5.7之间的InnoDB存储引擎的数据。xtrabackup工具基于InnoDB存储引擎的崩溃恢复功能。它首先复制物理文件,然后根据日志进行恢复,保证数据的一致性。接下来我们可以看看xtrabackup工具是如何进行备份工作的。使用wget下载xtrabackup工具,使用yum命令安装:使用xtrabackup备份,命令为:xtrabackup--backup--user=root--password='123'--target-dir=/backups/**可以看到全量备份完成后会显示本次备份的lsn号,下次增量备份只会备份lsn大于该页的数据。我们可以查看一下刚才我们完整备份的数据:可以发现目录是和我们的数据库一一对应的,每个文件夹里面其实都是对应数据库的备份数据。我们可以注意到根目录下有几个文件。接下来我们看看这些文件的具体用途:ibdata1:共享表空间文件。如果在创建数据库时启用innodb_file_per_table参数,则可以使用xtrabackup工具备份单个数据库,否则默认备份所有数据库。backup-my.cnf:这个文件存放了一些关于备份的my.cnf配置信息。xtrabackup_binlog_info:该文件用于记录备份开始时二进制文件的位置。xtrabackup_checkpoints:这个文件记录了备份的一些基本信息:比如备份开始和结束的lsn号,是全量备份还是增量备份等。xtrabackup_info:这个文件记录了备份的概要信息.xtrabackup_logfile:备份日志。准备备份后的数据以获得完整可用的数据。使用命令:xtrabackup--prepare--use-memory=100M--target-dir=/backups下面是对命令几个参数的解释:--use-memory:如果不带这个参数,则prepare操作默认会占用100M内存。如果数据量很大,我们可以为use-memory指定一个更大的内存来加快prepare工作。--target-dir:备份文件所在路径,我放在/backups/。恢复数据,要恢复数据,必须保证mysql中data目录下没有数据,否则会报错。恢复数据其实就是将备份的数据复制到Mysql数据目录下,使用--copy-back参数来恢复数据。使用命令:xtrabackup--copy-back--datadir=/var/lib/mysql--target-dir=/backups/这里对命令的几个参数进行解释:--datadir:--datadir有两个方法配置:可以在my.cnf文件中指定。如果my.cnf文件没有指定该参数,恢复文件时必须指定--datadir参数。--target-dir:备份文件所在路径,我放在/backups/。接下来演示如何恢复数据:停止数据库服务,清除数据目录下的所有数据:systemctlstopmysqld.service&&rm-rf/var/lib/mysql/*恢复数据:xtrabackup--copy-back--datadir=/var/lib/mysql--target-dir=/backups/最后重启数据库:systemctlstartmysqld.service备份这里的数据,成功恢复到数据库。当然,更常用的备份方式其实是逻辑备份。使用Mysql自带的mysqldump工具进行备份操作。关于逻辑备份的知识将在下一篇文章中讲解。欢迎关注公众号:程序员周先森。欢迎关注公众号:程序员周先森。文章原发于微信公众号,本平台不定时更新。