数据备份

概念解释

数据备份是为了尽可能快地全盘恢复运行计算机系统所需的数据和系统信息,是系统灾难恢复的前提之一。

从备份模式的角度来说,分为物理备份逻辑备份

  • 物理备份:物理备份是磁盘块为基本单位将数据从主机复制到备机。

冷备份:数据库关闭的情况下进行备份。

1
2
3
4
5
6
7
8
9
10
11
以 mysql 为例,查看 my.cnf 中配置的 datadir,直接对该文件进行备份,适用于数据少的数据库,快速且安全。
备份
systemctl stop mysqld
tar zcvf /backupPath/date.tar.gz /datadir/

还原
tar zxvf /backupPath/date.tar.gz -C /datadir/
chown mysql:mysql -R /datadir/
systemctl start mysqld

也可以指定单个数据库进行备份

热备份:数据库处于正常运行的时候备份,可保证服务的可用性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysqldump 多种备份方式

全库备份
mysqldump -uroot -pyourpasswd --all-databases > /backupPath/backup.sql

指定库备份
mysqldump -uroot -pyourpasswd --databases databasename > /backupPath/backup.sql

指定库指定表
mysqldump -uroot -pyourpasswd --databases databasename tablename > /backupPath/backup.sql

跨服务器导库
mysqldump --host=ipA -uroot -pyourpasswd --databases databasename -C | mysql --host=ipB -uroot -pyourpasswd

还原

source /opt/linuxfan_it_neirong.sql
  • 逻辑备份:逻辑备份是以文件为基本单位将数据从主机复制到备机。

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

差异备份:备份自上次完全备份到现在发生改变的数据库内容。

增量备份:备份至上次完全备份或增量备份后被修改的数据库内容。

完全备份和差异备份
在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则你只需要还原星期一完全的备份和星期四的差异备份。这种策略备份数据需要较少的时间,但还原数据使用较少的时间。

完全备份和增量备份
在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。这种策略备份数据需要较少的时间,但还原数据使用较多的时间。

各种备份方式的适用场景

oracle 最简单的备份(导入、导出)

su -oracle

sqlplus

conn / as sysdba

导出并删除原数据

exp username/password@databases_ip:1521/orcl file=/path/filename.dmp

drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

如果有进程占用当前库,那么删除不了。

创建表空间用户并导入数据

create tablespace xxxDATA datafile ‘/home/oracle/app/oracle/oradata/orcl/xxxDATA.dbf’ size 512m autoextend on next 50m maxsize 2048m extent management local;
–创建用户
drop user xxxDATA cascade;
create user xxxDATA identified by password default tablespace xxxDATA;
–授权
grant all privileges to xxxDATA;
grant connect to xxxDATA;
grant dba to xxxDATA;
– Grant/Revoke object privileges
grant execute, read on directory dpdata to xxxDATA with grant option;
grant connect to xxxDATA with admin option;
grant dba to xxxDATA with admin option;
grant exp_full_database to xxxDATA with admin option;
grant imp_full_database to xxxDATA with admin option;
grant gather_system_statistics to xxxDATA with admin option;

imp username/password file=/path/filename.dmp ignore=y fromuser=XXX touser=XXX

数据库全库备份

数据库单个库备份

发现的问题

数据备份不全面,凡是具有价值的数据都应备份。

通过备份服务器创建定时任务,触发需备份的服务器内的备份脚本,然后将需要备份的数据 scp 发送过来,这种方式值得借鉴,但是里面有几点可以改进的地方。第一,定时任务不要放在一个脚本中执行,最好分类执行多个脚本;第二,备份时的日志需要按照格式做好记录;第三,如果考虑到备份数据库的容量问题,我们可以只保留一定时间内的数据;第四,针对所备份的数据量大小,应该采取不同的备份策略,以达到备份和恢复的高效。