1.备份概述:
备份:能够防止机械故障以及人为操作失误带来的数据丢失,例如将数据库文件保存在其他地方。
冗余:数据有多份冗余,但不等于备份,只能防止机械故障带来的数据丢失,例如主备模式、数据库集群。
1.备份内容:
1.数据文件
2.配置文件 =》 my.cnf
3.日志文件(主要是二进制文件)
2.扩展:mysql体系结构
1.存储引擎层(MYISAM与INNODB区别):
MYISAM:查询速度快,支持表级锁,支持全文索引
INNODB:支持事务,支持行级锁,支持外键
2. 存储层(MYISAM与INNODB区别):
MYISAM 在data目录对应数据库里生成三个文件
.frm :表结构框架文件
.MYD:表数据文件
.MYI:表索引文件
INNODB在该目录下生成两个文件并且在data目录下生成了一个文件
.ibd :表索引以及表数据文件
ibdata1:此文件是innodb引擎生成的数据库中所有表的共享的一个公共文件
综上:MYISAM可以直接保存以上三个文件去做备份 ,INNODB不可以,需要专业工具去做备份
2.日志文件
此处主要记录两种类型:
error错误日志:存放数据库的启动,停止或运行时的错误信息 ,一般存放在/data下 文件名为 主机名.err或者mysql.err
binlog二进制日志:1.记录数据库的所有更改操作,2.主要应用于主从复制中,master将二进制日志中的更改操作发送个slave,保证主从一致。3.其次可以用于数据恢复,4.默认关闭 5.通过
2.备份必须考虑的因素
3.备份类型
4.备份方法
全量备份:备份所有数据
增量备份:基于全量备份,备份变化部分
5.mysql逻辑备份
1.mysql表级备份
导出的是sql语句文件,优点是无论什么引擎都可以使用mysqldump备成sql文件,缺点就是速度慢不支持增量备份,导入时可能格式不兼容
基本语法:
单表备份
mysqldump 数据库名 表名 > 目标路径线下的备份文件 -p 密码
单表恢复
mysql 数据库名 < .sql文件位置 -p 密码
或者进入mysql某个库中
source sql文件路径
2.mysql库级备份
mysqldump --databases 库名 > 备份文件全路径 -p 密码
还原与单表一样
3.mysql全库备份
前提:需要开启二进制日志
语法
mysqldump --all-databases --master-data --single-transaction > 备份文件全路径 -p 密码
还原:
mysql < 备份文件 -p 密码
4.mysqldump + binlog实现增量备份
核心思路:1.要有全量备份 2.增删查该数据 3.再次需要备份时,不需要进行全量备份,只需要备份binlog日志文件即可(binlog记录数据库增删改的所有sql)
1.准备数据,开启二进制日志(默认关闭)
2.做全量备份
mysqldump --all-databases --master-data=2 --flush-logs --single-transaction > 备份文件全路径 -p 密码
加入--flush-logs 参数刷新了二进制日志文件(刷新后的二进制文件记录此次全量备份后的增删改sql记录)
3.做完备份后做增删改操作
4.模拟故障(类似于删库)
drop database 库名
5.立即备份二进制binlog文件,并全库恢复(此时恢复的不全)
1.复制二进制文件
cp binlog路径/binlog.00001.log 目标路径
2.全库恢复(此时恢复的不全)
mysql < 备份文件 -p 密码
6.通过binlog增量备份
先分析 mysqlbinlog binlog文件 ,如下图at对应的数值是备份后对数据库操作的起始位置,寻找事故位置对应的临界点的at数值(可根据故障时间或者drop类似的操作来判断)
还原方法:
mysqlbinlog --start-position=4 --stop-position=xxx 备份文件 |mysql -p 密码