最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Xtrabackup使用指南 InnoDB數據備份工具

 更新時間:2011年10月29日 02:24:34   作者:  
Xtrabackup是一個對InnoDB做數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業(yè)備份工具InnoDB Hotbackup的一個很好的替代品
一、Xtrabackup介紹

  A、Xtrabackup是什么

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

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

  1、xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表
  2、innobackupex是參考了InnoDB Hotbackup的innoback腳本修改而來的.innobackupex是一個perl腳本封裝,封裝了xtrabackup。主要是為了方便的 同時備份InnoDB和MyISAM引擎的表,但在處理myisam時需要加一個讀鎖。并且加入了一些使用的選項。如slave-info可以記錄備份恢 復后,作為slave需要的一些信息,根據這些信息,可以很方便的利用備份來重做slave。
  3、官方文檔:http://www.percona.com/docs/wiki/percona-xtrabackup:start

  B、Xtrabackup可以做什么

  在線(熱)備份整個庫的InnoDB、 XtraDB表
  在xtrabackup的上一次整庫備份基礎上做增量備份(innodb only)
  以流的形式產生備份,可以直接保存到遠程機器上(本機硬盤空間不足時很有用)

  MySQL數據庫本身提供的工具并不支持真正的增量備份,二進制日志恢復是point-in-time(時間點)的恢復而不是增量備份。Xtrabackup工具支持對InnoDB存儲引擎的增量備份,工作原理如下:

  (1)首先完成一個完全備份,并記錄下此時檢查點的LSN(Log Sequence Number)。
  (2)在進程增量備份時,比較表空間中每個頁的LSN是否大于上次備份時的LSN,如果是,則備份該頁,同時記錄當前檢查點的LSN。

  首先,在logfile中找到并記錄最后一個checkpoint(“l(fā)ast checkpoint LSN”),然后開始從LSN的位置開始拷貝InnoDB的logfile到xtrabackup_logfile;接著,開始拷貝全部的數據文 件.ibd;在拷貝全部數據文件結束之后,才停止拷貝logfile。

  因為logfile里面記錄全部的數據修改情況,所以,即時在備份過程中數據文件被修改過了,恢復時仍然能夠通過解析xtrabackup_logfile保持數據的一致。

  C、Xtrabackup備份原理

  XtraBackup基于InnoDB的crash-recovery功能。它會復制innodb的data file,由于不鎖表,復制出來的數據是不一致的,在恢復的時候使用crash-recovery,使得數據恢復一致。

  InnoDB維護了一個redo log,又稱為transaction log,事務日志,它包含了innodb數據的所有改動情況。當InnoDB啟動的時候,它會先去檢查data file和transaction log,并且會做二步操作:

  XtraBackup在備份的時候, 一頁一頁地復制innodb的數據,而且不鎖定表,與此同時,XtraBackup還有另外一個線程監(jiān)視著transactions log,一旦log發(fā)生變化,就把變化過的log pages復制走。為什么要急著復制走呢? 因為transactions log文件大小有限,寫滿之后,就會從頭再開始寫,所以新數據可能會覆蓋到舊的數據。

  在prepare過程中,XtraBackup使用復制到的transactions log對備份出來的innodb data file進行crash recovery。

  D、實現細節(jié)

  XtraBackup以read-write模式打開innodb的數據文件,然后對其進行復制。其實它不會修改此文件。也就是說,運行 XtraBackup的用戶,必須對innodb的數據文件具有讀寫權限。之所以采用read-write模式是因為XtraBackup采用了其內置的 innodb庫來打開文件,而innodb庫打開文件的時候就是rw的。

  XtraBackup要從文件系統中復制大量的數據,所以它盡可能地使用posix_fadvise(),來告訴OS不要緩存讀取到的數據,從 而提升性能。因為這些數據不會重用到了,OS卻沒有這么聰明。如果要緩存一下的話,幾個G的數據,會對OS的虛擬內存造成很大的壓力,其它進程,比如 mysqld很有可能被swap出去,這樣系統就會受到很大影響了。

  在備份innodb page的過程中,XtraBackup每次讀寫1MB的數據,1MB/16KB=64個page。這個不可配置。讀1MB數據之 后,XtraBackup一頁一頁地遍歷這1MB數據,使用innodb的buf_page_is_corrupted()函數檢查此頁的數據是否正常, 如果數據不正常,就重新讀取這一頁,最多重新讀取10次,如果還是失敗,備份就失敗了,退出。在復制transactions log的時候,每次讀寫512KB的數據。同樣不可以配置。

  二、Xtrabackup安裝

  本文通過源碼方式安裝Xtrabackup,最新的版本是1.6.

  Xtrabackup與一般的源碼構建方式不同,它采用的在MySQL源代碼上打補丁的構建方式。下載的源碼包比較大就是是因為這個包里打包了編譯需要的兩個MySQL Source,一個5.1.56,一個5.5.10。

  安裝編譯所需的依賴包

