数据备份的重要性
在生产环境中,数据库的安全性是至关重要的,任何数据库的丢失都可能产生严重的后果
造成数据库丢失的原因
- 程序错误
- 人为失误
- 计算机失败
- 磁盘失败
- 灾难
数据库备份的分类1-1
从物理与逻辑的角度,备份可分为
① 物理备份:对对数据库操作系统的物理文件的备份
- 物理备份又可分为脱机备份(冷备份)和联机备份(热备份)
冷备份:是在关闭数据库的时候进行
热备份:数据库处于运行状态,这种备份方法依赖于数据库的日 志文件
② 逻辑备份:对数据库逻辑组件的备份
数据库备份的分类1-2
从数据库的备份策略角度,备份可分为
- 完全备份:每次对数据库进行完整的备份
- 差异备份:备份那些自从上次完全备份之后被修改过的文件
- 增量备份:自有哪些在上次完全备份或增量备份之后被修改的文件才会被备份
Mysql完全备份1-1
- 完全备份是对整个数据库的备份,数据库结构的文件结构的备份
- 完全备份保存的是备份完成时刻的数据库
- 完全备份是增量备份的基础
Mysql完全备份1-2
① 完全备份的优点
备份与恢复操作简单方便
② 完全备份的缺点
数据存在大量的重复
占用大量的备份空间
备份与恢复时间长
mysqldump备份数据库
mysql数据库的备份可以采用用多种方式
- 直接打包数据文件夹,如/usr/local/mysql/data
- 使用专用备份工具mysqldump
mysqldump命令
- mysql自带的备份工具,相当方便对MySQL进行备份
- 通过该命令工具可以将指定的库,表或全部的库导出为sql脚本,在需要恢复时可进行数据恢复
1、mysqldump对单个数据库进行完全备份
mysqldump -uroot -pabc123 mysql > /opt/ccc.sql
2、mysqldump对多个数据库进行完全备份
mysqldump -u root -pabc123 --databases school mysql > /opt/aa.sql
3、mysqldump对所有库进行完全备份
mysqldump -uroot -pabc123 --opt --all-databases > /opt/bb.sql
4、mysqldump备份表
在实际生产环境中,存在对某个特定表的维护操作,此时mysqldump同样发挥重大作用
mysqldump -uroot -pabc123 school info > /opt/cc.sql
5、mysqldump对表中结构进行备份
mysqldump -uroot -pabc123 -d school info > /opt/cc.sql
6、按日期打包备份
tar Jcvf /opt/mysql-$(data +%F).tar.xz /usr/local/mysql/data/
恢复数据
使用mysqldump命令导出的sql备份脚本,在进行数据恢复时可使用一下方法导入
- source命令
- mysql命令
使用source恢复数据库的步骤
- 登录到mysql数据库
- 执行source备份sql脚本的路径
恢复表的操作
- 恢复表时同样可以使用source或者mysql命令进行
- source恢复表的操作与恢复库的操作相同
- 当备份文件中只包含表的备份,而不包括创建库的语句时,必须指定库命,且目标库必须存在
- 生产环境中,可以使用shell脚本自动实现定期备份
① source恢复表法
先删除表,假设表丢失
输入:source /opt/cc.sql 恢复路径
② mysql恢复数据
数据库丢失
在Linux输入:mysql -uroot -pabc123 school < /opt/aa.sql
mysql数据库增量恢复
① 一般恢复
② 基于位置恢复
就是将某一个起点时间的二进制日志导入数据库中,从而跳过某个发生错误的时间点实现数据恢复
③ 基于时间点恢复
使用基于时间点的恢复,可能会出现一个时间点即同时纯在正确的操作又存在错误的操作,所以我们需要一种更为精确的回复方式
时间点恢复
1、开启二进制日志
#修改配置文件
vim /etc/my.cnf
#重启服务
systemctl restart mysqld
2、完整备份
mysqldump -uroot -pabc123 school > /opt/school.sql
3、产生增量备份的日志文件
4、添加字段(正常操作添加字段)
误删除sti01(误删操作字段)
在添加字段(正常操作添加字段)
5、在linux输入:
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 > /opt/bak.txt
进入vim bak.txt 查看操作记录文件
保存第二次误操作的时间和下一次正常操作的时间
200107 17:36:57
200107 17:37:39
6、进入mysql数据库
删除info
拉取linux里初始保存的shcool.sql文件
5、在linux
恢复数据到指定时间(注意时间格式!)
mysqlbinlog --no-defaults --stop-datetime='2020-01-07 17:36:57' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123
mysqlbinlog --no-defaults --start-datetime='2020-01-07 17:37:39' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123
②位置恢复
删除01,02,恢复原始表
进去vim bak.txt
恢复数据到指定位置
mysqlbinlog --no-defaults --stop-position='568' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123
mysqlbinlog --no-defaults --start-position='672' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -pabc123