MySQL備份

MySQL備份      html

 




官網地址:  https://dev.mysql.com/doc/refman/5.7/en/backup-and-recovery.html    
 
 mysql




 

MySQL支持的備份類型以下圖所示:linux

 

? 根據備份方法,備份能夠分爲以下3種:正則表達式

l 熱備份(Hot Backup):熱備份也稱爲在線備份(Online Backup),是指在數據庫運行的過程當中進行備份,對生產環境中的數據庫運行沒有任何影響。常見的熱備方案是利用mysqldump、XtraBackup等工具進行備份。sql

l 冷備份(Cold Backup):冷備份也稱爲離線備份(Offline Backup),是指在數據庫關閉的狀況下進行備份,這種備份很是簡單,只須要關閉數據庫,複製相關的物理文件便可。目前,線上數據庫通常不多可以接受關閉數據庫,因此該備份方式不多使用。數據庫

l 溫備份(Warm Backup):溫備份也是在數據庫運行的過程當中進行備份,可是備份會對數據庫操做有所影響。該備份利用鎖表的原理備份數據庫,因爲影響了數據庫的操做,故該備份方式也不多使用。windows

? 根據備份文件的種類,備份能夠分爲以下兩種:Physical (Raw) Versus Logical Backups服務器

l 物理備份(Physical Backup):物理備份也稱爲裸文件備份(Raw Backup),是指複製數據庫的物理文件。物理備份便可以在數據庫運行的狀況下進行備份(常見備份工具:MySQL Enterprise Backup(商業)、XtraBackup等),也能夠在數據庫關閉的狀況下進行備份。該備份方式不只備份速度快,並且恢復速度也快,可是因爲沒法查看備份後的內容,因此只能等到恢復以後,才能檢驗備份出來的數據是不是正確的。app

l 邏輯備份(Logical Backup):邏輯備份是指備份文件的內容是可讀的,該文本通常都是由一條條SQL語句或者表的實際數據組成。常見的邏輯備份方式有mysqldump、SELECT ... INTO OUTFILE等方法。這類備份方法的好處是能夠觀察備份後的文件內容,缺點是恢復時間每每都會很長。邏輯備份的最大優勢是對於各類存儲引擎均可以用一樣的方法來備份;而物理備份則不一樣,不一樣的存儲引擎有着不一樣的備份方法。所以,對於不一樣存儲引擎混合的數據庫,用邏輯備份會更簡單一些。ssh

? 根據備分內容,備份能夠劃分爲以下3種:

l 全量備份(Full Backup):全量備份(徹底備份)是指對數據庫進行一次完整的備份,備份全部的數據,包含用戶表、系統表、索引、視圖和存儲過程等全部數據庫對象。這是通常常見的備份方式,可使用該備份快速恢復數據庫,或者搭建從庫。恢復速度也是最快的,可是每次備份會消耗較多的磁盤空間,而且備份時間較長。因此,通常推薦一週作一次全量備份。

l 增量備份(Incremental Backup):增量備份也叫差別備份,是指基於上次完整備份或增量備份,對數據庫新增的修改進行備份。這種備份方式有利於減小備份時使用的磁盤空間,加快備份速度。可是恢復的時候速度較慢,而且操做相對複雜。推薦天天作一次增量備份。

l 日誌備份(Binary Log Backup):日誌備份是指對數據庫二進制日誌的備份。二進制日誌是一個單獨的文件,它記錄數據庫的改變,備份的時候只須要複製自上次備份以來對數據庫所作的改變,因此只須要不多的時間。該備份方式通常與上面的全量備份或增量備份結合使用,可使數據庫恢復到任意位置。因此,推薦每小時甚至更頻繁的備份二進制日誌。

在生產環境上,通常都會選擇以物理備份爲主,邏輯備份爲輔,加上日誌備份,來知足線上使用數據庫的需求。

 



物理備份