BASH

yum install libaio libaio-devel

  編譯安裝Xtrabackup

BASH
復制代碼 代碼如下:

wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-1.6/source/xtrabackup-1.6.tar.gz
tar xvf xtrabackup-1.6.tar.gz
cd xtrabackup-1.6
utils/build.sh innodb55

  注:build.sh是源碼包中提供的編譯腳本,MySQL 5.1可用參數innodb51_builtin。

  編譯成功后,會在對應mysql版本目錄中生成一個xtrabackup程序,我這里生成的路徑是mysql-5.5.10/storage/innobase/xtrabackup/中

BASH
ls mysql-5.5.10/storage/innobase/xtrabackup/
Makefile xtrabackup.c xtrabackup_innodb55 xtrabackup.o

  復制相應文件和建立軟鏈到/usr/bin下,這么做的原因是滿足innobackupex腳本的需要。

BASH
復制代碼 代碼如下:

cp mysql-5.5.10/storage/innobase/xtrabackup/xtrabackup_innodb55 /usr/bin/xtrabackup_55
cp innobackupex /usr/bin/innobackupex
#備份時如果打包就需要這個命令,非必需。
cp libtar-1.2.11/libtar/tar4ibd /usr/bin/tar4ibd  
ln -sf /usr/local/webserver/mysql/bin/mysql /usr/bin/mysql

  三.Xtrabackup的備份與恢復使用

  A、Xtrabackup常用參數選項如下:

BASH

--defaults-file=#
默認配置文件的路徑,如果不該參數,xtrabackup將從依次從以下位置查找配置文件/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf,并讀取配置文件中的[mysqld]和[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6個參數即可讓xtrabackup正常工作。

--defaults-extra-file=#
如果使用了該參數,在讀取了全局配置文件之后,會再讀取這里指定的配置文件

--target-dir=name
備份文件的存放目錄路徑

--backup
實施備份到target-dir

--prepare
實施對備份文件進行恢復前的準備(生成InnoDB log file)

--print-param
打印備份或恢復時需要的參數

--use-memory=#
該參數在 prepare 的時候使用,控制prepare時innodb實例使用的內存量

--suspend-at-end
在target-dir目錄下產生一個xtrabackup_suspended文件,將xtrabackup進程掛起,不停地將數據文件的變化同步到備份文件,直到用戶手工刪除xtrabackup_suspended文件

--throttle=#
每秒IO次數,限制backup時使用的I/O操作量,使備份對數據庫正常業(yè)務的影響最小化

--log-stream
該參數在backup的時候使用,將xtrabackup_logfile的內容輸出到標準輸出,使用該參數時會自動使用suspend-at-end參數,innobackupex腳本的stream 模式會使用該參數。

--incremental-lsn=name
增量備份時只拷貝LSN比該參數指定值新的ibd pages,前次備份到了哪個LSN可以看前次備份集的xtrabackup_checkpoints文件

--incremental-basedir=name
該參數在backup的時候使用,備份比該參數指定位置的備份集新的idb pages

--incremental-dir=name
該參數在prepare的時候使用,指定prepare時產生的.delta 文件和日志文件的存放路徑

--tables=name
在備份file-per-table類型的數據文件時使用,使用正則表達式指定需要備份的innodb表

--datadir=name
MySQL數據庫的數據文件目錄。

  B、普通備份方式

  a)普通備份(全量備份)

BASH
復制代碼 代碼如下:

mkdir -p /data0/backup/mysql
xtrabackup_55 --defaults-file=/data0/mysql/my.cnf --backup --target-dir=/data0/backup/mysql/
cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/

  注意:xtrabackup只備份數據文件,并不備份數據表結構(.frm),所以這里要手動備份一下,以便xtrabackup恢復的時候使用。

  全量備份恢復

  實施對備份文件進行恢復前的準備

BASH

xtrabackup_55 --defaults-file=/data0/mysql/my.cnf --prepare --target-dir=/data0/backup/mysql/

  從備份目錄復制對應數據庫表結構到默認的數據目錄

BASH

cp -r /data0/backup/mysql/testinnodb/ /data0/mysql/data/

  刪除默認數據目錄中對應的數據文件并復制備份的數據文件到默認數據目錄

