备份的目的:当数据是一种重要资产时,我们需要经常对其进行备份,以防止数据损坏时,能够及时将它恢复到损坏时的状态。
备份内容:数据、配置文件、二进制日志、事务日志
备份分类:
备份类型:
热备份、温备份和冷备份
热备份:读、写不受影响;
温备份:仅可以执行读操作;
冷备份:离线备份;读、写操作均中止;
物理备份和逻辑备份
物理备份:复制数据文件;
逻辑备份:将数据导出至文本文件中;
完全备份、增量备份和差异备份;
完全备份:备份全部数据;
增量备份:仅备份上次完全备份或增量备份以后变化的数据;
差异备份:仅备份上次完全备份以来变化的数据
备份工具: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:表示开启