且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MySQL备份

更新时间:2022-04-04 18:07:06

MySQL备份



官网地址:https://dev.mysql.com/doc/refman/5.7/en/backup-and-recovery.html




MySQL支持的备份类型如下图所示:

MySQL备份 

根据备份方法,备份可以分为如下3

热备份Hot Backup:热备份也称为在线备份(Online Backup),是指在数据库运行的过程中进行备份,对生产环境中的数据库运行没有任何影响。常见的热备方案是利用mysqldumpXtraBackup等工具进行备份。

冷备份Cold Backup:冷备也称为离线备份(Offline Backup),是指在数据库关闭的情况下进行备份,这种备份非常简单,只需要关闭数据库,复制相关的物理文件即可。目前,线上数据库一般很少能够接受关闭数据库,所以该备份方式很少使用。

温备份Warm Backup:温备份也是在数据库运行的过程中进行备份,但是备份会对数据库操作有所影响。该备份利用锁表的原理备份数据库,由于影响了数据库的操作,故该备份方式也很少使用。

根据备份文件的种类,备份可以分为如下Physical (Raw) Versus Logical Backups

物理备份Physical Backup:物理备份也称为裸文件备份(Raw Backup),是指复制数据库的物理文件。物理备份即可以在数据库运行的情况下进行备份(常见备份工具:MySQL Enterprise Backup(商业)、XtraBackup等),也可以在数据库关闭的情况下进行备份。该备份方式不仅备份速度快,而且恢复速度也快,但是由于无法查看备份后的内容,所以只能等到恢复之后,才能检验备份出来的数据是否是正确的。

逻辑备份(Logical Backup:逻辑备份是指备份文件的内容是可读的,该文本一般都是由一条条SQL语句或者表的实际数据组成。常见的逻辑备份方式有mysqldumpSELECT ... INTO OUTFILE等方法。这类备份方法的好处是可以观察备份后的文件内容,缺点是恢复时间往往都会很长。逻辑备份的最大优点是对于各种存储引擎都可以用同样的方法来备份;而物理备份则不同,不同的存储引擎有着不同的备份方法。因此,对于不同存储引擎混合的数据库,用逻辑备份会更简单一些。

根据备份内容,备份可以划分为如下3

全量备份Full Backup:全量备份(完全备份)是指对数据库进行一次完整的备份,备份所有的数据,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。这是一般常见的备份方式,可以使用该备份快速恢复数据库,或者搭建从库。恢复速度也是最快的,但是每次备份会消耗较多的磁盘空间,并且备份时间较长。所以,一般推荐一周做一次全量备份

增量备份(Incremental Backup):增量备份也叫差异备份是指基于上次完整备份或增量备份,对数据新增的修改进行备份。这种备份方式有利于减少备份时使用的磁盘空间,加快备份速度。但是恢复的时候速度较慢,并且操作相对复杂。推荐每天做一次增量备份。

日志备份Binary Log Backup):日志备份是指对数据库二进制日志的备份。二进制日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。该备份方式一般与上面的全量备份或增量备份结合使用,可以使数据库恢复到任意位置。所以,推荐每小时甚至更频繁的备份二进制日志。

在生产环境上,一般都会选择物理备份为主,逻辑备份为辅,加上日志备份,来满足线上使用数据库的需求。



物理备份

Physical backups consist of raw copies of the directories and files that store database contents. This type of backup is suitable for large, important databases that need to be recovered quickly when problems occur.
  • 1
  • 1
  • 定义 
    物理备份就是把MySQL存储好的所有文件保存下来。比如创建一个数据库db之后,mysql会在datadir/目录下面创建一个db的目录,那么这个目录下面的所有文件保存下来,就是物理备份。

  • 适用: 
    物理备份适用于大数据量的备份,比如你有好几G的数据,那你就适合使用物理备份;

  • 典型方法: 
    1.文件系统命令:cp,scp,tar,rsync; 
    2.系统快照snapshot;

  • 特征: 
    1.由数据库文件和目录组成,是mysql数据目录的全部或者部分; 
    2.一般备份比逻辑备份快,因为纯属是文件复制,不用像逻辑备份那样,需要做sql的转换; 
    3.备份的粒度比逻辑备份小,因为是全文件复制了,当然比sql要精确一些; 
    4.物理备份的文件可以不仅是数据库,还可以是数据库的日志,配置文件; 
    5.备份memory存储引擎的数据就麻烦了,因为memory的数据不是存储在硬盘的; 
    6.mysql服务器不运行的时候可以进行备份,而逻辑备份需要mysql-server处理运行状态; 
    7.mysqlbackup程序命令,可以帮助innodb的数据进行备份;而直接使用文件系统的命令(cp,scp,tar,rsync)等,就可以对myisam的数据进行备份;

逻辑备份

