首頁 資料庫 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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
PHP開發技巧:如何實現使用者登入限制功能 PHP開發技巧:如何實現使用者登入限制功能 Sep 21, 2023 am 11:39 AM

PHP開發技巧:如何實現使用者登入限制功能在網站或應用程式開發中,使用者登入限制功能是一項非常重要的安全措施。透過限制使用者的登入嘗試次數和登入頻率,可以有效防止帳號被惡意破解或暴力破解。本文將介紹如何使用PHP實作使用者登入限制功能,並提供具體的程式碼範例。一、使用者登入限制功能的需求分析使用者登入限制功能通常包括以下幾個方面的需求:登入嘗試次數限制:當使用者連續輸入錯誤

如何在PHP中實現用戶登入時發送手機簡訊驗證碼和郵件通知 如何在PHP中實現用戶登入時發送手機簡訊驗證碼和郵件通知 Sep 26, 2023 pm 08:40 PM

如何在PHP中實現用戶登入時發送手機簡訊驗證碼和郵件通知隨著互聯網的飛速發展,越來越多的應用程式需要用戶登入功能來確保安全性和個人化體驗。除了基本的帳號密碼驗證,為了提高使用者體驗和安全性,許多應用程式也會在使用者登入時發送手機簡訊驗證碼和郵件通知。本文將介紹如何在PHP中實現此功能,並提供相應的程式碼範例。一、發送手機簡訊驗證碼1.首先,你需要一個可以發送簡訊

如何使用PHP和CGI實現用戶註冊和登入功能 如何使用PHP和CGI實現用戶註冊和登入功能 Jul 21, 2023 pm 02:31 PM

如何使用PHP和CGI實現用戶註冊和登入功能用戶註冊和登入是許多網站必備的功能之一。在本文中,我們將介紹如何使用PHP和CGI來實現這兩個功能。我們將透過程式碼範例來演示整個過程。一、用戶註冊功能的實現用戶註冊功能允許新用戶創建一個帳戶,並將其資訊保存到資料庫中。以下是實現使用者註冊功能的程式碼範例:建立資料庫表首先,我們需要建立一個資料庫表,用於儲存使用者資訊。可

如何使用PHP陣列實現使用者登入和權限管理的功能 如何使用PHP陣列實現使用者登入和權限管理的功能 Jul 15, 2023 pm 08:55 PM

如何使用PHP陣列實現使用者登入和權限管理的功能在開發網站時,使用者登入和權限管理是非常重要的功能之一。透過使用者登錄,我們可以驗證使用者身分並保護網站的安全性。而權限管理則能夠控制使用者在網站中的操作權限,確保使用者只能存取他們被授權的功能。在本文中,我們將介紹如何使用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中實作使用者登入和授權的細節,並附上對應的程式碼範例。一、使用者登入功能的實現建立登入頁面使用者登入功能通常需要一個登入頁面,該頁麵包含使用者輸入帳號和密碼的表單以及登入按鈕

如何使用Elasticsearch和PHP建立使用者登入和權限管理系統 如何使用Elasticsearch和PHP建立使用者登入和權限管理系統 Jul 08, 2023 pm 04:15 PM

如何使用Elasticsearch和PHP建立使用者登入和權限管理系統引言:在當前的網路時代,使用者登入和權限管理是每個網站或應用程式必備的功能之一。 Elasticsearch是一個強大且靈活的全文搜尋引擎,而PHP則是廣泛使用的伺服器端腳本語言。本文將介紹如何結合Elasticsearch和PHP來建立一個簡單的使用者登入和權限管理系統

如何用PHP實現CMS系統的使用者註冊/登入功能 如何用PHP實現CMS系統的使用者註冊/登入功能 Aug 07, 2023 am 11:31 AM

如何用PHP實現CMS系統的使用者註冊/登入功能?隨著網路的發展,CMS(ContentManagementSystem,內容管理系統)系統成為了網站開發中非常重要的一環。而其中的用戶註冊/登入功能更是不可或缺的一部分。本文將介紹如何使用PHP語言實現CMS系統的使用者註冊/登入功能,並附上對應的程式碼範例。以下是實作步驟:建立使用者資料庫首先,我們需要建立一

See all articles