Physical backups consist of raw copies of the directories and files that store database contents. This type of backup is suitable for large, important databases that need to be recovered quickly when problems occur.

 

  • 1
  • 1
  • 定義 
    物理備份就是把MySQL存儲好的全部文件保存下來。好比建立一個數據庫db以後,mysql會在datadir/目錄下面建立一個db的目錄,那麼這個目錄下面的全部文件保存下來,就是物理備份。

  • 適用: 
    物理備份適用於大數據量的備份,好比你有好幾G的數據,那你就適合使用物理備份;

  • 典型方法: 
    1.文件系統命令:cp,scp,tar,rsync; 
    2.系統快照snapshot;

  • 特徵: 
    1.由數據庫文件和目錄組成,是mysql數據目錄的所有或者部分; 
    2.通常備份比邏輯備份快,由於純屬是文件複製,不用像邏輯備份那樣,須要作sql的轉換; 
    3.備份的粒度比邏輯備份小,由於是全文件複製了,固然比sql要精確一些; 
    4.物理備份的文件能夠不只是數據庫,還能夠是數據庫的日誌,配置文件; 
    5.備份memory存儲引擎的數據就麻煩了,由於memory的數據不是存儲在硬盤的; 
    6.mysql服務器不運行的時候能夠進行備份,而邏輯備份須要mysql-server處理運行狀態; 
    7.mysqlbackup程序命令,能夠幫助innodb的數據進行備份;而直接使用文件系統的命令(cp,scp,tar,rsync)等,就能夠對myisam的數據進行備份;

邏輯備份

Logical backups save information represented as logical database structure (CREATE DATABASE, CREATE TABLE statements) and content (INSERT statements or delimited-text files). 
This type of backup is suitable for smaller amounts of data where you might edit the data values or table structure, or recreate the data on a different machine architecture.

 

  • 1
  • 1
  • 定義 
    邏輯備份就是把數據庫的結構定義語句,數據內容的插入語句,所有存儲下來。而後恢復的時候,在另外一個mysql服務器執行這些語句,就能夠建立另外一個與以前同樣的數據庫了。

  • 典型的方法: 
    1.mysqldump程序能夠把對遠程/本地數據庫進行邏輯備份. 
    2.SELECT ..... INTO OUTFILE能夠把數據進行邏輯備份,但備份文件只能存儲在mysql-server的機器上;

  • 適用:這種比較適合數據量少的數據庫。

  • 特色: 
    1.邏輯備份經過查詢數據庫的信息進行備份; 
    2.速度比較慢。由於獲取了信息,而後組裝成sql語句,若是調用命令是遠程,還要把sql語句遠程傳輸; 
    3.備份文件要比物理備份大; 
    4.備份粒度只能到表; 
    5.沒有日誌或者配置文件; 
    6.備份文件是sql語句,邏輯語句,相對來講,可移植性要好。好比我在linux備份了,能夠在windows進行恢復,物理備份就不行;

全量備份與增量備份

上面所說的,都是全量備份,通常增量備份,都是經過mysql-server的二進制文件進行增量備份;

增量備份的恢復

增量備份的恢復,是先恢復某個時間點A的全量備份,而後再把從A開始以後的二進制文件進行應用,從而完成恢復;

 



artType01.jpg MySQL備份和還原系列一:備份類型

2014-07-23 16:54:49  

標籤:   備份       sql       數據庫  

原創做品,容許轉載,轉載時請務必以超連接形式標明文章    原始出處    、做者信息和本聲明。不然將追究法律責任。   http://skypegnu1.blog.51cto.com/8991766/1501442  

1、備份類型

    對於數據庫來講,最基本的工做就是數據庫的備份與恢復,在乎外狀況下(服務器宕機/或者磁盤損損壞)要保證數據不丟失。

在實體關係模型中,咱們知道有三種關係:一對一

一、按照mysql服務器狀態區分(備份過程當中,服務器是否繼續提供服務)

  • cold Backup      離線備份,讀、寫操做均停止

  • warm Backup   僅可執行讀操做

  • hot Backup       讀、寫操做不受影響

hot備份指在數據庫運行中直接備份,對正在運行的服務沒有任何影響。

