首页 数据库 mysql教程 RDS中的MYSQL备份恢复_MySQL

RDS中的MYSQL备份恢复_MySQL

Jun 01, 2016 pm 01:12 PM
开源软件 用户登录

RDS使用mysqldump对 MySQL 数据库进行逻辑全量备份,使用开源软件Xtrabackup进行物理全量备份,是实例级别的备份。

用户登录RDS控制台,可以下载备份文件。按照 利用逻辑备份文件恢复到自建数据库-MySQL和利用物理备份文件恢复到自建数据库-MySQL中的操作步骤,实现数据的恢复。

本文主要从原理的角度来介绍MySQL数据库的备份和恢复,希望能让用户更加了解RDS的备份恢复机制。

一、备份类型介绍

1. 按备份操作方式:物理备份和逻辑备份

备份方式

优点

缺点

逻辑备份

1. 逻辑备份是可以用编译器或像grep和sed之类的命令查看和操作的普通文件;2. 恢复简单,非常灵活;3. 与存储引擎无关。 1. 还原时需要mysql加载和解释语句,转化为存储格式,并重建索引,所以会比较慢;2. 无法保证导出后再还原出来的一定是同样的数据。浮点数、软件BUG等都会导致问题;3. 必须由数据库服务器完成生成逻辑备份的工作,因此要使用更多的CPU周期。

物理备份

1. 基于文件的物理备份,只需要将需要的文件复制到其他地方即可完成备份;2. 恢复更简单;3. 恢复快,因为MySQL服务器不需要执行任何SQL或构建索引。 1. InnoDB的原始文件通常比相应的逻辑备份要大得多;2. 物理备份不总是可以跨平台、操作系统及MySQL版本。文件名大小写敏感和浮点格式可能会遇到麻烦。

2. 按是否备份全部数据:完全备份和增量备份

完全备份:备份全部需要备份的数据

增量备份:仅备份上次完全备份或增量备份以后变化的数据

二、使用Mysqldump进行逻辑备份恢复

1. 备份数据库

mysqldump作为重要的MySQL备份工具,功能相当强大。备份参数、恢复策略,需要仔细研究。

(1)基本语法

备份单个数据库或单个数据库中的指定表:

mysqldump [OPTIONS] database [tb1] [tb2]…

备份多个数据库:

mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3...]

备份所有数据库:

mysqldump [OPTIONS] –all-databases [OPTIONS]

(2)选项[OPTIONS]说明

–default-character-set=charset

指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。

–lock-all-tables,-x

在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 –single-transaction 和 –lock-tables 选项。

–lock-tables

和 –lock-all-tables 类似,不过是锁定当前导出的数据表,而不是锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 –single-transaction 选项。

–no-create-info,-t

只导出数据,而不添加 CREATE TABLE 语句。

–no-data, -d

只导出数据库表结构,不导出任何数据。

–opt

这只是一个快捷选项,等同于同时添加 –add-drop-tables –add-locking –create-option –disable-keys –extended-insert –lock-tables –quick –set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 –skip-opt 禁用。注意,如果运行 mysqldump 没有指定 –quick 或 –opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。

–quick,-q

该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。

–routines,-R

导出存储过程以及自定义函数。

–single-transaction

该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。

本选项和 –lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 –quick 选项。

–triggers

同时导出触发器。该选项默认启用,用 –skip-triggers 禁用它。

2.恢复数据库

RDS实现的是实例级别的逻辑备份,可以发现解压出来的都是实例里面各个数据库的sql文件。再执行数据库的导入操作:

mysql -hhostname -uusername -ppassword databasename 

三、使用Xtrabackup进行物理备份恢复

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

Xtrabackup中主要包含两个工具:

xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;

innobackupex:是将xtrabackup进行封装的perl脚本,可以备份和恢复MyISAM表以及数据表结构。

1.innobackupex工作原理

官方文档:http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/how_innobackupex_works.html

备份

如果在程序启动阶段未指定模式,innobackupex将会默认以备份模式启动。

