Oracle數據庫有三種標准的備份方法,它們分別是導出/導入(EXP/IMP)、熱備份和冷備份。導出備件是一種邏輯備份,冷備份和熱備份是物理備份。
https://blog.51cto.com/13555753/2106506
數據庫備份與恢復是數據庫管理員必須掌握的。沒有任何系統能免遭硬盤物理損壞、粗心用戶的錯誤操作、或一些可能會威脅到存儲數據的潛在災難的侵襲。為了能夠最大限度地恢復數據庫數據,保證數據庫的安全運行,應該選擇最合理的備份方法來防止各種故障所導致的用戶數據丟失,本次主要介紹三種備份恢復技術,即RMAN技術、數據泵技術及閃回技術。
備份的定義及分類
恢復的定義及分類
恢復就是發生故障后,利用已備份的數據或控制文件,重新建立一個完整的數據庫。恢復分為以下兩種類型。
1)實例恢復:當oracle實例出現失敗后,oracle自動進行的恢復。
2)介質恢復:當存放數據庫的介質出現故障時所做的恢復。介質恢復又分為完全恢復和不完全恢復。
完全恢復:將數據庫恢復到數據庫失敗時的狀態。這種恢復是通過裝載數據庫備份,並用全部的重做日志做到的。
不完全恢復:將數據庫恢復到數據庫失敗前的某一時刻的狀態。這種恢復是通過裝載數據庫備份並應用部分的重做日志做到的。進行不完全恢復后,必須在啟動數據庫時用resetlogs選型重設聯機重做日志
一、使用RMAN工具
RMAN(recovery manager)是oracle的一個重要工具,用於備份和恢復數據庫文件、歸檔日志和控制文件。也可以用來執行完全或不完全的數據庫恢復。RMAN有3種不同的用戶接口:命令行方式,GUI方式(集成在OEM中的備份管理器)、api方式(用於集成到第三方的備份軟件中)。它具有如下優點:
1)支持在線熱備份
2)支持多級增量備份
3)支持並行備份、恢復
4)減少所需要的備份量
5)備份、恢復使用簡單
RMAN有豐富的特性集。隨着oracle新版本的發布,RMAN特性也不斷增強,使得RMAN幾乎在任何情況下都可以備份和恢復數據庫。其中很多的新特性都是針對日常工作中所遇到的問題和困難開發的。
1.RMAN組件
1)target database(目標數據庫)
目標數據庫就是需要RMAN對其進行備份與恢復的數據庫。RMAN可以備份數據文件、控制文件、歸檔日志文件、spfile。
2)server session(服務器會話)
RMAN啟動數據庫上的oracle服務器進程,並建立一個與目標數據庫的會話。由目標數據庫上的服務器進程進行備份、還原、恢復的實際操作。
3)RMAN repository(RMAN資料庫)
RMAN使用過程中會用到的控制信息,是一些關於備份、歸檔日志及RMAN活動的元數據。
4)recovery catalog(恢復目錄)
恢復目錄是建立在RMAN恢復目錄數據庫上的一種schema對象,用於保存RMAN資料庫數據。
恢復目錄是一個可選的組件。RMAN會將資料庫數據記錄在目標數據庫的控制文件中,但這樣不夠安全,因為一旦目標數據庫的控制文件損壞就意味着所有的RMAN備份失效。所以建議在單獨的一個數據中建立恢復目錄另外保存一份資料庫數據。
對於
對於大部分中等環境的企業環境,將RMAN備份信息存儲在恢復目錄數據庫中,而不是存儲在目標數據庫的控制文件中,這樣能夠發揮RMAN工具的全部功能,此外,RMAN的很多高級功能也只有在創建了恢復目錄的環境下才被支持。
5)MML(媒體管理庫)
MML(media management layer)是第三方工具或軟件,用於管理對磁帶的讀寫與文件的跟蹤管理,如果你要想直接通過RMAN備份到磁帶上,就必須配置媒體管理層,媒體管理層的工具和RMAN共同完成備份與恢復。
6)快閃恢復區
快閃恢復區是oracle數據庫用於保存所有與恢復相關的文件的默認磁盤位置。這些相關文件包括歸檔日志、RMAN備份、控制文件自動備份、復用的控制文件和重做日志副本及閃回日志文件。
7)輔助數據庫
在正常使用時,RMAN會與目標數據庫一起使用,如果創建了恢復目錄數據庫,那么也會與恢復目錄數據庫一起使用。在某些情況下,希望創建輔助數據庫,輔助數據庫是使用RMAN從目標數據庫的備份中創建新的數據庫。輔助數據庫能被創建作為備用數據庫使用。在產品數據庫發生災難時,能夠在不丟失任何數據及停機時間最短的情況下切換至備用數據庫。
2.創建恢復目錄
恢復目錄存在於RMAN的目錄數據庫中,類似於標准的數據庫目錄,主要包含如下幾個部分的信息。
1)備份和恢復信息,可以是多個目標數據庫
2)RMAN腳本,可以存儲供重復使用
3)關於數據文件和日志文件的本分信息
4)關於目標數據庫的表空間和數據文件的信
創建恢復目錄數據庫
在恢復目錄數據庫中創建RMAN用戶並授權
在恢復目錄數據庫中創建恢復目錄
3.注冊目標數據庫到恢復目錄
登錄目標數據庫,如果要對目標數據庫進行注冊,可以按照以下操作
至此,完成了目標數據庫在恢復目錄中的注冊操作,此時就可以使用RMAN的恢復目錄對目標數據庫進行備份和恢復操作。
4.通道分配
使用RMAN進行備份和恢復操作時,必須進行通道的分配,一個通道是RMAN和目標數據庫之間的一個連接,通道指定了某種類型的設備用於備份和恢復,RMAN可以使用的通道設備包括磁盤與磁帶兩種。
(1)自動通道配置
使用CONFIGURE命令配置自動通道
語法格式如下:
CONFIGURE DEVICE TYPE sbt/disk PARALLELISM n; 指定自動通道並行個數
CONFIGURE DEFAULT DEVICE TYPE TO sbt/disk; 指定自動通道的默認設備
在語法中:
sbt/disk:磁帶/磁盤
n:設置自動通道的個數
例如:指定RMAN可以打開5個磁盤通道
(2)手動通道配置
在RUN塊中使用ALLOCATE CHANNEL手動分配通道
語法格式如下:
RUN
{
ALLOCATE CHANNEL 通道名稱 DEVICE TYPE 設備類型;
......
}
一、 導出/導入(Export/Import)
利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回到Oracle數據庫中去。
1、 簡單導出數據(Export)和導入數據(Import)
Oracle支持三種方式類型的輸出:
(1)、表方式(T方式),將指定表的數據導出。
(2)、用戶方式(U方式),將指定用戶的所有對象及數據導出。
(3)、全庫方式(Full方式),瘵數據庫中的所有對象導出。
數據導入(Import)的過程是數據導出(Export)的逆過程,分別將數據文件導入數據庫和將數據庫數據導出到數據文件。
2、 增量導出/導入
增量導出是一種常用的數據備份方法,它只能對整個數據庫來實施,並且必須作為SYSTEM來導出。在進行此種導出時,系統不要求回答任何問題。導出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。
增量導出包括三種類型:
(1)、“完全”增量導出(Complete)
即備份三個數據庫,比如:
exp system/manager inctype=complete file=040731.dmp
(2)、“增量型”增量導出
備份上一次備份后改變的數據,比如:
exp system/manager inctype=incremental file=040731.dmp
(3)、“累積型”增量導出
累計型導出方式是導出自上次“完全”導出之后數據庫中變化了的信息。比如:
exp system/manager inctype=cumulative file=040731.dmp
數據庫管理員可以排定一個備份日程表,用數據導出的三個不同方式合理高效的完成。
比如數據庫的被封任務可以做如下安排:
星期一:完全備份(A)
星期二:增量導出(B)
星期三:增量導出(C)
星期四:增量導出(D)
星期五:累計導出(E)
星期六:增量導出(F)
星期日:增量導出(G)
如果在星期日,數據庫遭到意外破壞,數據庫管理員可按一下步驟來回復數據庫:
第一步:用命令CREATE DATABASE重新生成數據庫結構;
第二步:創建一個足夠大的附加回滾。
第三步:完全增量導入A:
imp system/manager inctype=RESTOREFULL=y FILE=A
第四步:累計增量導入E:
imp system/manager inctype=RESTOREFULL=Y FILE=E
第五步:最近增量導入F:
imp system/manager inctype=RESTOREFULL=Y FILE=F
二、 冷備份
冷備份發生在數據庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的數據庫。冷備份時將關鍵性文件拷貝到另外的位置的一種說法。對於備份Oracle信息而言,冷備份時最快和最安全的方法。冷備份的優點是:
1、 是非常快速的備份方法(只需拷文件)
2、 容易歸檔(簡單拷貝即可)
3、 容易恢復到某個時間點上(只需將文件再拷貝回去)
4、 能與歸檔方法相結合,做數據庫“最佳狀態”的恢復。
5、 低度維護,高度安全。
但冷備份也有如下不足:
1、 單獨使用時,只能提供到“某一時間點上”的恢復。
2、 再實施備份的全過程中,數據庫必須要作備份而不能作其他工作。也就是說,在冷備份過程中,數據庫必須是關閉狀態。
3、 若磁盤空間有限,只能拷貝到磁帶等其他外部存儲設備上,速度會很慢。
4、 不能按表或按用戶恢復。
如果可能的話(主要看效率),應將信息備份到磁盤上,然后啟動數據庫(使用戶可以工作)並將備份的信息拷貝到磁帶上(拷貝的同時,數據庫也可以工作)。冷備份中必須拷貝的文件包括:
1、 所有數據文件
2、 所有控制文件
3、 所有聯機REDO LOG文件
4、 Init.ora文件(可選)
值得注意的使冷備份必須在數據庫關閉的情況下進行,當數據庫處於打開狀態時,執行數據庫文件系統備份是無效的。
下面是作冷備份的完整例子。
(1) 關閉數據庫
sqlplus /nolog sql>;connect /as sysdba sql>;shutdown normal;
(2) 用拷貝命令備份全部的時間文件、重做日志文件、控制文件、初始化參數文件
{$PageTitle=sql>;cp ; ;}
(3) 重啟Oracle數據庫
sql>;startup
三、 熱備份
熱備份是在數據庫運行的情況下,采用archivelog mode方式備份數據庫的方法。所以,如果你有昨天夜里的一個冷備份而且又有今天的熱備份文件,在發生問題時,就可以利用這些資料恢復更多的信息。熱備份要求數據庫在Archivelog方式下操作,並需要大量的檔案空間。一旦數據庫運行在archivelog狀態下,就可以做備份了。熱備份的命令文件由三部分組成:
1. 數據文件一個表空間一個表空間的備份。
(1) 設置表空間為備份狀態
(2) 備份表空間的數據文件
(3) 回復表空間為正常狀態
2. 備份歸檔log文件
(1) 臨時停止歸檔進程
(2) log下那些在archive rede log目標目錄中的文件
(3) 重新啟動archive進程
(4) 備份歸檔的redo log文件
3. 用alter database bachup controlfile命令來備份控制文件
熱備份的優點是:
1. 可在表空間或數據庫文件級備份,備份的時間短。
2. 備份時數據庫仍可使用。
3. 可達到秒級恢復(恢復到某一時間點上)。
4. 可對幾乎所有數據庫實體做恢復
5. 恢復是快速的,在大多數情況下愛數據庫仍工作時恢復。
熱備份的不足是:
1. 不能出錯,否則后果嚴重
2. 若熱備份不成功,所得結果不可用於時間點的恢復
3. 因難於維護,所以要特別仔細小心,不允許“以失敗告終”
與數據庫備份和還原相關的兩個重要的文件夾:
……\Microsoft SQL Server\MSSQL.1\MSSQL\Backup
-------存放備份的數據文件
……\Microsoft SQL Server\MSSQL.1\MSSQL\Data
--------存放.mdf和.ldf文件
1.4、通過sql server的命令來備份還原數據庫
我們通常備份數據庫時,需要通過sql server客戶端登錄數據庫服務器去備份和恢復,這樣很不方便,其實SQL SERVER自帶的命令就可以備份和還原數據庫。這些命令可以在sql server客戶端的sql腳本窗口直接執行,也可以很通過ADO.Net調用這些命令實現遠程備份和恢復數據庫。
(1)、備份還原數據庫的命令
備份:
BACKUP DATABASE'被備份的數據庫名'TO DISK = '備份文件路徑';
--注意:被備份的數據庫名必須是存在的,否則會出錯
還原:
--將數據庫置於離線狀態
ALTER DATABASE'被恢復的數據庫名'SET OFFLINE WITH ROlLBACK IMMEDIATE;
--恢復數據庫
RESTORE DATABASE '被恢復的數據庫名'FROM DISK = '還原文件路徑(源文件)';
--將數據庫置於在線狀態
ALTER DATABASE'被恢復的數據庫名'SET ONLINE WITH ROlLBACK IMMEDIATE;
--注意:被恢復的數據庫名必須是存在的,並且該數據庫將會被覆蓋掉,還原文件路徑(源文件)必須是存在的,另外,在執行前后的兩個ALTER語句的時候,所選擇的數據庫必須是master,
有時候為了保險起見,ALTER語句可以不要。
(2)、命令應用
A、可以直接在sql server客戶端的sql窗體中執行命令。
B、可以在數據庫上寫存儲過程,然后配置JOB,定期調用這個存儲過程。
C、通過應用程序的ADO.NET來執行這些命令或者命令組成的存儲過程,實現應用程序控制備份還原數據庫,這些應用程序可以寫成服務,定期調用。
---------------------
https://blog.csdn.net/lcl_xiaowugui/article/details/81541357
MySQL數據庫最常用的備份方法如下:
直接cp備份
sqlhotcopy備份
主從同步復制
Mysqldump備份
xtrabackup備份
二、mysqldump備份
通常小於100GB的MySQL數據庫可以使用mysqldump備份工具進行備份,如果是超過100GB的數據,由於mysqldump備份方式采用的是邏輯備份,最大的缺陷是備份和恢復速度較慢。
基於mysqldump備份耗時會比較長,而且備份期間會鎖表,鎖表直接導致數據庫只能訪問select,不能執行insert、update等操作,進而導致部分web應用無法寫入新數據。
如果數據庫采用的是MyISAM引擎,可以執行參數--lock-tables=false禁用鎖表,但是有可能造成數據信息不一致。
如果是支持事務的表,例如InnoDB,--single-transaction參數不支持鎖定表,具體使用為mysqldump -uroot -p123456 --all-databases --opt --single-tarnsaction > tt.sql,--opt選項可以讓mysqldump快速導出數據,並且可以很快導回。該選項默認開啟,但是可以使用--skip-opt禁用。
如果運行mysqldump沒有指定–quick或–opt選項,會將整個結果集中放在內存中,如果導出大數據的話可能會導致內存溢出而異常退出。
三、xtrabackup備份
MySQL冷備、mysqldump、MySQL熱拷貝均不能實現對數據庫進行增量備份。
所以就出現了Percona-xtrabackup,xtrabackup主要有兩個工具,分別為xtrabackup和innobackupex。
xtrabackup只能備份InnoDB和xtraDB兩種數據引擎的表,不能備份MyISAM數據表,innobackupex 1.5.1 封裝了xtrabackup,是一個封裝好的腳本,使用它可以同時備份處理innoDB和MyISAM,但處理MyISAM需要加一個讀鎖。
xtrabackup備份原理: innobackupex在后台線程不斷追蹤InnoDB的日志文件,然后復制InnoDB的數據文件。復制完成后,日志的復制線程也會結束。這樣就得到了不在同一個時間點的數據副本和開始備份以后的事務日志。完成后,就可以使用InnoDB崩潰恢復代碼執行事務日志(redo log),從而達到數據的一致型。
備份優點為:
備份速度快,物理備份更可靠
備份過程不會打斷正在執行的事務,無須鎖表
能夠基於壓縮等功能節約磁盤空間和流量
自動備份校驗
還原速度快
可以流傳將備份傳輸到另外一台機器上
節約磁盤空間和網絡帶寬
innobackupex備份過程:首先啟動xtrabackup_log后台檢測的進程,實時檢測MySQL redo的變化,一旦發現redo有新的日志寫入,立刻將日志寫入到日志文件xtrabackup_log中,並復制InnoDB的數據文件和系統表空間文件idbdatal到備份目錄。innodb引擎表備份完之后,執行flush table with read lock操作進行MyISAM表備份。復制.frm .myd .myi文件,並且在這一時可獲得binary log的位置,將表進行解鎖unlock tables,停止xtraback_log進程,完成整個數據庫的備份。
四、Percona-xtrabackup備份
1、官網下載安裝
這里直接下載的rpm包,因為這里為了方便,數據庫直接用的yum源的rpm包安裝的,所以mysql版本較低,percona-xtrabackup包也只能下版本較低的包。但也要注意percona-xtrabackup目前還不支持mysql 5.7版本,最多只能到5.6
##安裝依賴包
yum -y install libaio perl perl-devel perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL perl-Digest-MD5 libev rsync
wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.1/RPM/rhel6/x86_64/percona-xtrabackup-2.0.1-446.rhel6.x86_64.rpm
rpm -ivh percona-xtrabackup-22-2.2.13-1.el6.x86_64.rpm
2、MySQL數據庫全備份
命令為innobackupex --user=root --password=Lcl@0514 /data/backup/mysql ##用戶名和密碼都是mysql設定的
最后結果出現completed ok代表數據庫全備份成功!
3、innobackupex數據庫恢復
innobackupex數據庫恢復,恢復前要先保證數據的一致性,執行命令為:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log /data/backup/mysql/xxx
通常數據庫備份完成后,數據不能直接用於恢復操作,因為備份數據是一個過程,在備份過程中,有任務會寫入數據,可能會包含尚未提交的事務或已經提交但並沒有同步到數據文件的事務。
所以數據文件會處於不一致的狀態,基於--apply-log可以通過回滾未提交的事務及同步已經提交的事務到數據文件處於一致性狀態,才可以進行恢復數據。
apply-log過程可以在任何機器上進行,可以把備份復制在閑置的服務器上去運行,以此來降低備份庫的壓力,但必須保證backup和apply-log所使用的mysqlbackup版本一致
4、恢復完整數據
刪除原數據目錄的數據,使用--copy-back參數恢復完整數據,授權MySQL用戶給所有的數據庫文件
##執行命令為
rm -fr /var/lib/mysql/*
innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --copy-back /data/backup/mysql/xxx
chown -R mysql:mysql /var/lib/mysql
##恢復完畢后,重啟數據庫,直接登錄會發現數據庫備份成功
五、數據庫增量備份
增量備份只能應用於InnoDB或xtraDB表,對於MyISAM表而言,執行增量備份實際上執行的是完全備份。
1、innobackupex增量備份
(1)全備份
增量備份之前必須執行全備份,這里用sql_db_test庫來做測試,代碼為
innobackupex --user=root --password=Lcl@0514 --databases=sql_db_test /data/backup/mysql
假設這一次備份出來的文件為/data/backup/mysql/aaa
(2)第一次增量備份
執行第一次增量備份,代碼為
innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --databases=sql_db_test --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/aaa
並且假設這次備份出來的文件名為bbb
(3)數據庫插入新數據
(4)執行第二次增量備份
執行第二次增量備份,代碼為
innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --databases=sql_db_test --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/bbb
假設這次備份出來的文件名為ccc
2、MySQL增量備份的恢復
(1)刪除數據庫
刪除原數據庫中表及數據記錄信息
(2)確保數據一致性
基於apply-log確保數據的一致性,代碼為innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log --redo-only /data/backup/mysql/aaa
(3)第一次增量數據恢復
執行第一次增量數據恢復,代碼為:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log --redo-only /data/backup/mysql/aaa --incremental-dir=/data/backup/mysql/bbb
(4)第二次增量數據恢復
執行第二次增量數據恢復,代碼為:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log --redo-only /data/backup/mysql/aaa --incremental-dir=/data/backup/mysql/ccc
(5)完整數據恢復
執行完整數據恢復,代碼為:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --copy-back /data/backup/mysql/aaa
(6)測試