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

数据库对企业来讲最重要的莫过于其中的数据,因此作好数据库的备份是一个不可或缺的工做。数据库及时备份能够帮助咱们在数据库出现异常宕机时及时的使用备份数据进行恢复工做,将由于数据库宕机产生的影响下降到最小。因此,本篇文章主要数据库数据备份与恢复进行介绍。因为MyISAM存储引擎中备份数据是将表保存到单独的文件因此比较简单,因此这里我主要针对InnoDB存储引擎介绍备份与恢复机制。mysql

全量备份与增量备份的区别sql

全量备份:数据库

每次备份都进行全量备份,因此若是数据量大的状况下,进行全量备份会消耗较多的时间且对数据库压力比较大,可是因为全量备份每次都是最新的备份,因此恢复数据的时候效率更快。微信

增量备份:工具

只备份天天增量的日志,因此备份时效率更高对数据库压力也较小,可是恢复回复数据时就须要从全量备份日志加上天天的增量日志去进行恢复数据,因此恢复数据效率比较低。日志

Mysql数据备份大体分为2类:物理备份与逻辑备份。本篇文章咱们先看看物理备份。blog

物理备份内存

物理备份分为热备份和冷备份。get

冷备份innodb

冷备份是最简单的备份方式,其实就是在备份数据时停掉Mysql服务,而后将data目录下的数据文件拷贝到备份地址进行存储。当Mysql出现宕机时,将备份文件拷贝到data目录替换便可完成数据恢复。可是通常状况下不使用冷备份的方式,由于生产环境下通常都有业务在跑,因此不可能每次备份都中止Mysql服务去进行备份工做。

热备份

快照备份

物理备份通常还有一种方式就是热备份,热备份相比于冷备份的好处在哪呢?热备份能够在Mysql服务开启的状况下执行备份操做,只是在热备份时会添加只读这类型的限制。热备份第一种介绍的备份方式就是快照备份。快照备份其实就是将全部的数据文件放置在同一个分区,而后对这个分区进行快照备份,可是快照备份只能存储在本地磁盘,若是本地磁盘出现故障,则可能出现快照备份数据的丢失。正是因为可能存在磁盘损坏致使数据丢失的状况下,因此生产环境下通常也不会使用热备份去备份数据。

xtrabackup备份

热备份另外一种方式就是xtrabackup工具有份。xtrabackup工具2.3版本如下没法备份MyISAM存储引擎,它能够备份5.1到5.7之间版本的InnoDB存储引擎的数据。xtrabackup工具是基于InnoDB存储引擎的crash-recovery功能,先复制物理文件,再根据log进行恢复,保证数据一致性。接下来咱们能够一块儿看看xtrabackup工具如何进行备份工做。

  • 使用wget下载xtrabackup工具并使用yum命令安装:
    file

  • 使用xtrabackup备份,命令为:

  • xtrabackup --backup --user=root --password='123' --target-dir=/backups/**

file

能够看到,全量备份完成会显示当前备份的lsn号,下次进行增量备份就只会备份lsn大于此页的数据。咱们能够查看下咱们刚才全量备份的数据:
file

能够发现目录恰好和咱们的数据库一一对应,每一个文件夹中实际上就是对应数据库的备份数据。咱们能够注意到根目录下还有几个文件,接下来咱们来看下这几个文件的具体用途:

  • ibdata1:共享表空间文件,建立数据库时若是开启innodb_file_per_table参数,才可使用xtrabackup工具有份单个数据库,不然默认都是所有数据库都进行备份。

  • backup-my.cnf:此文件存储一些my.cnf的有关于备份的配置信息。

  • xtrabackup_binlog_info:这个文件是用来记录备份开始时二进制文件的位置。

  • xtrabackup_checkpoints:这个文件记录备份的一些基本信息:好比备份开始和结束的lsn号,是全量备份仍是增量备份等信息。

  • xtrabackup_info:这个文件记录备份的概要信息。

  • xtrabackup_logfile:备份的日志。

  1. 将通过backup的数据进行prepare获得完整可用的数据,使用命令:
  • xtrabackup --prepare --use-memory=100M --target-dir=/backups

file

这里对命令几个参数作下解释:
--use-memory:该参数不带则默认prepare操做占用100M内存,若是数据量大咱们能够将use-memory指定更大的内存加快prepare工做。

--target-dir:备份文件所在路径,我是放在/backups/。

  1. 恢复数据,恢复数据必须保证mysql中data目录不能存在任何数据,不然会报错。恢复数据实际上就是将备份数据拷贝到Mysql的data目录下,恢复数据使用--copy-back参数。使用命令:
  • xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/

这里对命令几个参数作下解释:

--datadir:--datadir有两个方法进行配置:能够在my.cnf文件中指定,若是my.cnf文件没有指定该参数则恢复文件时必须指定--datadir参数。
--target-dir:备份文件所在路径,我是放在/backups/。

接下来演示下如何进行数据恢复:
中止数据库服务而且清掉data目录下全部数据:
systemctl stop mysqld.service && rm -rf /var/lib/mysql/*

恢复数据:

  • xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/
    file

最后,重启数据库:

  • systemctl start mysqld.service

到这里备份数据就成功进行恢复到数据库中了。固然更经常使用的备份方式实际上是逻辑备份,使用Mysql自带mysqldump工具进行备份操做,关于逻辑备份的知识将在下一篇进行讲解。

欢迎关注公众号:程序猿周先森。
file

欢迎关注公众号:程序猿周先森。文章原创于微信公众号,本平台不定时更新。

相关文章
相关标签/搜索