数据库的备份和恢复:
备份:完全备份,增量备份
完全备份:将整个数据库完整的进行备份
增量备份:在完全备份的基础之上,对后续新增的内容进行备份
备份的需求:
- 在生产环境之中,数据的安全至关重要,任何数据的丢失都可能产生非常严重的后果
- 数据为什么会丢失,程序错误,运算错误,磁盘故障,不可预期的时间,以及人为操作,所以备份非常重要
备份的方法:
冷备份:关机备份,停止mysql服务,然后进行备份
热备份:开机备份,无须关闭mysql服务,进行别发
物理备份:对数据库系统的物理文件(数据文件,日志文件),进行备份
逻辑备份:只是对数据库的逻辑组件进行备份,(表结构),以sql语句的形式,把库,表结构,表数据进行备份保存(直接在数据库系统当中删除全部文件,逻辑备份无法恢复)
物理备份:一般采用完全备份,对整个数据库进行完整的打包备份
优点:操作简单
缺点:数据库文件占用量很大的,占用空间太大,备份和恢复的时间很长,而且需要暂定数据库服务,打包备份最好是把服务关掉,避免新的数据进入,被覆盖,也可能导致恢复失败
如何进行物理备份:
演示前提:关闭数据库服务
查看需要备份的内容
打包目录
#压缩备份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
模拟删库
解压到当前目录
#解压恢复 tar Jxvf /opt/mysql_all_2020-11-22.tar.xz
模拟破坏
恢复
检测
数据迁移:
远程复制的方式
注意事项:
热备份当中的逻辑备份
这是mysql自带的工具:
Mysqldump
备份单个库:
Mysqldump -u root -p --databases 库名 > /opt/库名.sql
备份多个库:
Mysqldump -u root -p --databases ku ku1> /opt/ku.sql
备份全部库:
Mysqldump -u root -p --all-databases > /opt/ku.sql
补充命令:
mysql -u root -p123456 -e 'show databases;'
-e:指定连接mysql之后执行完命令,自动退出。
逻辑删除,可恢复表中的内容
演示备份单个:
恢复
查看
备份多个库
删库
多个库一起恢复:
备份全部库:
删库
恢复
怎么样只恢复表:
先备份
删库
恢复单个表(指定库名进行恢复)
恢复多个表
可以用sql语句的方式,直接实现两个数据库的迁移
总结:
物理冷备份和物理热备份
特点:操作简单
缺点:数据量大,占用的备份空间比较大
Mysqldump:这是mysql自带的备份文件的命令
特点:方便,简单,但是只能基于逻辑上的表结构和数据恢复,物理删除之后再用逻辑恢复会报错,也可以作为数据迁移,必然也会占用大空间,比较物理备份,相对来说占的空间小一些
演示了全量备份,库,表
增量备份:
Mysqldump也支持增量备份,没有重复数据,备份量小,时间短
Mysql增量备份恢复表数据期间,表会锁定
缺点:备份时锁表必然会影响业务,数据超过10G以后,耗时会比较长,导致服物不可用
增量备份的过程:
- mysql提供的二进制日志间间接的实现增量备份
二进制文件在怎么来,修改配置文件来
Mysql二进制日志记录格式有三种:
- STATEMENT:基于sql语句
记录修改的sql语句,高并发情况下,记录sql语句时候的顺序可能会出错,恢复数据时可能会导致丢失效率和误差,效率比较高
- ROW:基于行
精准记录每一行的数据,准确率高,恢复的时效炉比较低
- MIXED:既可以根据sql语句,也可以根据行
在正常情况下使用的是STAEMENT,一旦发生高并发,会智能自动切换到ROW行,
打开这两个服务:
log-bin=mysql-bin
binlog_format=MIXED
查看日志文件
查看表信息
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
刷新命令:(会出现新的断点)
断点:刷新之后,后续的文件会保存在刷新过的文件当中,再次刷新之后,后续的内容会保存在所在断点当中,操作都在后续断点钟操作
例如:
刷新断点
删除一行
再打一个断点,然后查看断点2,里面并没有删除的显示
查看断点1,在断点1当中
如何恢复:(在断点1中恢复)
位置恢复和时间恢复
基于位置点来进行恢复
从某一个位置点开始,恢复到最后
格式:mysqlbinlog --no-defaults --start-position='位置点' mysql-bin.000002 | mysql -u root -p
从开头,一致恢复到某个位置
格式: mysqlbinlog --no-defaults --stop-position='735' mysql-bin.000001 | mysql -u root -p
从指定点---指定点结束
格式:mysqlbinlog --no-defaults --start-position='735' --stop-position='910' mysql-bin.000001 | mysql -u root -p
基于时间点恢复:
命令:
- 从某个节点开始:
格式:mysqlbinlog --no-defalult--start-datetime='时间点'文件名|mysql -u root -p
2.从开头到指定结尾
格式:mysqlbinlog --no-defalult--stop-datetime='时间点'文件名|mysql -u root -p
- 指定时间范围
格式:mysqlbinlog --no-defalult--start-datetime='时间点' --stop-datetome='时间点' 文件名|mysql -u root -p
总结:
在生产中,通过binlog进行增量恢复是非常好用的方法
我们只需要对binlog文件进行备份,随时可以进行备份和恢复
如何打开mysql的默认日志:
查看错误日志
通用访问日志:
慢查询日志:
工具查看:
命令:
yum -y install xz
#压缩备份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
#解压恢复 tar Jxvf /opt/mysql_all_2020-11-22.tar.xz