MYSQL备份和恢复

发布时间:2023年12月17日

数据库的备份和恢复:

备份:完全备份 增量备份

完全备份:将整个数据库完整的进行备份

增量备份:在完全备份的基础之上,对后续新增的内容进行备份

备份的需求:

  1. 在生产环境中,数据的安全至关重要,任何数据的丢失都可能产生非常严重的后果。
  2. 数据为什么会丢失,程序操作,运算错误,磁盘故障,不可预期的时间(地震之类),人为操作。

冷备份:关机备份,停止mysql服务然后进行备份

热备份:开机备份,无须关闭mysql服务,进行备份

物理备份:对数据库系统的物理文件(数据文件,日志文件)进行备份。

逻辑备份:只是对数据库的逻辑组件(表结构)进行备份。以sql语句的形式,把库,表结构,表数据进行备份保存。(直接在数据库系统中删除全部文件,逻辑备份无法恢复)

物理备份:完全备份,对整个数据库进行完整的打包备份。

优点:操作简单

缺点:数据库文件占用量是很大的,占用空间太大,备份和恢复的时间都很长。而且需要暂停数据库服务

打包备份最好是把服务关掉,避免有新的数据进入,被覆盖。也可能会导致恢复失败

实验:

物理备份

先在外部创建两个表

内部先停止mysql服务

所有的数据都在/usr/local/mysql/data目录下

安装高压缩的压缩工具xz

yum -y install xz

开始打包

tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data

解压包到当前目录

?tar Jxvf mysql_all_2023-11-06.tar.xz

删除data

数据迁移:

先备份

远程复制另一台服务器的数据

保留权限复制并重启

赋权

热备份当中的逻辑备份。

这是mysql自带的工具:

mysqldump

只能在命令行执行

备份库

mysqldump -u root -p123456 --databases kgc > /opt/kgc.sql

备份多个库

mysqldump -u root -p123456 --databases kgc kgc1 > /opt/kgc1.sql

备份所有库

mysqldump -u root -p123456 --all-databases > /opt/kgc3.sql

mysql -u root -p123456 -e 'show databases;'

-e:指定连接mysql之后执行完命令,自动退出。

逻辑备份实验:

备份

mysqldump -u root -p --databases kgc1 > /opt/kgc.sql

逻辑删除和查询

物理删除会炸裂

逻辑删除和恢复表

先备份表

删除表

恢复表

(也可以恢复到其他库)

删除和恢复多个表

备份

删除

恢复

物理冷备份和热备份

?缺点:数据量大,占用的备份空间比较大

Mysqldump:这是mysql自带的备份文件的命令

特点:方便,简单。但是只能基于逻辑上的表结构和表数据恢复。物理删除之后再用逻辑恢复会报错。他也可以作为数据迁移。占用大空间,比较物理备份相对来说占的空间要小的多。

增量备份:

Mysqldumo支持增量备份。

没有重复数据,备份量小,时间端

mysqldump增量备份恢复数据期间,表会锁定

缺点:备份时锁表,必然会影响业务。超过10G,耗时会比较长,导致服务不可用

增量备份过程:

mysql提供的二进制日志间接的实现增量备份

修改配置文件:

vim /etc/my.cnf

mysql二进制日志记录格式有三种:

  1. STATMNET:基于sql语句

记录修改的sql语句,高并发情况下,记录sql语句时候的顺序可能会出错,恢复数据时可能会导致丢失和误差,效率比较高。

  1. ROW:基于行

精确记录每一行的数据,准确率高,但是恢复的时效率低

3.MIXED:既可以根据sql语句,也可以根据行

在正常情况下使用STATEMENT,一旦发生高并发,会智能自动切换到ROW行。

查看备份的二进制文件内容

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

刷新

?mysqladmin -u root -p flush-logs

恢复????????

基于位置点来进行恢复:

从某一个点开始,恢复到最后

mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql - u root -p

位置点

从开头,一直恢复到某个位置

mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql - u root -p

从指定点-----指点结束点。

mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 文件名 | mysql - u root -p

基于时间点进行恢复:

1、从某个时间点开始:

mysqlbinlog --no-defaults --start-datetime='时间点' 文件 | mysql -u root -p

时间点

2、从开头,到指定的结尾时间点:

mysqlbinlog --no-defaults --stop-datetime='时间点' 文件 | mysql -u root -p

3、指定时间范围:

mysqlbinlog --no-defaults --start-datetime='时间点' --stop-datetime='时间点' 文件 | mysql -u root -p

文章来源:https://blog.csdn.net/DDYYmmm/article/details/135035125
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。