cold備份指在數據庫中止的狀況下進行備份,比較簡單,只須要拷貝相關的物理文件便可。

warm備份一樣是數據庫運行時進行,可是對當前的數據庫有所影響。


二、按照備份數據格式

  • logical     將數據導出至文本文件中,備份sql語句,在恢復的時候執行備份的sql語句實現數據庫數據的重現,適用於數據庫升級、遷移工做,可是恢復時花的時間比較長。

  • physical    文件系統層面直接拷貝數據文件,但真正備份的時候天然不是cp這麼簡單


三、數據存儲方式

  • full                    徹底備份

  • increamenta    增量備份   

  • differential       差別備份

差別備份的定義:備份自上一次徹底備份以後有變化的數據。

增量備份的定義:備份自上一次備份(包括徹底備份,增量備份,差別備份)以後有變化的數據。


2、備份工具

wKiom1PPXZvCj5iJAAIb5TLCNys024.jpg

主要按照邏輯備份仍是物理備份分紅兩類進行說明:

邏輯備份:速度相對較慢,可能丟失浮點數精度,可移植性強。

物理備份:速度很是快,在文件系統級完成。


一、邏輯備份(將數據導出至文本文件中)

  • mysqldump 

    mysqldump是採用SQL級別的備份機制,將數據表導成SQL腳本文件,是最經常使用的邏輯備份方法。

    ALL        WARM    支持全部引擎,MyISAM引擎是邏輯溫備,可手動加鎖

    INNODB     HOT     邏輯熱備,僅用於INODB引擎

  • SELECT INTO OUTFILE

    進行SQL級別的表備份,邏輯


二、物理備份(直接備份數據文件)

  • ibbackup

    INNODBHOT對於INNODB引擎,熱備,物理備份

    ALLWARM    其餘引擎,溫備

    ibbackup 商業工具 MyISAM是溫備份,InnoDB是熱備份 ,備份和還原速度都很快,這個軟件它的每服務器受權版本是5000美圓。

  • xtrabackup

    xtrabackup 開源工具 MyISAM是溫備份,InnoDB是熱備份 ,是ibbackup商業工具的替代工具。

  • snapshot(LVM,ZFS)

    ALLALMOST     物理 HOT

    熱備、支持全部基於本地磁盤的存儲引擎、快速備份、低開銷、容易保持完整性、快速恢復等。

  • 幾乎是熱備份,支持全部引擎,基於快照(LVM,ZFS)的物理備份,速度很是快。隻影響數據幾秒鐘而已。可是建立快照的過程自己就影響到了數據庫在線的使用,因此備份速度比較快,恢復速度比較快,沒有什麼彈性空間,並且LVM的限制:不能對多個邏輯卷同一時間進行備份,因此數據文件和事務日誌等各類文件必須放在同一個LVM上。而ZFS則很是好的能夠在多邏輯卷之間備份。

  • mysqlhotcopy

    僅MYISAMMOSTLY COLD(LVM,snapshot)

    mysqlhotcopy是一個perl程序,是lock tables、flush tables 和cp或scp來快速備份數據庫。它是備份數據庫或單個表的最快的途徑,但它只能運行在數據庫文件(包括數據表文件、數據文件、索引文件)所在的機器上。

    物理備份工具,但只支持MyISAM引擎,基本上屬於冷備的範疇,物理備份,速度比較快。

    mysqldump能夠備份各類類型的數據表,可是mysqlhotcopy只適合備份MyISAM和ISAM的數據表。因此使用mysqlhotcopy以前,你必須確認你的數據表是否是有其餘的存儲引擎(storage engines)的。

  • tar,cp冷備

    使用直接拷貝數據庫文件的方式進行打包備份,須要注意的是執行步驟:鎖表、備份、解表。恢復也很簡單,直接拷貝到以前的數據庫文件的存放目錄便可。注意:對於Innodb引擎的表來講,還須要備份日誌文件,即ib_logfile*文件。由於當Innodb表損壞時,就能夠依靠這些日誌文件來恢復。cp 冷備份,支持全部引擎,複製命令,只能實現冷備,物理備份。使用歸檔工具,cp命令,對其進行備份的,備份速度快,還原速度幾乎最快,可是靈活度很低,能夠跨系統,可是跨平臺能力不好。


  • 使用mysql主從複製

    mysql的複製是指將主數據庫的DDL和DML操做經過二進制文件(bin-log)傳送到從服務器上,而後在從服務器上對這些日誌作從新執行的操做,從而使得從服務器和主服務器保持數據的同步。