BASH

rm /data0/backup/mysql/ib*
cp /data0/backup/mysql/ib* /data0/mysql/data/

  修改數據目錄權限

BASH

chown -R mysql:mysql /data0/mysql/data

  重啟MySQL

BASH

/data0/mysql/mysql restart

  b)增量備份

  增量備份優(yōu)點:

  1、數據庫太大沒有足夠的空間全量備份,作增量備份有效節(jié)省空間,且效率高。
  2、支持熱備份。備份過程不鎖表,不受時間限制,不影響用戶使用。
  3、每日備份只產生少量數據,遠程備份傳輸更方便。同時節(jié)省空間。
  4、備份恢復基于文件操作,降低直接對數據庫操作風險。
  5、備份效率更高,恢復效率更高。

  這個我研究N久沒成功,原因暫時還沒找到。我測試環(huán)境的Mysql版本是5.5.11的,xtrabackup_55是根據MySQL5.5.9的源碼編譯的,不知道和這個有關系沒?待驗證!這里只把實現步驟整理出來。

  增量備份及模擬恢復步驟:

  先做一次全量備份,增量備份需要以此為基礎

BASH
復制代碼 代碼如下:

#建立備份目錄
mkdir -p /data0/backup/mysql/base
#建立一個全量備份
xtrabackup_55 --defaults-file=/data0/mysql/my.cnf --backup --target-dir=/data0/backup/mysql/base
#生成的備份數據文件
ls /data0/backup/mysql/base/
ibdata1 xtrabackup_checkpoints xtrabackup_logfile
#備份數據庫表結構
cp -r /data0/mysql/data/testinnodb/ /data0/backup/mysql/

  以此全量備份為基礎進行增量備份

BASH
復制代碼 代碼如下:

#建立備份目錄
mkdir -p /data0/backup/mysql/delta
#建立一個增量備份
xtrabackup_55 --defaults-file=/data0/mysql/my.cnf --backup --target-dir=/data0/backup/mysql/delta  --incremental-basedir=/data0/backup/mysql/base
#生成的備份數據文件
ls /data0/backup/mysql/delta/
ibdata1.delta xtrabackup_checkpoints xtrabackup_logfile

  注:在增量備份目錄下,數據文件都是以.delta結尾的。增量備份只備份上一次全量備份后被修改過的page,所以增量備份只暫用較少的空 間。增量備份可以在增量備份的基礎上增量。增量備份目錄每次都需修改的。比如第二次增量就改成/data0/backup/mysql/delta2)

  增量備份恢復過程:

  首先需要分別對全量、增量備份各做一次prepare操作。

BASH

xtrabackup_55 --defaults-file=/data0/mysql/my.cnf --prepare --target-dir=/data0/backup/mysql/base
xtrabackup_55 --defaults-file=/data0/mysql/my.cnf --prepare --target-dir=/data0/backup/mysql/base --incremental-dir=/data0/backup/mysql/delta/

  從備份目錄復制對應數據庫表結構到默認的數據目錄

BASH

cp -r /data0/backup/mysql/testinnodb/ /data0/mysql/data/

  刪除默認數據目錄中對應的數據文件并復制備份的數據文件到默認數據目錄

BASH
rm /data0/backup/mysql/ib*
cp /data0/backup/mysql/ib* /data0/mysql/data/

  修改數據目錄權限

BASH
chown -R mysql:mysql /data0/mysql/data

  重啟MySQL

BASH
/data0/mysql/mysql restart

  四、innobackupex的備份與恢復使用

  A、數據備份

  通常一般都直接使用innobackupex,因為它能同時備份InnoDB和MyISAM引擎的表。要注意的是my.cnf里datadir這個參數是必須要指定的,xtrabackup_55是根據它去定位innodb數據文件的位置。

  innobackupex語法

BASH

innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME] [--password=WORD]
[--port=PORT] [--socket=SOCKET] [--no-timestamp] [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar]
[--defaults-file=MY.CNF] [--databases=LIST] [--remote-host=HOSTNAME] BACKUP-ROOT-DIR

innobackup --apply-log [--use-memory=MB] [--uncompress] [--defaults-file=MY.CNF] [--ibbackup=IBBACKUP-BINARY] BACKUP-DIR

innobackup --copy-back [--defaults-file=MY.CNF] BACKUP-DIR

各參數說明:

--defaults-file
同xtrabackup的--defaults-file參數

--apply-log
對xtrabackup的--prepare參數的封裝

