数据库 备份和恢复

数据库的备份和恢复

备份 完全备份  与  增量备份
完全备份 将整个数据库完整的进行备份
增量备份 在完全备份的基础之上,对后续新增的内容进行备份

备份的需求

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

数据的备份

冷备份 关机备份,停止mysql的服务,然后进行备份
热备份 开机备份,无需关闭mysql服务,进行备份
物理备份 对数据库的系统物理文件(数据文件,日志文件,进行备份)
逻辑备份 对数据库的逻辑组件进行备份(表结构),以sql语句的形式把库,表结构,表数据,进行备份保存,注意(直接在数据库系统中删除所有文件,逻辑备份无法恢复)

物理备份

完整备份,对整个数据库进行完整的打包备份,打包备份最好是把数据库服务器关掉,避免有新的数据进入,被覆盖,也可能导致恢复失败
优点 操作简单
缺点 数据库文件占用量很大,占用空间太大,备份和恢复时间都很长,而且需要暂停数据服务

逻辑备份

基于热备份中的逻辑备份,
优点 方便,简单
缺点 只能给予逻辑上的表机构和表数据恢复,物理恢复之后再用逻辑恢复会报错,它也可以作为数据迁移,同样它也会占用大空间,比较物理备份相对来说占的空间要小得多

物理备份

tar -Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
#打包压缩mysql里面的data目录到 /opt目录下按当前时间(方便管理),将数据库压缩备份按当前时间命名
cd /opt
tar -Jxvf mysql_all_2023-11-06.tar.xz
#解压
cd /usr/local/mysql/ | rm -rf data/
#删掉mysql目录下的data目录
cd /opt/usr/local/mysql | cp -a data/ /usr/local/mysql/
#到备份目录opt下 保留权限复制到 mysql中


数据库2使用数据库1的data文件
scp -r [email protected]:/opt/usr/local/mysql/data /opt
#远程复制下来备份的data目录文件

chown -R mysql.mysql data
#如果不能数据库表不能读,可以看一下文件内容权限,没权限给一下权限就行

逻辑备份库

mysqldump -u root -p --databases test > /opt/test.sql
#单个库逻辑备份test库,备份文件的名字可自定义,但结尾必须为.sql

mysqldump -u root -p --databases test test1 > /opt/多个备份.sql
#逻辑备份多个库

mysqldump -u root -p --all-databases > /opt/全量备份.sql
#全量备份

mysql -u root -p -e 'drop database test';
#模拟删除test这个库

mysql -u root -p < /opt/test.sql
#恢复test这个库数据

逻辑备份表

#恢复单个表

mysqldump -u root -p test table > /opt/test_table.sql
#备份先指定库名test,再指定表名table

mysql -u root -p -e 'drop table test.table';
#模拟数据删除 -e不进入库,只执行删除table库下的table表这个命令,然后退出

mysql -u root -p test < /opt/test_table.sql
#将之前备份的文件进行恢复

#恢复多个表

mysqldump -u root -p test table1 table2 > /opt/test_table1-2.sql
#先备份表table1-2

增量备份

优点

1.没有重复数据,备份量小,时间短

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

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

增量备份的过程

STATEMNET 基于sql语句,会记录修改sql语句,在高并发请胯下,记录sql语句时候的顺序可能会出错,恢复数据时可能会导致丢失和误差,效率比较高
ROW 基于行 , 会精准记录每一行的数据,准确率高,但是恢复的时效率低
MIXED 既可以基于sql语句,也可以基于行,在正常情况下使用STATEMENT,一旦发生高并发,会智能自动切换到ROW行
#mysql提供的二进制日志间接的实现增量备份。
#二进制文件怎么来的
#修改配置文件

vim /etc/my.conf

server-id = 1
#在这行下方插入
log-bin=mysql-bin

binlog_format=MIXED

增量备份格式

#基于位置点来进行回复 
#位置点:at 6106

#从某一个点开始,恢复到最后
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




#时间点恢复
#时间点格式:2023-11-06 11:44:32

#从某个时间点开始
mysqlbinlog --no-defaults --start-detetime='时间点' 文件 | mysql  -u  root  -p

#从开头,到指定的结尾时间点
mysqlbinlog --no-defaults --stop-detetime='时间点'  文件 | mysql  -u  root  -p

#指定时间范围
mysqlbinlog --no-defaults --start-detetime='时间点' --stop-datetime='时间点' 文件名 | mysql -u root -p

在生产中,通过binlog进行增量恢复是非常好用的方法,我们只需要对binlog文件进行备份,随时可以备份和恢复

数据库日志配置文件

log-error=/usr/local/mysql/data/mysql_error.log

general_log=ON

general_log_file=/usr/local/mysql/data/mysql_general.log

slow_query_log=ON

slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log

你可能感兴趣的:(数据库)