3、備份策略

備份/恢復策略:

  1. 要按期作 mysql 備份,並考慮系統能夠承受的恢復時間。

  2. 確保 mysql 打開 log-bin,有了 binarylog,mysql 才能夠在必要的時候作完整恢復,或基於時間點的恢復,或基於位置的恢復。

  3. 要常常作備份恢復測試,確保備份是有效的,而且是能夠恢復的。

備份什麼?

  • 數據文件

  • my.cnf 配置文件

  • 二進制日誌

  • 事務日誌


由於MySQL表保存爲文件方式,很容易備份。要想保持備份的一致性,對相關表執行LOCK TABLES操做,而後對錶執行FLUSH TABLES。

你只須要讀鎖定;這樣當你複製數據庫目錄中的文件時,容許其它客戶繼續查詢表。須要FLUSH TABLES語句來確保開始備份前將全部激活的索引頁寫入硬盤。


策略一:直接拷貝數據庫文件(文件系統備份工具 cp)(適合小型數據庫,是最可靠的)


    當你使用直接備份方法時,必須保證表不在被使用。若是服務器在你正在拷貝一個表時改變它,拷貝就失去意義。保證你的拷貝完整性的最好方法是關閉服務器,拷貝文件,而後重啓服務器。若是你不想關閉服務器,要在執行表檢查的同時鎖定服務器。若是服務器在運行,相同的制約也適用於拷貝文件,並且你應該使用相同的鎖定協議讓服務器「安靜下來」。當你完成了備份時,須要重啓服務器(若是關閉了它)或釋放加在表上的鎖定(若是你讓服務器運行)。要用直接拷貝文件把一個數據庫從一臺機器拷貝到另外一臺機器上,只是將文件拷貝到另外一臺服務器主機的適當數據目錄下便可。要確保文件是MyIASM格式或兩臺機器有相同的硬件結構,不然你的數據庫在另外一臺主機上有奇怪的內容。你也應該保證在另外一臺機器上的服務器在你正在安裝數據庫表時不訪問它們。


策略二:mysqldump備份數據庫(徹底備份+增長備份,速度相對較慢,適合中小型數據庫)(MyISAM是溫備份,InnoDB是熱備份)

mysqldump 是採用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不一樣的 MySQL 版本之間升級時相對比較合適,這也是最經常使用的備份方法。mysqldump 比直接拷貝要慢些。對於中等級別業務量的系統來講,備份策略能夠這麼定:第一次徹底備份,天天一次增量備份,每週再作一次徹底備份,如此一直重複。而對於重要的且繁忙的系統來講,則可能須要天天一次全量備份,每小時一次增量備份,甚至更頻繁。爲了避免影響線上業務,實如今線備份,而且能增量備份,最好的辦法就是採用主從複製機制(replication),在 slave 機器上作備份。


策略三:lvs快照從物理角度實現幾乎熱備的徹底備份,配合二進制日誌備份實現增量備份,速度快適合比較煩忙的數據庫


前提:

  • 數據文件要在邏輯捲上;

  • 此邏輯卷所在卷組必須有足夠空間使用快照卷;

  • 數據文件和事務日誌要在同一個邏輯捲上;


策略四:xtrabackup 備份數據庫,實現徹底熱備份與增量熱備份(MyISAM是溫備份,InnoDB是熱備份)


說明:Xtrabackup是一個對InnoDB作數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup或ibbackup的一個很好的替代品。