--copy-back
做數據恢復時將備份數據文件拷貝到MySQL服務器的datadir ;

--remote-host=HOSTNAME
通過ssh將備份數據存儲到進程服務器上;

--stream=[tar]

備份文件輸出格式, tar時使用tar4ibd , 該文件可在XtarBackup binary文件中獲得.如果備份時有指定--stream=tar, 則tar4ibd文件所處目錄一定要在$PATH中(因為使用的是tar4ibd去壓縮, 在XtraBackup的binary包中可獲得該文件)。

在使用參數stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,如果你備份的時候并發(fā)寫入較大的話xtrabackup_logfile可能會很大(5G+),很可能會撐滿你的/tmp目錄,可以通過參數--tmpdir指定目錄來解決這個問題。

--tmpdir=DIRECTORY

當有指定--remote-host or --stream時, 事務日志臨時存儲的目錄, 默認采用MySQL配置文件中所指定的臨時目錄tmpdir

--redo-only --apply-log組,

強制備份日志時只redo ,跳過rollback。這在做增量備份時非常必要。

--use-memory=#

該參數在prepare的時候使用,控制prepare時innodb實例使用的內存量

--throttle=IOS

同xtrabackup的--throttle參數

--sleep=是給ibbackup使用的,指定每備份1M數據,過程停止拷貝多少毫秒,也是為了在備份時盡量減小對正常業(yè)務的影響,具體可以查看ibbackup的手冊 ;

--compress[=LEVEL]
對備份數據迚行壓縮,僅支持ibbackup,xtrabackup還沒有實現;

--include=REGEXP
對xtrabackup參數--tables的封裝,也支持ibbackup。備份包含的庫表,例如:--include="test.*",意思是要備份test庫中所有的表。如果需要全備份,則省略這個參數;如果需要備份test庫下的2個表:test1和test2,則寫成:--include="test.test1|test.test2"。也可以使用通配符,如:--include="test.test*"。

--databases=LIST
列出需要備份的databases,如果沒有指定該參數,所有包含MyISAM和InnoDB表的database都會被備份;

--uncompress
解壓備份的數據文件,支持ibbackup,xtrabackup還沒有實現該功能;

--slave-info,
備份從庫, 加上--slave-info備份目錄下會多生成一個xtrabackup_slave_info 文件, 這里會保存主日志文件以及偏移, 文件內容類似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

--socket=SOCKET
指定mysql.sock所在位置,以便備份進程登錄mysql.

備份前首先所需要建立一個備份所需的目錄

BASH

mkdir -p /data0/backup/mysql

  1、普通備份

BASH

innobackupex --database="testinnodb test" --user=root --no-lock --defaults-file=/data0/mysql/my.cnf /data0/backup/mysql 2>/tmp/mysqlbackup.log

  注:使用mysql的root用戶將數據庫testinnodb和test的備份,備份路徑是/data0/backup/mysql/。備份 成功后會在該目錄下將創(chuàng)建以時間戳為名稱的備份目錄。no-lock參數用于指定備份時不鎖定表。2>/tmp/mysqlbackup.log是 將備份過程中的輸出信息保存到/tmp/mysqlbackup.log中。

  2、打包備份

BASH

innobackupex --database="testinnodb test" --user=root --defaults-file=/data0/mysql/my.cnf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackup.log 1>/data0/backup/mysql/mike.tar

  注:這種備份時間會比較長,主要是執(zhí)行壓縮操作。這種方式打的包需要使用tar izxvf解壓。參數-i是必須加上的。

  3、壓縮備份

BASH

innobackupex --database="testinnodb test" --user=root --defaults-file=/data0/mysql/my.cnf --no-lock --stream=tar /data0/backup/mysql/ 2>/tmp/innobackup.log|gzip>/data0/backup/mysql/mike.tar.gz

  4、備份到遠程服務器
  
  備份當前機器下的數據到192.168.1.101的/data0/目錄下。

BASH

innobackupex --database="testinnodb test" --user=root --defaults-file=/data0/mysql/my.cnf --no-lock --stream=tar /data0/backup/mysql/|ssh root@192.168.1.101 cat ">"/data0/backup.tar

  B、數據恢復

  以壓縮后的備份數據為例,普通備份和打包備份的恢復方法和這個類似,就不在舉例了。

  解包備份數據

BASH

tar xvzfi mike.tar.gz

  指定恢復備份所需的xtrabackup_logfile文件的目錄

BASH

innobackupex --apply-log --user=root --defaults-file=/data0/mysql/my.cnf --no-lock /data0/backup/mysql

  從備份目錄拷貝數據、索引、日志到my.cnf文件里規(guī)定初始的數據目錄位置。

