###
简单方案



方案一:

前提是:

1系统权限/路径统一。

2停止应用连接

3执行以下 SQL 语句: flush tables with read lock;  

也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,为了保证数据的一致性.,防止导出数据库的时候有数据写入

4最好关闭mysql服务。

5需要备份其日志文件,即 ib_logfile* 文件。

 通过文件形式复制保存,备份,恢复只要复制到相应文件目录即可,无需使用其它工具备份。

完成后,在启动mysql服务。

 

方案二:

导出是:

mysqldump [OPTIONS] database [tables]

  如果你不给定任何表,整个数据库将被导出。

比如

mysqldump -u root -p –default-character-set=utf8 –opt -Q -R –skip-lock-tables mysqldb > /home/mysqldbbak.sql  

  注意,如果你运行mysqldump没有–quick–opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。

导入是:

mysqladmin create target_db_name

mysql target_db_name </home/mysqldbbak.sql  

###
为什么需要备份数据?

在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种.

  • 硬件故障
  • 软件故障
  • 自然灾害
  • 黑客攻击
  • 误操作 (占比最大)
所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据, 备份数据的策略要根据不同的应用场景进行定制, 大致有几个参考数值, 我们可以根据这些数值从而定制符合特定环境中的数据备份策略
  • 能够容忍丢失多少数据
  • 恢复数据需要多长时间
  • 需要恢复哪一些数据

###
数据的备份类型

数据的备份类型根据其自身的特性主要分为以下几组

  • 完全备份
  • 部分备份
        完全备份指的是**备份整个数据集( 即整个数据库 )**、部分备份指的是**备份部分数据集(例如: 只备份一个表)**


而部分备份又分为以下两种
  • 增量备份
  • 差异备份
        增量备份指的是**备份自上一次备份以来(增量或完全)以来变化的数据**; 特点: 节约空间、还原麻烦

        差异备份指的是**备份自上一次完全备份以来变化的数据** 特点: 浪费空间、还原比增量备份简单


&nbsp;

###
MySQL备份数据的方式

<font size="3">MySQl</font>中我们备份数据一般有几种方式

  • 热备份
  • 温备份
  • 冷备份
        热备份指的是当数据库进行备份时, **数据库的读写操作均不是受影响 **

        温备份指的是当数据库进行备份时, **数据库的读操作可以执行, 但是不能执行写操作**

        冷备份指的是当数据库进行备份时, **数据库不能进行读写操作, 即数据库要下线**


`<font size="3">MySQL</font>`中进行不同方式的备份还要考虑存储引擎是否支持
  • MyISAM
  • [ ] 热备
  • [x] 温备
  • [x] 冷备
  • InnoDB
  • [x] 热备
  • [x] 温备
  • [x] 冷备
我们在考虑完数据在备份时, 数据库的运行状态之后还需要考虑对于`<font size="3">MySQL</font>`数据库中数据的备份方式
  • 物理备份
  • 逻辑备份
物理备份一般就是**通过`<font size="3">tar</font>`,`<font size="3">cp</font>`等命令直接打包复制数据库的数据文件**达到备份的效果

逻辑备份一般就是**通过特定工具从数据库中导出数据并另存备份**(逻辑备份会丢失数据精度)

###
备份需要考虑的问题

定制备份策略前, 我们还需要考虑一些问题

**我们要备份什么?**


一般情况下, 我们需要备份的数据分为以下几种
  • 数据
  • 二进制日志, InnoDB事务日志
  • 代码(存储过程、存储函数、触发器、事件调度器)
  • 服务器配置文件
**备份工具**


<font size="3" style="background-color: inherit;">这里我们列举出常用的几种备份工具

`mysqldump` : 逻辑备份工具, 适用于所有的存储引擎, 支持温备、完全备份、部分备份、对于**InnoDB**存储引擎支持热备

`cp, tar 等归档复制工具`: &nbsp;物理备份工具, 适用于所有的存储引擎, 冷备、完全备份、部分备份

`lvm2 snapshot`: 几乎热备, 借助文件系统管理工具进行备份

`mysqlhotcopy`: 名不副实的的一个工具, 几乎冷备, 仅支持**MyISAM**存储引擎

`xtrabackup`: 一款非常强大的**InnoDB/XtraDB**热备工具, &nbsp;支持完全备份、增量备份, 由`percona`提供</font>

###
设计合适的备份策略

针对不同的场景下, 我们应该制定不同的备份策略对数据库进行备份, 一般情况下, 备份策略一般为以下三种

  • 直接cp,tar复制数据库文件
  • mysqldump+复制BIN LOGS
  • lvm2快照+复制BIN LOGS
  • xtrabackup
以上的几种解决方案分别针对于不同的场景
  1. 如果数据量较小, 可以使用第一种方式, 直接复制数据库文件
  1. 如果数据量还行, 可以使用第二种方式, 先使用mysqldump对数据库进行完全备份, 然后定期备份BINARY LOG达到增量备份的效果
  1. 如果数据量一般, 而又不过分影响业务运行, 可以使用第三种方式, 使用<font size="3">lvm2</font>的快照对数据文件进行备份, 而后定期备份BINARY LOG达到增量备份的效果
  1. 如果数据量很大, 而又不过分影响业务运行, 可以使用第四种方式, 使用<font size="3">xtrabackup</font>进行完全备份后, 定期使用<font size="3">xtrabackup</font>进行增量备份或差异备份

###
总结















































备份方法

备份速度

恢复速度

便捷性

功能

一般用于

cp





一般、灵活性低

很弱

少量数据备份

mysqldump





一般、可无视存储引擎的差异

一般

中小型数据量的备份

lvm2快照





一般、支持几乎热备、速度快

一般

中小型数据量的备份

xtrabackup

较快

较快

实现innodb热备、对存储引擎有要求

强大

较大规模的备份