默认情况下,此脚本以–suspend-at-end选项启动xtrabackup,然后xtrabackup程序开始拷贝InnoDB数据文件。当xtrabackup程序执行结束,innobackupex将会发现xtrabackup创建了xtrabackupsuspended2文件,然后执行FLUSH TABLES WITH READ LOCK,此语句对所有的数据库表加读锁,然后开始拷贝其他类型的文件。

如果–ibbackup未指定,innobackupex将会自行尝试确定使用的xtrabackup的binary。其确定binary的逻辑如下:首先判断备份目录中xtrabackup_binary文件是否存在,如果存在,此脚本将会依据此文件确定使用的xtrabackup binary。否则,脚本将会尝试连接database server,通过server版本确定binary。如果连接无法建立,xtrabackup将会失败,需要自行指定binary文件。

在binary被确定后,将会检查到数据库server的连接是否可以建立。其执行逻辑是:建立连接、执行query、关闭连接。若一切正常,xtrabackup将以子进程的方式启动。

FLUSH TABLES WITH READ LOCK是为了备份MyISAM和其他非InnoDB类型的表,此语句在xtrabackup已经备份InnoDB数据和日志文件后执行。在这之后,将会备份 .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, .par, and .opt 类型的文件。

当所有上述文件备份完成后,innobackupex脚本将会恢复xtrabackup的执行,等待其备份上述逻辑执行过程中生成的事务日志文件。接下来,表被解锁,slave被启动,到server的连接被关闭。接下来,脚本会删掉xtrabackupsuspended2文件,允许xtrabackup进程退出。

恢复

为了恢复一个备份,innobackupex需要以–copy-back选项启动。

innobackupex将会首先通过my.cnf文件读取如下变量:datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir,并确定这些目录存在。

接下来,此脚本将会首先拷贝MyISAM表、索引文件、其他类型的文件(如:.frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par and .opt files),接下来拷贝InnoDB表数据文件,最后拷贝日志文件。拷贝执行时将会保留文件属性,在使用备份文件启动MySQL前,可能需要更改文件的owener(如从拷贝文件的user更改到mysql用户)。

2. 使用innobackupex备份数据库

(1)完全备份:

innobackupex –user=root -p /home/backup/

备份后的文件:在备份的同时,备份数据会在备份目录下创建一个以当前日期时间为名字的目录存放备份文件。

11-1024x733-图片1

各文件说明:

(1) backup-my.cnf —— 备份命令用到的配置选项信息;

2 (1)--图片2

(2) ibdata —— 备份的表空间文件;

(3) xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

3 (1)--图片3

(4) xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

4-图片4

(5) xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

5--图片5

(6) xtrabackup_logfile —— 备份的重做日志文件。

在使用innobackupex进行备份时,还可以使用–no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

(2)准备(prepare)一个完全备份

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobakupex命令的–apply-log选项可用于实现上述功能。

innobackupex –apply-log /home/backup/2014-05-03_17-21-11/

执行成功,显示如下:

图片6

在实现“准备”的过程中,innobackupex通常还可以使用–use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。

3.恢复数据库

(1)模拟数据库损坏

直接使用删除数据目录文件来模拟损坏:

图片7

图片8

(2)还原完全备份:

innobackupex命令的–copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

innobackupex –copy-back /home/backup/2014-05-03_17-21-11/

如果执行正确,其输出信息的最后几行通常如下:

图片9

(3)修改还原后的数据目录权限:

图片10

(4)启动MySQL

/bin/sh /usr/bin/mysqld_safe –defaults-file=/etc/my.cnf &

(5)连接数据库,验证还原后的数据

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP开发技巧:如何实现用户登录限制功能 PHP开发技巧:如何实现用户登录限制功能 Sep 21, 2023 am 11:39 AM

PHP开发技巧:如何实现用户登录限制功能在网站或应用程序开发中,用户登录限制功能是一项非常重要的安全措施。通过限制用户的登录尝试次数和登录频率,可以有效防止账号被恶意破解或暴力破解。本文将介绍如何使用PHP实现用户登录限制功能,并提供具体的代码示例。一、用户登录限制功能的需求分析用户登录限制功能通常包括以下几个方面的需求:登录尝试次数限制:当用户连续输入错误