Xtrabackup有兩個主要的工具:xtrabackup、innobackupex

  • xtrabackup 只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表。

  • innobackupex 是參考了InnoDB Hotbackup的innoback腳本修改而來的.innobackupex是一個perl腳本封裝,封裝了xtrabackup。主要是爲了方便的 同時備份InnoDB和MyISAM引擎的表,但在處理myisam時須要加一個讀鎖。而且加入了一些使用的選項。如slave-info能夠記錄備份恢復後做爲slave須要的一些信息,根據這些信息,能夠很方便的利用備份來重作slave。

特色:

  • 備份過程快速、可靠;

  • 備份過程不會打斷正在執行的事務;

  • 可以基於壓縮等功能節約磁盤空間和流量;

  • 自動實現備份檢驗;

  • 還原速度快;


策略五:主從複製(replication)實現數據庫實時備份(集羣中經常使用)


參考:

http://freeloda.blog.51cto.com/2033581/1254883


本文出自 「Share your knowledge」 博客,請務必保留此出處http://skypegnu1.blog.51cto.com/8991766/1501442

artType02.jpg 使用Xtrabackup進行MySQL備份

2014-07-24 13:18:46  

標籤:   空間       mysql       流量       數據庫備份       最新版  

1、xtrabackup 

一、簡介

 Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上唯一一款開源的可以對innodb和xtradb數據庫進行熱備的工具。特色:

(1)備份過程快速、可靠;

(2)備份過程不會打斷正在執行的事務;

(3)可以基於壓縮等功能節約磁盤空間和流量;

(4)自動實現備份檢驗;

(5)還原速度快;

 

經過xtrabackup 可實現徹底熱備份與增量熱備份(MyISAM是溫備份,InnoDB是熱備份)

二、安裝

    其最新版的軟件可從 https://www.percona.com/software/mysql-database/percona-xtrabackup 得到。


# 安裝xtrabackup依賴的包
# yum -y install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.*  
 
# tar xf percona-xtrabackup-2.2.3-4982-Linux-i686.tar.gz -C /usr/local/src
# vi /etc/profile.d/xtrabackup.sh
export PATH=$PATH:/usr/local/src/percona-xtrabackup-2.2.3-Linux-i686/bin
 
# . /etc/profile.d/xtrabackup.sh
 
## 測試
# innobackupex --version
# xtrabackup --version

2、備份的實現

一、徹底備份

innobackupex --host=HOST --user=DB_USER --password=DB_USERPASS /path/to/BACKUP-DIR/

若是要使用一個最小權限的用戶進行備份,則可基於以下命令建立此類用戶:

mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;


    使用innobakupex備份時,其會調用xtrabackup備份全部的InnoDB表,複製全部關於表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。

在備份的同時,innobackupex 還會在備份目錄中建立以下文件:

(1)xtrabackup_checkpoints —— 備份類型(如徹底或增量)、備份狀態(如是否已經爲prepared狀態)和LSN(日誌序列號)範圍信息;每一個InnoDB頁(一般爲16k大小)都會包含一個日誌序列號,即LSN。LSN是整個數據庫系統的系統版本號,每一個頁面相關的LSN可以代表此頁面最近是如何發生改變的。

