数据库备份与恢复

您所在的位置:网站首页 简述数据的备份和恢复的操作方法有哪些 数据库备份与恢复

数据库备份与恢复

2023-06-16 20:40| 来源: 网络整理| 查看: 265

微信公众号:云计算通俗讲义

持续输出技术干货,欢迎关注!

通过本文你将了解:

背景概述数据备份数据恢复01 背景

备份恢复的几个重要理由:

1、灾难恢复

2、审计

3、测试

4、误操作恢复

02 概述2.1 frm

与表相关的元数据信息都存放在.frm文件中,主要是表结构的定义信息,不论什么存储引擎,每一个表都会有一个以表名命名的.frm文件。

2.2 .MYD和.MYI

.MYD:MY Data,是MyISAM存储引擎专用的用于存放MyISAM表的数据;

.MYI:MY Index,也是专属于MyISAM存储引擎的主要存放MyISAM表的索引相关信息。

2.3 .ibd和.ibdata

两者都是专属于InnoDB存储引擎的数据库文件。

之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置文件决定是使用共享表空间还是独享表空间存放数据。独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件。如果选用共享存储表空间来存放数据,则会使用ibdata文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata文件。

03 数据备份3.1 背景

在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失,大概分为以下几种:

1、硬件故障

2、软件故障

3、自然灾害

4、黑客攻击

5、误操作 (占比最大)

所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据, 备份数据的策略要根据不同的应用场景进行定制, 大致有几个参考数值, 我们可以根据这些数值从而定制符合特定环境中的数据备份策略:

1、能够容忍丢失多少数据

2、恢复数据需要多长时间

3、需要恢复哪一些数据

一般情况下, 我们需要备份的数据分为以下几种:

1、数据

2、二进制日志, InnoDB事务日志

3、代码(存储过程、存储函数、触发器、事件调度器)

4、服务器配置文件

3.2 分类

根据备份数据集可以分为:

1、完全备份

备份整个数据集( 即整个数据库 )。

2、部分备份

备份部分数据集。

部分备份又分为:

1、增量备份

备份自上一次备份以来(增量或完全)以来变化的数据,节约空间,但是还原麻烦。

2、差异备份

备份自上一次完全备份以来变化的数据,浪费空间,但是还原比增量备份简单。

根据备份时数据库运行状态可以分为:

1、热备份

当数据库进行备份时, 数据库的读写操作均不是受影响。

2、温备份

当数据库进行备份时, 数据库的读操作可以执行, 但是不能执行写操作。

3、冷备份

当数据库进行备份时, 数据库不能进行读写操作, 即数据库要下线。

根据数据库中数据的备份方式可以分为:

1、物理备份

一般就是通过tar,cp等命令直接打包复制数据库的数据文件达到备份的效果,逻辑备份会丢失数据精度。

2、逻辑备份

一般就是通过特定工具从数据库中导出数据并另存备份。

3.3 备份策略

一般情况下, 备份策略一般为以下几种:

1、使用cp/tar复制数据库文件

2、mysqldump+复制binlog

3、LVM快照+复制binlog

4、xtrabackup专业第三方备份工具

以上的几种解决方案分别针对于不同的场景:

1、如果数据量较小, 可以使用第一种方式,直接复制数据库文件;

2、如果数据量还行,可以使用第二种方式,先使用mysqldump对数据库进行完全备份,然后定期备份binlog达到增量备份的效果;

3、如果数据量一般,而又不过分影响业务运行,可以使用第三种方式,使用lvm2的快照对数据文件进行备份后,定期备份binlog达到增量备份的效果;

4、如果数据量很大,而又不过分影响业务运行,可以使用第四种方式,使用xtrabackup进行完全备份后,定期使用xtrabackup进行增量备份或差异备份。

3.4 逻辑备份

1、mysqldump

mysqldump先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换成一条INSERT语句。然后通过这些语句,就能够创建表并插入数据。

1)备份一个数据库

mysqldump-uusername-pdbnametable1table2...->BackupName.sql

其中:

dbname参数表示数据库的名称;

table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;

BackupName.sql参数表设计备份文件的名称。

2)备份多个数据库

mysqldump-u user -p''--databases db1 db2 > Backup.sql

加上了--databases选项,然后后面跟多个数据库

3)备份所有数据库

mysqldump-u username -p -all-databases > BackupName.sql

2、SELECT INTO OUTFILE

MySQL中,可以使用SELECT...INTO OUTFILE语句将表的内容导出为一个文本文件。其基本的语法格式如下:

SELECT[列名]FROMtable[WHERE语句]INTOOUTFILE'目标文件'[OPTION];

OPTION参数为可选参数选项,其可能的取值有:

FIELDS TERMINATED BY '字符串':设置字符串为字段之间的分隔符,可以为单个或多个字符。默认值是“\t”。

FIELDS ENCLOSED BY '字符':设置字符来括住字段的值,只能为单个字符。默认情况下不使用任何符号。

FIELDS OPTIONALLY ENCLOSED BY '字符':设置字符来括住CHAR、VARCHAR和TEXT等字符型字段。默认情况下不使用任何符号。

FIELDS ESCAPED BY '字符':设置转义字符,只能为单个字符。默认值为“\”。

LINES STARTING BY '字符串':设置每行数据开头的字符,可以为单个或多个字符。默认情况下不使用任何字符。

LINES TERMINATED BY '字符串':设置每行数据结尾的字符,可以为单个或多个字符。默认值是“\n”。

