一 备份的重要性
备份的主要目的是灾难的恢复。在生产环境中,数据的安全性至关重要,任何数据的丢失都可能造成严重的后果。
造成数据丢失的原因:
程序错误
人为操作错误
运算错误
磁盘故障
灾难(如火灾、地震)和盗窃
二 备份的类型
2.1 物理备份
数据库备份可以分为物理备份和逻辑备份,物理备份是对数据操作系统的物理文件(如数据文件、日志文件等)的
备份。这种类型的备份适用于在出现问题的时候需要快速恢复的大型重要数据库。
物理备份又可以分成冷备份(脱机备份)、热备份(联机备份)和温备份。
冷备份(脱机备份):是在关闭数据库的时候进行的(tar)。
热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件(mysqlhotcopy mysqlbackup)。
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作(mysqldump)。 (1)冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将要害性文
件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。
冷备份的优点是:
是非常快速的备份方法(只需拷文件)
轻易归档(简单拷贝即可)
轻易恢复到某个时间点上(只需将文件再拷贝回去)
能与归档方法相结合,做数据库“最佳状态”的恢复
低度维护,高度安全
(2)热备份
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。所以,假如你有昨天夜里的一个
冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在
Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。
热备份的命令文件由三部分组成:
数据文件一个表空间的备份
设置表空间为备份状态
备份表空间的数据文件
回复表空间为正常状态
备份归档log文件
临时停止归档进程
log下那些在archive rede log目标目录中的文件
重新启动archive进程
备份归档的redo log文件
用alter database bachup controlfile命令来备份控制文件热备份的优点可在表空间或数据库文件级备份,备份的时间短。
备份时数据库仍可使用。
可达到秒级恢复(恢复到某一时间点上)。
可对几乎所有数据库实体做恢复。
恢复是快速的,在大多数情况下爱数据库仍工作时恢复。
三 备份策略
1、完全备份
每次对数据进行完整备份,即对整个数据库、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是
差异备份与增量备份的基础完全备份的备份与恢复操作都非常简单方便,但是数据存在大量的重复并且会占用大量
的磁盘空间,备份的时间也很长。
每次都进行完全备份,会导致备份文件占用空间巨大,并且有大量的重复数据,恢复时,直接使用完全备份的文件即可。
优点:
备份与恢复操作简单方便
缺点:
数据存在大量的重复
占用大量的备份空间
备份与恢复时间长
2、差异备份
备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,备份数据量会越来越
大。恢复数据时只需要恢复上次的完全备份与最佳的一次差异备份。每次差异备份,都会备份上一次完全备份之后
的数据,可能会出现重复数据。恢复时,先恢复完全备份的数据,再恢复差异备份的数据。
3、增量备份
只有那些在上次完全备份或者增量备份后被修改的文件才会被备份以上次完整备份或上次增量备份的时间为时间
点,仅备份期间内的数据变化,因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整
备份开始到最后一次增量备份之间的所有增量依次恢复,如中间某次的备份数据损坏,将导致数据的丢失每次增量
备份都是在备份在上一次完全备份或者增量备份之后的数据,不会出现重复数据的情况,也不会占用额外的磁盘空
间。恢复数据,需要按照次序恢复完全备份和增量备份的数据。
冷备份实验
192.168.163.130
systemctl stop firewalld #二台机器关闭防火墙
setenforce 0 #关闭selinux
systemctl stop mysqld #关闭mysqld
scp -r /var/lib/mysql 192.168.163.140:/opt/ #将130数据库拷贝到140
tar zcvf /opt/mysql_bak.tar.gz /var/lib/mysql #或者压缩mysql到opt下
scp /opt/mysql_bak.tar.gz 192.168.163.140:/opt/ #在传输到140的opt下
192.168.163.140
cp -r /var/lib/mysql mysql.bak #先备份140的本身数据库
mv /opt/mysql /var/lib/mysql #将opt下的mysql移动到var/lib下
systemctl start mysqld #启动140数据库
mysql -uroot -p'Admin@123' #登录mysql
show databases; #查看数据库
增量备份
192.168.163.130
vim /etc/my.cnf
log-bin = mysql-bin
server-id = 1
systemctl restart mysqld
ls -l /var/lib/mysql-bin.*
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
#进入数据库 mysql -uroot -p'Admin@123'
#创建一个数据库ck create database ck;
#使用ck数据库 use ck;
#创建一个表boa create table boa(id int,name char(10),age int);
#在插入一些数据 insert boa values( .....);
#在用命令查看日志
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
生成一个新的日志
mysqladmin -u root -p flush-logs
删除一条记录
delete from boa where id=1;
cp /var/lib/mysql/mysql-bin.000001 /opt/ #将日志复制到opt下因为之前数据是在000001里面的
mysqlbinlog --no-defaults /opt/mysql-bin.000001 | mysql -u root -pAdmin@123 #用这个命令可以将数据恢复