(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二進制日誌文件及用於InnoDB或XtraDB表的二進制日誌文件的當前position。

(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執行文件;

(5)backup-my.cnf —— 備份命令用到的配置選項信息;

 

    在使用innobackupex進行備份時,還可使用--no-timestamp選項來阻止命令自動建立一個以時間命名的目錄;如此一來,innobackupex 命令將會建立一個BACKUP-DIR目錄來存儲備份數據。

 

二、準備(prepare)一個徹底備份

    通常狀況下,在備份完成後,數據尚且不能用於恢復操做,由於備份的數據中可能會包含還沒有提交的事務或已經提交但還沒有同步至數據文件中的事務。所以,此時數據文件仍處於不一致狀態。「準備」的主要做用正是經過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。

innobakupex命令的--apply-log選項可用於實現上述功能。以下面的命令:

innobackupex --apply-log  /path/to/BACKUP-DIR
若是執行正確,其最後輸出的幾行信息一般以下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

120407  9:01:36  InnoDB: Starting shutdown...

120407  9:01:40  InnoDB: Shutdown completed; log sequence number 92036620

120407 09:01:40  innobackupex: completed OK!

 

在實現「準備」的過程當中,innobackupex一般還可使用--use-memory選項來指定其可使用的內存的大小,默認一般爲100M。若是有足夠的內存可用,能夠多劃分一些內存給prepare的過程,以提升其完成速度。

 

三、從一個徹底備份中恢復數據

    innobackupex命令的--copy-back選項用於執行恢復操做,其經過複製全部數據相關的文件至mysql服務器DATADIR目錄中來執行恢復過程。innobackupex經過backup-my.cnf來獲取DATADIR目錄的相關信息。

innobackupex --copy-back  /path/to/BACKUP-DIR

若是執行正確,其輸出信息的最後幾行一般以下:

innobackupex: Starting to copy InnoDB log files

innobackupex: in '/backup/2012-04-07_08-17-03'

innobackupex: back to original InnoDB log directory '/mydata/data'

innobackupex: Finished copying back files.

 

120407 09:36:10  innobackupex: completed OK!

 

請確保如上信息的最行一行出現「innobackupex: completed OK!」。

 

當數據恢復至DATADIR目錄之後,還須要確保全部數據文件的屬主和屬組均爲正確的用戶,如mysql,不然,在啓動mysqld以前還須要事先修改數據文件的屬主和屬組。如:

chown -R  mysql:mysql  /mydata/data/

3、使用innobackupex進行增量備份

  每一個InnoDB的頁面都會包含一個LSN信息,每當相關的數據發生改變,相關的頁面的LSN就會自動增加。這正是InnoDB表能夠進行增量備份的基礎,即innobackupex經過備份上次徹底備份以後發生改變的頁面來實現。

  要實現第一次增量備份,可使用下面的命令進行:

innobackupex --incremental --incremental-basedir=BASEDIR  /backup
  其中,BASEDIR指的是徹底備份所在的目錄,此命令執行結束後,innobackupex命令會在/backup目錄中建立一個新的以時間命名的目錄以存放全部的增量備份數據。另外,在執行過增量備份以後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。


  • --incremental 指定是增量備份

  • --incremental-basedir 指定基於哪一個備份作增量備份,最後是增量備份保存的目錄

    須要注意的是,增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是徹底備份。

 

「準備」(prepare)增量備份與整理徹底備份有着一些不一樣,尤爲要注意的是:

(1)須要在每一個備份(包括徹底和各個增量備份)上,將已經提交的事務進行「重放」。「重放」以後,全部的備份數據將合併到徹底備份上。

(2)基於全部的備份將未提交的事務進行「回滾」。

 

因而,操做就變成了:

innobackupex --apply-log --redo-only BASE-DIR
接着執行:

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
然後是第二個增量:

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2    

 

其中BASE-DIR指的是徹底備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即若是有屢次增量備份,每一次都要執行如上操做;

 

4、Xtrabackup的「流」及「備份壓縮」功能

 

Xtrabackup對備份的數據文件支持「流」功能,便可以將備份的數據經過STDOUT傳輸給tar程序進行歸檔,而不是默認的直接保存至某備份目錄中。要使用此功能,僅須要使用--stream選項便可。如:

innobackupex --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz

甚至也可使用相似以下命令將數據備份至其它服務器:

innobackupex --stream=tar  /backup | ssh user@www.magedu.com  "cat -  > /backups/`date +%F_%H-%M-%S`.tar"

此外,在執行本地備份時,還可使用--parallel選項對多個文件進行並行複製。此選項用於指定在複製時啓動的線程數目。固然,在實際進行備份時要利用此功能的便利性,也須要啓用innodb_file_per_table選項或共享的表空間經過innodb_data_file_path選項存儲在多個ibdata文件中。對某一數據庫的多個文件的複製沒法利用到此功能。其簡單使用方法以下:

innobackupex --parallel  /path/to/backup
同時,innobackupex備份的數據文件也能夠存儲至遠程主機,這可使用--remote-host選項來實現:

# innobackupex --remote-host=root@www.magedu.com  /path/IN/REMOTE/HOST/to/backup

 

 

5、導入或導出單張表

 

默認狀況下,InnoDB表不能經過直接複製表文件的方式在mysql服務器之間進行移植,即使使用了innodb_file_per_table選項。而使用Xtrabackup工具能夠實現此種功能,不過,此時須要「導出」表的mysql服務器啓用了innodb_file_per_table選項(嚴格來講,是要「導出」的表在其建立以前,mysql服務器就啓用了innodb_file_per_table選項),而且「導入」表的服務器同時啓用了innodb_file_per_table和innodb_expand_import選項。

 

(1)「導出」表

導出表是在備份的prepare階段進行的,所以,一旦徹底備份完成,就能夠在preparef過程當中經過--export選項將某表導出了:

innobackupex --apply-log --export /path/to/backup    

此命令會爲每一個innodb表的表空間建立一個以.exp結尾的文件,這些以.exp結尾的文件則能夠用於導入至其它服務器。

 

(2)「導入」表

要在mysql服務器上導入來自於其它服務器的某innodb表,須要先在當前服務器上建立一個跟原表表結構一致的表,然後才能實現將表導入:

mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;
而後將此表的表空間刪除:

mysql> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;

接下來,未來自於「導出」表的服務器的mytable表的mytable.ibd和mytable.exp文件複製到當前服務器的數據目錄,而後使用以下命令將其「導入」:

mysql> ALTER TABLE mydatabase.mytable  IMPORT TABLESPACE; 

 

6、使用Xtrabackup對數據庫進行部分備份

 

Xtrabackup也能夠實現部分備份,即只備份某個或某些指定的數據庫或某數據庫中的某個或某些表。但要使用此功能,必須啓用innodb_file_per_table選項,即每張表保存爲一個獨立的文件。同時,其也不支持--stream選項,即不支持將數據經過管道傳輸給其它程序進行處理。

 

此外,還原部分備份跟還原所有數據的備份也有所不一樣,即你不能經過簡單地將prepared的部分備份使用--copy-back選項直接複製回數據目錄,而是要經過導入表的方向來實現還原。固然,有些狀況下,部分備份也能夠直接經過--copy-back進行還原,但這種方式還原而來的數據多數會產生數據不一致的問題,所以,不管如何不推薦使用這種方式。

 

(1)建立部分備份

 

建立部分備份的方式有三種:正則表達式(--include), 枚舉表文件(--tables-file)和列出要備份的數據庫(--databases)。

 

(a)使用--include

使用--include時,要求爲其指定要備份的表的完整名稱,即形如databasename.tablename,如:

 innobackupex --include='^mageedu[.]tb1'  /path/to/backup
 

(b)使用--tables-file

此選項的參數須要是一個文件名,此文件中每行包含一個要備份的表的完整名稱;如:

# echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt  /path/to/backup

 

(c)使用--databases

此選項接受的參數爲數據名,若是要指定多個數據庫,彼此間須要以空格隔開;同時,在指定某數據庫時,也能夠只指定其中的某張表。此外,此選項也能夠接受一個文件爲參數,文件中每一行爲一個要備份的對象。如:

 innobackupex --databases='mageedu.tb1 testdb"  /path/to/backup
 

(2)整理(preparing)部分備份
 

prepare部分備份的過程相似於導出表的過程,要使用--export選項進行:

innobackupex --apply-log --export  /pat/to/partial/backup
 

此命令執行過程當中,innobackupex會調用xtrabackup命令從數據字典中移除缺失的表,所以,會顯示出許多關於「表不存在」類的警告信息。同時,也會顯示出爲備份文件中存在的表建立.exp文件的相關信息。

 

(3)還原部分備份
 

還原部分備份的過程跟導入表的過程相同。固然,也能夠經過直接複製prepared狀態的備份直接至數據目錄中實現還原,不要此時要求數據目錄處於一致狀態。

相關文章
相關標籤/搜索