数据库备份的重要性

在生产环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果。数据备份的重要性主要体现在;

(1)提高系统的高可用性和灾难可恢复性,在数据库系统崩溃时,没有数据库备份就没法恢复数据

(2)使用数据库备份还原数据库,是数据库崩溃时提供数据恢复最小代价的最优方案,如果让用户重新添加数据,未免代价太大

(3)没有数据就没有一切,数据库备份是一种防范灾难的强有力手段

造成数据丢失的原因:

1)程序错误

2)人为误操作

3)计算机失败(系统崩溃)

4)磁盘失败

5)灾难(如火灾,地震)和偷窃

数据库备份的分类:

(1)物理备份;指对数据库操作系统的物理文件(如数据文件,日志文件等)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份)

          冷备份:在关闭数据库时进行的备份操作,能够较好地保证数据库的完整性

          热备份:在数据库运行状态中进行备份,这种备份方法依赖于数据库的日志文件

(2)逻辑备份:指对数据库逻辑组件(如表等数据库对象)的备份

从数据库备份策略角度,备份可分为完全备份,差异备份和增量备份

         1)完全备份:每次对数据进行完整的备份。可以备份整个数据库,包含用户表,系统表,索引,视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间。所以,做一次完全备份的周期要长些

         2)差异备份:备份那些自从上次完全备份之后被修改过的文件,只备份数据库部分内容,它比最初的完全备份小,因为只包含自上次完全备份以来所改变的数据库,优点是存储和恢复速度快

        3)增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份

举例  create database school;

      create table info(id int, nsme char(10));

      insert into info values(1,’qw’);

     --------------完全备份-------------------------

       insert into info values(2,’as’);

---------------------增量备份--------------------------

       insert into info values(3,’zs’);

------------------增量备份和差异备份-----------------

        insert into info values(4,’er’);

这次增量备份只备份4,而差异备份则备份2,3,4

差异备份只备份上次完全备份之后的内容

增量备份则备份基于上次备份之后增加的部分进行备份

Mysql完全备份

1,使用tar打包文件夹备份

mysql的数据库文件默认都是保存在安装目录的data文件夹下,可以直接保存data文件夹,但是占用的空间大,所以使用tar打包压缩进行保存

(1)数据库文件很大,要使用压缩率较大的xz格式,

yum -y install xz         #安装压缩工具xz

tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data       #选项为大写字母J

Mysql完全备份与恢复_第1张图片  

Mysql完全备份与恢复_第2张图片

2,使用mysqldump工具备份

前面介绍的对Mysql整个数据库目录压缩的方式,是备份数据库中所有内容。使用mysqldump工具可以更加灵活的控制备份的内容,比如某几个表或库都可以单独备份。备份之后的文件是一个sql脚本,.sql结尾是固定格式

(1)备份表数据

mysqldump -u 用户名 -p 密码 选项 数据库名 表名 > /备份路径/备份文件名

mysqldump -u root -p school info >/opt/info.sql

Mysql完全备份与恢复_第3张图片

(2)单个库备份

mysqldump -u 用户名 -p 密码 选项 数据库名 >/备份路径/备份文件名

mysqldump -u root -p school >/opt/school.sql

Mysql完全备份与恢复_第4张图片

(3)多个库备份

mysqldump -u 用户名 -p 密码 选项 --databases 库名1 库名2 >/备份路径/备份文件名

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

1

(4)对所有库进行完全备份

mysqldump -u 用户名 -p 密码 选项 --all-databases >/备份路径/备份文件名

mysqldump -u root -p --all-databases >/opt/all.sql

Mysql完全备份与恢复_第5张图片

(5)备份表结构

mysqldump -u 用户名 -p 密码 -d 数据库名 表名 >/备份路径/备份文件名

mysqldump -u root -p -d school info >/opt/info-d.sql

Mysql完全备份与恢复_第6张图片

Mysqul数据完全恢复

当需要恢复数据库的时候,可以使用source命令和mysql命令

1,source命令整库恢复

在库school已经备份的前提下进行恢复

mysqldump -u root -p school >/opt/school.sql

Mysql完全备份与恢复_第7张图片

 Mysql完全备份与恢复_第8张图片

2,mysql命令整库恢复

同样也是在库school已经备份的前提下进行恢复

(1)mysqldump -u root -p school >/opt/school.sql   #只备份库school里面的表内容,而库本身school没有备份,恢复数据时则要先创建库school,才能恢复

Mysql完全备份与恢复_第9张图片














 Mysql完全备份与恢复_第10张图片



 

(2)mysqldump -u root -p --databases school >/opt/school01.sql     #连同库school本身和里面的表都会备份,恢复时直接恢复即可

Mysql完全备份与恢复_第11张图片

Mysql完全备份与恢复_第12张图片

恢复表操作

1,使用source命令恢复表

在数据表已经备份的前提下进行恢复操作

mysqldump -u root -p school info >/opt/info.sql

Mysql完全备份与恢复_第13张图片

Mysql完全备份与恢复_第14张图片

2,使用mysql恢复数据表

同样也是在数据表已经备份的前提下进行恢复操作

mysqldump -u root -p school info >/opt/info.sql

mysql -u 用户名 -p 密码 库名

Mysql完全备份与恢复_第15张图片


Mysql完全备份与恢复_第16张图片