云数据库RDS中的MySQL数据库备份

背景

RDS使用mysqldump对 MySQL 数据库进行逻辑全量备份,使用开源软件Xtrabackup进行物理全量备份,是实例级别的备份。本文主要从原理的角度来介绍MySQL数据库的备份和恢复,让用户更加了解RDS的备份恢复机制。

一、使用Mysqldump进行逻辑备份 

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

备份数据库:

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

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

备份多个数据库:

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

备份所有数据库:

mysqldump [OPTIONS] –all-databases
[OPTIONS]

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

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

备份数据库:

如果在程序启动阶段未指定模式,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备份数据库

完全备份:

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

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

各文件说明:

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

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

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

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

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

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

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

准备(prepare)一个完全备份

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

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

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

 

执行成功,显示如下:

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



参考

RDS中的MYSQL备份恢复

时间: 2024-12-31 11:57:02

云数据库RDS中的MySQL数据库备份的相关文章

详解:如何在.NET中访问MySQL数据库?

如果你不是只在大集团公司工作过的话,你一定会有机会接触到MySQL,虽然它并不支持事务处理,存储过程,但是它提供的功能一定能满足你的大部分需求,另外,简洁的MySQL也有一些它独到的优势,在有些时候,它的速度甚至超过大型数据库. 那么如何在.NET中访问MySQL数据库呢?也许很多人马上会说:用OLEDB嘛,但是事实上采用.NET OleDb Data Provider并不能访问MySQL,如果你使用的话,系统会提示你:"Net Data OLE DB 提供程序 (System.Data.Odb

如何在.NET中访问MySQL数据库

mysql|访问|数据|数据库 摘要 MySQL作为一种小型关系数据库,它以低廉的价格.强大的功能.不俗的速度和开放源码的特性赢得了大量中小型企业及个人用户的青睐.但是在.NET中访问MySQL数据库却并没有想象中那么方便,因为.NET OleDb Data Provider和MySQL的兼容性并不理想.本文介绍了两种在.NET中访问MySQL数据库的方法,并对这两种方法做了一个简单的性能对比. 引言 如果你不是只在大集团公司工作过的话,你一定会有机会接触到MySQL,虽然它并不支持事务处理,存

在.NET中使用MySql数据库

在.NET中使用Sql Server是一直的事情.前几天学习通过JDBC使用Java连接MySql数据库,我就想.NET是否同样可以使用MySql数据库呢?答案是肯定的,方法也很简单,在这里我使用C#作为编程语言,将自己整理出来的方法同大家一起分享. 欲在.NET中使用MySql数据库,其步骤是: 1. 下载MySql驱动包 2. 引用驱动包中已经编译好的MySql类组件 3. 编写代码 步骤一:下载MySql驱动包 在我写篇文章的时候,最新的驱动包是5.2,支持Visual Studio 20

在cPanel面板中创建MySQL数据库操作方法

首先需要进入cPanel虚拟主机管理系统界面,在数据库模块下找到MySQL数据库,点击MySQL数据库,进入数据库创建界面: 在输入框里输入想要创建的数据库名称: 完成后,点击一下步,向导将会提示您创建数据库用户名,同时输入密码,如下如图: 提示:数据库用户名和数据都是有前缀的,如storyday_demo而不是demo 接下来是添加用户权限,也就是正在创建的用户,对数据库storyday_demo能有哪些操作权限,如果你不知道如何设置,可以全选: 点击下一步数据库就创建成功了,那么本例子中创建

关于PHP中操作MySQL数据库的一些要注意的问题_php基础

关于PHP中操作MySQL数据库的一些要注意的问题 1. 分号的例外 对于 MySQL ,第一件你必须牢记的是它的每一行命令都是用分号 (;) 作为结束的,但--没有完全绝对的事,在这儿也是一样,当一行 MySQL 被插入在 PHP 代码中时,最好把后面的分号省略掉,例如: mysql_query ("INSERT INTO tablename (first_name, last_name) VALUES ('$first_name', $last_name')"); 这是因为 PHP

php mysql-在php中从Excel表中向mysql数据库导入数据

问题描述 在php中从Excel表中向mysql数据库导入数据 请问:如何实现在php中从Excel表中向mysql数据库导入数据,要注意那些东西? 解决方案 http://www.jb51.net/article/26921.htm 解决方案二: http://blog.csdn.net/china_skag/article/details/7098473 解决方案三: http://blog.csdn.net/jiaocaigeng/article/details/9470571 解决方案四

linux中更改MySQL数据库存储路径和端口

linux中更改MySQL数据库存储路径和端口 假设我们以更改到/opt/data目录下为倒: 1.opt目录下建立data目录 mkdir /opt/data 2.停掉MySQL服务进程 mysqladmin -u root -p shutdown 3.把/var/lib/mysql整个目录移到/opt/data mv /var/lib/mysql /opt/data/ 这样就把MySQL的数据文档移动到了/opt/data/mysql下 . 4.my.cnf文档配置 默认安装时my.cnf在

PHP中操作MySQL数据库的一些要注意的问题(转) 有些问题说得很不错。。挺新颖的。。-数据库相关

PHP中操作MySQL数据库的一些要注意的问题 1. 分号的例外     对于 MySQL ,第一件你必须牢记的是它的每一行命令都是用分号 (;) 作为结束的,但--没有完全绝对的事,在这儿也是一样,当一行 MySQL 被插入在 PHP 代码中时,最好把后面的分号省略掉,例如:    mysql_query ("INSERT INTO tablename (first_name, last_name)    VALUES ('$first_name', '$last_name')    &quo

如何在Java程序中访问mysql数据库中的数据并进行简单的操作_Mysql

在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文. 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person: * 使用myeclipse对mysql数据库进行增删改查的基本操作. */ public