如何在PHP中实现用户登录时发送手机短信验证码和邮件通知 如何在PHP中实现用户登录时发送手机短信验证码和邮件通知 Sep 26, 2023 pm 08:40 PM

如何在PHP中实现用户登录时发送手机短信验证码和邮件通知随着互联网的飞速发展,越来越多的应用程序需要用户登录功能来确保安全性和个性化体验。除了基本的账号密码验证,为了提高用户体验和安全性,许多应用程序还会在用户登录时发送手机短信验证码和邮件通知。本文将介绍如何在PHP中实现这种功能,并提供相应的代码示例。一、发送手机短信验证码1.首先,你需要一个可以发送短信

如何使用Elasticsearch和PHP构建用户登录和权限管理系统 如何使用Elasticsearch和PHP构建用户登录和权限管理系统 Jul 08, 2023 pm 04:15 PM

如何使用Elasticsearch和PHP构建用户登录和权限管理系统引言:在当前的互联网时代,用户登录和权限管理是每个网站或应用程序必备的功能之一。Elasticsearch是一个强大而灵活的全文搜索引擎,而PHP是一种广泛使用的服务器端脚本语言。本文将介绍如何结合Elasticsearch和PHP来构建一个简单的用户登录和权限管理系统

最受 IT 公司欢迎的 30 款开源软件,我竟然都用过! 最受 IT 公司欢迎的 30 款开源软件,我竟然都用过! Aug 02, 2023 pm 05:54 PM

越来越多的IT公司对开源持开放态度,一方面有了优秀的开源项目,就不用再重复造轮子,可以直接拿来使用;另一方面,自己公司有优秀的自研项目,为了发展壮大可以选择将项目开源,让更多的开发者参与进来,一起努力提升软件的功能!

UniApp实现用户登录与授权的细节解析 UniApp实现用户登录与授权的细节解析 Jul 05, 2023 pm 11:54 PM

UniApp实现用户登录与授权的细节解析在现代移动应用开发中,用户登录和授权是必不可少的功能。UniApp作为一个跨平台的开发框架,提供了一种方便的方式来实现用户登录和授权。本文将探讨UniApp中实现用户登录和授权的细节,并附上相应的代码示例。一、用户登录功能的实现创建登录页面用户登录功能通常需要一个登录页面,该页面包含用户输入账号和密码的表单以及登录按钮

如何使用PHP数组实现用户登录和权限管理的功能 如何使用PHP数组实现用户登录和权限管理的功能 Jul 15, 2023 pm 08:55 PM

如何使用PHP数组实现用户登录和权限管理的功能在开发网站时,用户登录和权限管理是非常重要的功能之一。通过用户登录,我们可以验证用户身份并保护网站的安全性。而权限管理则能够控制用户在网站中的操作权限,确保用户只能访问他们被授权的功能。在本文中,我们将介绍如何使用PHP数组来实现用户登录和权限管理的功能。我们将使用一个简单的示例来演示这个过程。首先,我们需要创建

在Slim框架中使用会话(Sessions)实现用户登录和注销的方法 在Slim框架中使用会话(Sessions)实现用户登录和注销的方法 Jul 28, 2023 pm 11:21 PM

在Slim框架中使用会话(Sessions)实现用户登录和注销的方法简介:会话(Sessions)是Web应用程序中常用的一种技术,它可以用来存储和管理用户相关的数据,例如用户的登录状态等。Slim框架作为一个轻量级的PHP框架,提供了简洁的API来处理会话。本文将介绍如何在Slim框架中使用会话来实现用户登录和注销的功能。安装Slim框架首先,我们需要在P

如何使用PHP和CGI实现用户注册和登录功能 如何使用PHP和CGI实现用户注册和登录功能 Jul 21, 2023 pm 02:31 PM

如何使用PHP和CGI实现用户注册和登录功能用户注册和登录是许多网站必备的功能之一。在本文中,我们将介绍如何使用PHP和CGI来实现这两个功能。我们将通过代码示例来演示整个过程。一、用户注册功能的实现用户注册功能允许新用户创建一个账户,并将其信息保存到数据库中。以下是实现用户注册功能的代码示例:创建数据库表首先,我们需要创建一个数据库表,用于存储用户信息。可

See all articles