FIELDS和LINES两个子句都是自选的,但是如果两个子句都被指定了,FIELDS必须位于LINES的前面。

3、文件系统快照

Logical VolumeManager(LVM)提供了对任意一个LogicalVolume(LV)做“快照”(snapshot)的功能,以此来获得一个分区的状态一致性备份。

3.5 物理备份

1、cp/tar直接复制整个数据库目录

MySQL有一种非常简单的备份方法,就是将MySQL中的数据库文件直接复制出来。这是最简单,速度最快的方法。

如果在复制数据库的过程中还有数据写入,就会造成数据不一致。这种情况在开发环境可以,但是在生产环境中很难允许备份服务器。

注意:这种方法不适用于InnoDB存储引擎的表,而对于MyISAM存储引擎的表很方便。同时,还原时MySQL的版本最好相同。

2、使用mysqlhotcopy工具快速备份

热备份,支持不停止MySQL服务器备份。mysqlhotcopy的备份方式比mysqldump快。mysqlhotcopy是一个perl脚本,主要在Linux系统下使用。

原理:先将需要备份的数据库加上一个读锁,然后用FLUSH TABLES将内存中的数据写回到硬盘上的数据库,最后,把需要备份的数据库文件复制到目标目录。

命令格式如下:

[root@localhost ~]#mysqlhotcopy [option] dbname1 dbname2 backupDir/

dbname:数据库名称;

backupDir:备份到哪个文件夹下;

常用选项:

--help:查看mysqlhotcopy帮助;

--allowold:如果备份目录下存在相同的备份文件,将旧的备份文件加上_old;

--keepold:如果备份目录下存在相同的备份文件,不删除旧的备份文件,而是将旧的文件重命名;

--flushlog:本次备份之后,将对数据库的更新记录到日志中;

--noindices:只备份数据文件,不备份索引文件;

--user=用户名:用来指定用户名,可以用-u代替;

--password=密码:用来指定密码,可以用-p代替。使用-p时,密码与-p之间没有空格;

--port=端口号:用来指定访问端口,可以用-P代替;

--socket=socket文件:用来指定socket文件,可以用-S代替。

3、ibbackup

ibbackup是innodb公司的一个热备份工具,专门对innodb存储引擎进行物理热备份,此工具是收费的,不能免费使用。

4、Xtrabackup

一款非常强大的InnoDB/XtraDB热备工具, 支持完全备份、增量备份, 由percona提供。

5、MEB

MEB(MySQL Enterprise Backup)是MySQL商业版中提供的备份工具,属于物理备份。

同XtraBackup一样,mysqlbackup的使用过程同样包含如下三个步骤:备份(--backup)-> 应用日志(--apply-log)-> 恢复(--copy-back)。

04 数据恢复4.1 背景

通常需要从备份恢复数据的场景有如下几种:

1、误删库

2、误删表

3、误删列

4、误删数据文件

5、表空间损坏或出现坏块

根据场景来说,我们可以大致分为两类:

第一类为不可逆恢复,也就是通常的DDL,比如上述的1、2、3、5等场景;

第二类为可逆的恢复,通常可以利用binlog进行回滚(要求binlog格式为ROW,binlog_image为FULL),也就是对应上述的场景4。

4.2 原理

1、全备恢复(异机恢复)

假设备份在远程机器,那么需要做如下操作来进行全备恢复:

1)将备份数据拷贝到目标机器上;

2)解压文件,apply redo log;

4)更改文件权限;

5)实例启动。

2、增备恢复

按照备份方案,需要通过binlog来完成增量数据的恢复。对于binlog恢复,我们通常需要以下几个步骤:

1)确定需要恢复的起始点,即全备对应的binlog位点;

2)解析主库的binlog,确定误删数据的位点,作为我们恢复的终点;

3)利用mysqlbinlog —start-position —stop-position+管道的方式,将binlog恢复到目标实例上。

4.3 思路

1、利用mysqldump+二进制日志实现备份

2、利用LVM快照+二进制日志实现备份

3、利用xrabackup等第三方工具实现备份

4.4 逻辑恢复

1、mysqldump

还原mysqldump命令备份的数据库,语法如下:

mysql-uroot-p[dbname]

2、mysqladmin

mysqladmin-uroot -p create db_namemysql -uroot -p db_name < /backup/mysqldump/db_name.db

注:在导入备份数据库前,db_name如果没有,是需要创建的;而且与db_name.db中数据库名是一样的才可以导入。

3、source

soure方法:

mysql >use db_namemysql> source /backup/mysqldump/db_name.db

4、mysqlimport

5、LOAD DATA INFILE

如果是通过SELECT INTO OUTFILE导出的符号分割文件,可以使用LOAD DATA INFILE通过相同的参数来加载。也可以使用mysqlimport,这是LOAD DATA INFILE的一个包装。

6、alter table xxx import tablespace

将需要备份的数据库表文件.frm和.ibd文件拷贝到对应的目录下,在当前的数据库上执行建表语句,创建一个与待备份表一样的空表。

然后执行释放表空间语句:

altertablexxxdroptablespace; //此时删除data目录下该表对应的ibd文件

然后将对应的ibd文件拷贝到这个目录,接着执行:

altertablexxximporttablespace;

4.5 物理恢复

1、还原直接复制目录的备份

通过这种方式还原时,必须保证两个MySQL数据库的版本号是相同的。MyISAM类型的表有效,对于InnoDB类型的表不可用,InnoDB表的表空间不能直接复制。

2、ibbackup

3、Xtrabackup

4、MEB



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3