Logical backups save information represented as logical database structure (CREATE DATABASE, CREATE TABLE statements) and content (INSERT statements or delimited-text files). 
This type of backup is suitable for smaller amounts of data where you might edit the data values or table structure, or recreate the data on a different machine architecture. 
  • 1
  • 1
  • 定义 
    逻辑备份就是把数据库的结构定义语句,数据内容的插入语句,全部存储下来。然后恢复的时候,在另一个mysql服务器执行这些语句,就可以创建另一个与之前一样的数据库了。

  • 典型的方法: 
    1.mysqldump程序可以把对远程/本地数据库进行逻辑备份. 
    2.SELECT ..... INTO OUTFILE可以把数据进行逻辑备份,但备份文件只能存储在mysql-server的机器上;

  • 适用:这种比较适合数据量少的数据库。

  • 特点: 
    1.逻辑备份通过查询数据库的信息进行备份; 
    2.速度比较慢。因为获取了信息,然后组装成sql语句,如果调用命令是远程,还要把sql语句远程传输; 
    3.备份文件要比物理备份大; 
    4.备份粒度只能到表; 
    5.没有日志或者配置文件; 
    6.备份文件是sql语句,逻辑语句,相对来说,可移植性要好。比如我在linux备份了,可以在windows进行恢复,物理备份就不行;

全量备份与增量备份

上面所说的,都是全量备份,一般增量备份,都是通过mysql-server的二进制文件进行增量备份;

增量备份的恢复

增量备份的恢复,是先恢复某个时间点A的全量备份,然后再把从A开始之后的二进制文件进行应用,从而完成恢复;



MySQL备份 MySQL备份和还原系列一:备份类型
2014-07-23 16:54:49
标签:备份 sql 数据库
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://skypegnu1.blog.51cto.com/8991766/1501442

一、备份类型

    对于数据库来说,最基本的工作就是数据库的备份与恢复,在意外情况下(服务器宕机/或者磁盘损损坏)要保证数据不丢失。

在实体关系模型中,我们知道有三种关系:一对一

1、按照mysql服务器状态区分(备份过程中,服务器是否继续提供服务)

  • cold Backup      离线备份,读、写操作均中止

  • warm Backup   仅可执行读操作

  • hot Backup       读、写操作不受影响

hot备份指在数据库运行中直接备份,对正在运行的服务没有任何影响。

cold备份指在数据库停止的情况下进行备份,比较简单,只需要拷贝相关的物理文件即可。

warm备份同样是数据库运行时进行,但是对当前的数据库有所影响。


2、按照备份数据格式

  • logical     将数据导出至文本文件中,备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现,适用于数据库升级、迁移工作,但是恢复时花的时间比较长。

  • physical    文件系统层面直接拷贝数据文件,但真正备份的时候自然不是cp这么简单


3、数据存储方式

  • full                    完全备份

  • increamenta    增量备份   

  • differential       差异备份

差异备份的定义:备份自上一次完全备份之后有变化的数据。

增量备份的定义:备份自上一次备份(包括完全备份,增量备份,差异备份)之后有变化的数据。


二、备份工具

MySQL备份

主要按照逻辑备份还是物理备份分成两类进行说明:

逻辑备份:速度相对较慢,可能丢失浮点数精度,可移植性强。

物理备份:速度非常快,在文件系统级完成。


1、逻辑备份(将数据导出至文本文件中)

  • mysqldump 

    mysqldump是采用SQL级别的备份机制,将数据表导成SQL脚本文件,是最常用的逻辑备份方法。

    ALL        WARM    支持所有引擎,MyISAM引擎是逻辑温备,可手动加锁

    INNODB     HOT     逻辑热备,仅用于INODB引擎

  • SELECT INTO OUTFILE

    进行SQL级别的表备份,逻辑


2、物理备份(直接备份数据文件)

  • ibbackup

    INNODBHOT对于INNODB引擎,热备,物理备份

    ALLWARM    其他引擎,温备

    ibbackup 商业工具 MyISAM是温备份,InnoDB是热备份 ,备份和还原速度都很快,这个软件它的每服务器授权版本是5000美元。

  • xtrabackup

    xtrabackup 开源工具 MyISAM是温备份,InnoDB是热备份 ,是ibbackup商业工具的替代工具。

  • snapshot(LVM,ZFS)

    ALLALMOST     物理 HOT

    热备、支持所有基于本地磁盘的存储引擎、快速备份、低开销、容易保持完整性、快速恢复等。

  • 几乎是热备份,支持所有引擎,基于快照(LVM,ZFS)的物理备份,速度非常快。只影响数据几秒钟而已。但是创建快照的过程本身就影响到了数据库在线的使用,所以备份速度比较快,恢复速度比较快,没有什么弹性空间,而且LVM的限制:不能对多个逻辑卷同一时间进行备份,所以数据文件和事务日志等各种文件必须放在同一个LVM上。而ZFS则非常好的可以在多逻辑卷之间备份。

  • mysqlhotcopy

    仅MYISAMMOSTLY COLD(LVM,snapshot)

    mysqlhotcopy是一个perl程序,是lock tables、flush tables 和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表文件、数据文件、索引文件)所在的机器上。

    物理备份工具,但只支持MyISAM引擎,基本上属于冷备的范畴,物理备份,速度比较快。

    mysqldump可以备份各种类型的数据表,但是mysqlhotcopy只适合备份MyISAM和ISAM的数据表。所以使用mysqlhotcopy之前,你必须确认你的数据表是不是有其他的存储引擎(storage engines)的。

  • tar,cp冷备

    使用直接拷贝数据库文件的方式进行打包备份,需要注意的是执行步骤:锁表、备份、解表。恢复也很简单,直接拷贝到之前的数据库文件的存放目录即可。注意:对于Innodb引擎的表来说,还需要备份日志文件,即ib_logfile*文件。因为当Innodb表损坏时,就可以依靠这些日志文件来恢复。cp 冷备份,支持所有引擎,复制命令,只能实现冷备,物理备份。使用归档工具,cp命令,对其进行备份的,备份速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差。


  • 使用mysql主从复制

    mysql的复制是指将主数据库的DDL和DML操作通过二进制文件(bin-log)传送到从服务器上,然后在从服务器上对这些日志做重新执行的操作,从而使得从服务器和主服务器保持数据的同步。


