RDS中的MYSQL备份恢复_MySQL
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/
备份后的文件:在备份的同时,备份数据会在备份目录下创建一个以当前日期时间为名字的目录存放备份文件。
各文件说明:
(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目录来存储备份数据。
(2)准备(prepare)一个完全备份
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
innobakupex命令的–apply-log选项可用于实现上述功能。
innobackupex –apply-log /home/backup/2014-05-03_17-21-11/
执行成功,显示如下:
在实现“准备”的过程中,innobackupex通常还可以使用–use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。
3.恢复数据库
(1)模拟数据库损坏
直接使用删除数据目录文件来模拟损坏:
(2)还原完全备份:
innobackupex命令的–copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。
innobackupex –copy-back /home/backup/2014-05-03_17-21-11/
如果执行正确,其输出信息的最后几行通常如下:
(3)修改还原后的数据目录权限:
(4)启动MySQL
/bin/sh /usr/bin/mysqld_safe –defaults-file=/etc/my.cnf &
(5)连接数据库,验证还原后的数据

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 개발 기술: 사용자 로그인 제한 기능 구현 방법 웹사이트나 애플리케이션 개발에서 사용자 로그인 제한 기능은 매우 중요한 보안 조치입니다. 로그인 시도 횟수와 사용자 빈도를 제한함으로써 계정이 악의적으로 크랙되거나 무차별 대입 크랙되는 것을 효과적으로 방지할 수 있습니다. 이 기사에서는 PHP를 사용하여 사용자 로그인 제한 기능을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 사용자 로그인 제한 기능 요구사항 분석 사용자 로그인 제한 기능에는 일반적으로 다음과 같은 요구사항이 포함됩니다. 로그인 시도 횟수 제한: 사용자가 지속적으로 오류를 입력하는 경우

Elasticsearch와 PHP를 사용하여 사용자 로그인 및 권한 관리 시스템을 구축하는 방법 소개: 현재 인터넷 시대에 사용자 로그인 및 권한 관리는 모든 웹사이트나 애플리케이션에 필요한 기능 중 하나입니다. Elasticsearch는 강력하고 유연한 전체 텍스트 검색 엔진인 반면, PHP는 널리 사용되는 서버측 스크립팅 언어입니다. 이 기사에서는 Elasticsearch와 PHP를 결합하여 간단한 사용자 로그인 및 권한 관리 시스템을 구축하는 방법을 소개합니다.

사용자가 PHP에 로그인할 때 SMS 확인 코드 및 이메일 알림을 보내는 방법 인터넷의 급속한 발전으로 인해 점점 더 많은 애플리케이션에서 보안과 개인화된 경험을 보장하기 위해 사용자 로그인 기능을 요구하고 있습니다. 기본 계정 및 비밀번호 확인 외에도 사용자 경험과 보안을 개선하기 위해 많은 애플리케이션에서는 사용자가 로그인할 때 휴대폰 SMS 확인 코드와 이메일 알림을 보냅니다. 이 문서에서는 PHP에서 이 기능을 구현하는 방법을 설명하고 해당 코드 예제를 제공합니다. 1. SMS 인증번호 보내기 1. 먼저 SMS를 보낼 수 있는 사람이 필요합니다.

점점 더 많은 IT 기업이 오픈 소스를 공개하고 있습니다. 한편으로는 우수한 오픈 소스 프로젝트를 개발할 필요가 없으며 자체적으로 자체 연구 프로젝트를 진행하고 있습니다. . 개발을 위해 Changzhang은 프로젝트를 오픈 소스로 선택하여 더 많은 개발자가 참여하고 함께 작업하여 소프트웨어 기능을 향상시킬 수 있습니다!

UniApp의 사용자 로그인 및 인증 구현에 대한 자세한 분석 현대 모바일 애플리케이션 개발에서 사용자 로그인 및 인증은 필수 기능입니다. 크로스 플랫폼 개발 프레임워크인 UniApp은 사용자 로그인 및 인증을 구현하는 편리한 방법을 제공합니다. 이 기사에서는 UniApp의 사용자 로그인 및 인증에 대한 세부 정보를 살펴보고 해당 코드 예제를 첨부합니다. 1. 사용자 로그인 기능 구현 로그인 페이지 생성 사용자 로그인 기능을 사용하려면 일반적으로 사용자가 계정 번호와 비밀번호를 입력하는 양식과 로그인 버튼이 포함된 로그인 페이지가 필요합니다.

PHP 배열을 사용하여 사용자 로그인 및 권한 관리 기능을 구현하는 방법 웹 사이트를 개발할 때 사용자 로그인 및 권한 관리는 매우 중요한 기능 중 하나입니다. 사용자 로그인을 통해 당사는 사용자를 인증하고 웹사이트의 보안을 보호할 수 있습니다. 권한 관리는 사용자가 승인된 기능에만 액세스할 수 있도록 웹사이트에서 사용자의 운영 권한을 제어할 수 있습니다. 이 기사에서는 PHP 배열을 사용하여 사용자 로그인 및 권한 관리 기능을 구현하는 방법을 소개합니다. 이 프로세스를 보여주기 위해 간단한 예를 사용하겠습니다. 먼저 우리는 생성해야합니다

Slim 프레임워크에서 세션을 사용하여 사용자 로그인 및 로그아웃을 구현하는 방법 소개: 세션은 웹 애플리케이션에서 일반적으로 사용되는 기술로 사용자의 로그인 대기 상태와 같은 사용자 관련 데이터를 저장하고 관리하는 데 사용할 수 있습니다. 경량 PHP 프레임워크인 Slim 프레임워크는 세션을 처리하기 위한 간단한 API를 제공합니다. 이 기사에서는 Slim 프레임워크에서 세션을 사용하여 사용자 로그인 및 로그아웃 기능을 구현하는 방법을 소개합니다. Slim 프레임워크를 먼저 설치하려면 다음을 설치해야 합니다.

PHP와 CGI를 사용하여 사용자 등록 및 로그인 기능을 구현하는 방법 사용자 등록 및 로그인은 많은 웹사이트에 필요한 기능 중 하나입니다. 이 기사에서는 PHP와 CGI를 사용하여 이 두 가지 기능을 구현하는 방법을 소개합니다. 코드 예제를 통해 전체 프로세스를 보여드리겠습니다. 1. 사용자 등록 기능 구현 사용자 등록 기능을 통해 신규 사용자는 계정을 생성하고 해당 정보를 데이터베이스에 저장할 수 있습니다. 다음은 사용자 등록 기능을 구현하기 위한 코드 예제입니다. 데이터베이스 테이블 생성 먼저, 사용자 정보를 저장할 데이터베이스 테이블을 생성해야 합니다. 할 수 있다