BASH

innobackupex --copy-back --user=root --defaults-file=/data0/mysql/my.cnf --no-lock /data0/backup/mysql

  修改數據目錄權限

BASH

chown -R mysql:mysql /data0/mysql/data

  重啟MySQL

BASH

/data0/mysql/mysql restart

  五、參考文檔

  http://www.google.com
  http://www.linuxidc.com/Linux/2011-05/35410.htm
  http://blogold.chinaunix.net/u4/122567/showart_2537465.html

相關文章

  • 詳解MySQL中Order By排序和filesort排序的原理及實現

    詳解MySQL中Order By排序和filesort排序的原理及實現

    這篇文章主要為大家詳細介紹了MySQL的Order By排序的底層原理與filesort排序,以及排序優(yōu)化手段,文中的示例代碼講解詳細,感興趣的小編可以跟隨小編一起學習一下
    2022-08-08
  • 一次Mysql?update?sql不當引起的生產故障記錄

    一次Mysql?update?sql不當引起的生產故障記錄

    這篇文章主要給大家介紹了關于一次Mysql?update?sql不當引起的生產故障的相關資料,由于update涉及到數據的修改,所以很容易推斷,update語句比select語句會更復雜一些,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • mysql增加新用戶無法登陸解決方法

    mysql增加新用戶無法登陸解決方法

    在使用mysql增加新用戶之后,發(fā)現新增的用戶無法登陸,一時束手無策,網上搜集整理了一下,曬出來和大家分享一下,希望可以幫助你們
    2012-11-11
  • mysql修改用戶密碼報錯的解決方法

    mysql修改用戶密碼報錯的解決方法

    mysql 初始化時,使用臨時密碼,修改自定義密碼時,由于自定義密碼比較簡單,就出現了不符合密碼策略的問題,這篇文章主要介紹了mysql修改用戶密碼報錯,需要的朋友可以參考下
    2023-03-03
  • SQL語句單引號與雙引號的使用方法

    SQL語句單引號與雙引號的使用方法

    這篇文章主要介紹了SQL語句中單引號、雙引號的使用方法,分別講述,雖然說的是Insert語句,?但是Select、Update、Delete語句都是一樣的,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • mySQL服務器連接,斷開及cmd使用操作

    mySQL服務器連接,斷開及cmd使用操作

    這篇文章主要介紹了mySQL服務器連接,斷開及cmd使用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Navicat連接MySQL提示1045錯誤解決(重置MySQL密碼)

    Navicat連接MySQL提示1045錯誤解決(重置MySQL密碼)

    連接MySQL數據庫時難免會遇到1045錯誤,主要是因為用戶輸入的用戶名或密碼錯誤被拒絕訪問,如果不想重裝,需要找回密碼或者重置密碼,這篇文章主要給大家介紹了關于Navicat連接MySQL提示1045錯誤解決的方法,主要是重置MySQL密碼,需要的朋友可以參考下
    2023-04-04
  • 與MSSQL對比學習MYSQL的心得(三)--查看字段的長度

    與MSSQL對比學習MYSQL的心得(三)--查看字段的長度

    今天我們來對比下MYSQL和MSSQL關于查看字段長度之間的區(qū)別
    2014-06-06
  • 自動恢復MySQL數據庫的日志文件思路分享及解決方案

    自動恢復MySQL數據庫的日志文件思路分享及解決方案

    本文主要講訴如何自動恢復mysql數據庫的日志文件,喜歡的在服務器或者數據庫上直接操作的兄弟們你值得收藏下!
    2014-08-08
  • MYSQL 無法識別中文的永久解決方法

    MYSQL 無法識別中文的永久解決方法

    多數情況下,mysql在剛剛安裝時是不支持中文的,這是由于編碼的問題,那么如何解決這個方法,本文我們就來詳細的了解一下
    2021-06-06

最新評論

册亨县| 道孚县| 嵊泗县| 濮阳市| 河北省| 肇源县| 和平区| 会昌县| 林州市| 双鸭山市| 沙坪坝区| 潞西市| 峨山| 米林县| 图木舒克市| 宝清县| 乾安县| 宁海县| 太谷县| 新田县| 科技| 本溪| 自贡市| 庆城县| 天水市| 昭觉县| 顺平县| 定州市| 福海县| 无锡市| 嘉祥县| 太谷县| 峡江县| 壶关县| 宣化县| 西平县| 红河县| 潞西市| 龙川县| 浦城县| 泗水县|