文章目录
为什么要备份?
备份是为了:
灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作等数据丢失场景。
备份类型
完全备份:整个数据集
部分备份:只备份数据子集,如部分库或表
增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂
差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单。
冷备份:读写操作均不可进行,数据库停止服务
温备份;读操作可执行,但写操作不可执行
热备份:读写操作均可执行
MyISAM: 温备,不支持热备
InnoDB: 都支持
物理备份:直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快
逻辑备份:从数据库中“导出”数据另存而进行备份,与存储引擎无关,占用空间少,速度慢,可能丢失精度。
注意:二进制日志文件不应该与数据文件放在同一磁盘。
备份内容
备份什么?
1.数据
2.二进制日志、InnoDB的事务日志
3.用户账号,权限设置,程序代码(存储过程、函数、触发器,事件调度器)
4.服务器的配置文件
备份工具
mysqldump备份
Schema和数据存储在一起、巨大的SQL语句、单个巨大的备份文件
mysqldump是MySQL的客户端命令,通过mysql协议连接至mysql服务器进行备份
参考手册:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
命令格式
Usage: mysqldump [OPTIONS] database [tables] 支持指定数据库和指定多表的备份,但数据库本身定义不备份
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
实战案例:恢复误删除的表
案例说明:
每天凌晨2:30做完全备份,早上10:00误删除了students表,10:10才发现故障,
现在需要将数据库还原到10:10的状态,且恢复被删除的students表。
准备工作
恢复数据之前的准备工作
1.准备数据库和数据表
2.确保二进制日志已经开启
现有hellodb数据库中的students、teachers…等数据表
mysql> use hellodb;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-------------------+
7 rows in set (0.01 sec)
现students、teachers表中有如下数据
mysql> select * from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
......
| 24 | Xu Xian | 27