三、备份策略

备份/恢复策略:

  1. 要定期做 mysql 备份,并考虑系统可以承受的恢复时间。

  2. 确保 mysql 打开 log-bin,有了 binarylog,mysql 才可以在必要的时候做完整恢复,或基于时间点的恢复,或基于位置的恢复。

  3. 要经常做备份恢复测试,确保备份是有效的,并且是可以恢复的。

备份什么?

  • 数据文件

  • my.cnf 配置文件

  • 二进制日志

  • 事务日志


因为MySQL表保存为文件方式,很容易备份。要想保持备份的一致性,对相关表执行LOCK TABLES操作,然后对表执行FLUSH TABLES。

你只需要读锁定;这样当你复制数据库目录中的文件时,允许其它客户继续查询表。需要FLUSH TABLES语句来确保开始备份前将所有激活的索引页写入硬盘。


策略一:直接拷贝数据库文件(文件系统备份工具 cp)(适合小型数据库,是最可靠的)


    当你使用直接备份方法时,必须保证表不在被使用。如果服务器在你正在拷贝一个表时改变它,拷贝就失去意义。保证你的拷贝完整性的***方法是关闭服务器,拷贝文件,然后重启服务器。如果你不想关闭服务器,要在执行表检查的同时锁定服务器。如果服务器在运行,相同的制约也适用于拷贝文件,而且你应该使用相同的锁定协议让服务器“安静下来”。当你完成了备份时,需要重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。


策略二:mysqldump备份数据库(完全备份+增加备份,速度相对较慢,适合中小型数据库)(MyISAM是温备份,InnoDB是热备份)

mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump 比直接拷贝要慢些。对于中等级别业务量的系统来说,备份策略可以这么定:第一次完全备份,每天一次增量备份,每周再做一次完全备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,***的办法就是采用主从复制机制(replication),在 slave 机器上做备份。


策略三:lvs快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份,速度快适合比较烦忙的数据库


前提:

  • 数据文件要在逻辑卷上;

  • 此逻辑卷所在卷组必须有足够空间使用快照卷;

  • 数据文件和事务日志要在同一个逻辑卷上;


策略四:xtrabackup 备份数据库,实现完全热备份与增量热备份(MyISAM是温备份,InnoDB是热备份)


说明:Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup或ibbackup的一个很好的替代品。

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

  • xtrabackup 只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表。

  • innobackupex 是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

特点:

  • 备份过程快速、可靠;

  • 备份过程不会打断正在执行的事务;

  • 能够基于压缩等功能节约磁盘空间和流量;

  • 自动实现备份检验;

  • 还原速度快;


策略五:主从复制(replication)实现数据库实时备份(集群中常用)


参考:

http://freeloda.blog.51cto.com/2033581/1254883


本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1501442

MySQL备份 使用Xtrabackup进行MySQL备份
2014-07-24 13:18:46

一、xtrabackup 

1、简介

 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

 

通过xtrabackup 可实现完全热备份与增量热备份(MyISAM是温备份,InnoDB是热备份)

2、安装

    其最新版的软件可从 https://www.percona.com/software/mysql-database/percona-xtrabackup 获得。

 
                  
 
     
  
 
 
  
 
 
  
  

    

>      
>       
>          
>  

    

 

    

 

    

   

  

  

 

 

 

    

   

 

 

 

 

     

  

  

    
  


    

 

 

   

    

    

 

 

 

      >  

           >  

   

 

 

 

 

 

   

 

>      

>      

>       

 

 

 

 

 

 

    
 

    > 
    
 

     
 


 

    
 

 


 

 













&

MySQL备份MySQL备份MySQL备份MySQL备份

           

MySQL备份
MySQL备份
MySQL备份
MySQL备份