备份的目的:当数据是一种重要资产时,我们需要经常对其进行备份,以防止数据损坏时,能够及时将它恢复到损坏时的状态。    

 

备份内容:数据、配置文件、二进制日志、事务日志

备份分类:

    备份类型:

      热备份、温备份和冷备份

      热备份:读、写不受影响;

      温备份:仅可以执行读操作;

       冷备份:离线备份;读、写操作均中止;

    物理备份和逻辑备份

       物理备份:复制数据文件;

       逻辑备份:将数据导出至文本文件中;

   完全备份、增量备份和差异备份;

       完全备份:备份全部数据;

       增量备份:仅备份上次完全备份或增量备份以后变化的数据;

     差异备份:仅备份上次完全备份以来变化的数据

 

备份工具:xtrabackup, mysqldump               

MyISAM引擎只能支持温备份,InnoDB可以支持热备和温备。

 

备份策略:完全+增量;完全+差异

 

mysqldump备份工具介绍

 mysqldump 语法

 mysqldump DB_NAME [tb1] [tb2] 只备份某个数据库,或库中某个表,注:它不包含该数据库的名称,即将来要还原时,必须手动创建数据库

 --master-data={0|1|2}

   0::不记录二进制日志文件及位置:

   1 CHANGE MASTER TO 的方式记录位置,可用于恢复后直接启动从服务器:

   2 CHANGE MASTER TO 的方式记录位置,但默认被注释:

 --lock-all-tables:锁定所有表 MyISAM引擎的表开始备份前,先锁定所有表。

 --flush-logs :备份前,锁定表,执行日志滚动

 —single-transaction 启动热备


 如果指定库中的表均为InnoDB,可以用—single-transaction 启动热备:

   --events 备份事件,备份数据库定义的事件调度器

   --routines 备份存储过程和存储函数 

   --triggers 备份触发器

   备份多个库

   --all-databases: 备份所有库

   --databases DB_NAME,DB_NAME,…备份指定库

   这两个命令由于不止备份一个库,所有还原前可以不用手动创建库。

 

 

测试环境: MySQL 版本:mysql-5.1.73-8

       Linux发行版:CentOS6.8

实验前准备:

1、创建数据库jiaowu tutors表,如下

 

        创建数据库教务:mysql> CREATE DATABASE jiaowu;

        创建tutors表:

CREATE TABLE `tutors` (

  `TID` smallint(5) unsigned NOT NULL AUTO_INCREMENT,

  `Tname` varchar(50) NOT NULL,

  `Gender` enum('F','M') DEFAULT 'M',

  `Age` tinyint(3) unsigned DEFAULT NULL,

  UNIQUE KEY `TID` (`TID`)

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;  // 创建表结构

 

INSERT INTO `tutors` VALUES  // 插入表数据

(1,'HongQigong','M',93),(2,'HuangYaoshi','M',63),(3,'Miejueshitai','F',72),(4,'OuYangfeng','M',76),(5,'YiDeng','M',90),(6,'YuCanghai','M',56),(7,'Jinlunfawang','M',67),(8,'HuYidao','M',42),(9,'NingZhongze','F',49);

    2、启用二进制日志

     在配置文件/etc/my.cnf [mysqld]添加 log-bin=mysql-bin mysql-bin表示二进制日志名称);然后重启服务:service mysqld restart

     查看bin_log是否开启:mysql> SELECT @@sql_log_bin;  1:表示开启