午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    MySQL中使用innobackupex、xtrabackup進行大數(shù)據(jù)的備份和還原教程
    來源:易賢網(wǎng) 閱讀:917 次 日期:2014-10-14 09:48:12
    溫馨提示:易賢網(wǎng)小編為您整理了“MySQL中使用innobackupex、xtrabackup進行大數(shù)據(jù)的備份和還原教程”,方便廣大網(wǎng)友查閱!

    大數(shù)據(jù)量備份與還原,始終是個難點。當MYSQL超10G,用mysqldump來導出就比較慢了。在這里推薦xtrabackup,這個工具比mysqldump要快很多。

    一、Xtrabackup介紹

    1、Xtrabackup是什么

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

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

    1、xtrabackup只能備份InnoDB和XtraDB兩種數(shù)據(jù)表,而不能備份MyISAM數(shù)據(jù)表

    2、 innobackupex是參考了InnoDB Hotbackup的innoback腳本修改而來的.innobackupex是一個perl腳本封裝,封裝了xtrabackup。主要是為了方便的 同時備份InnoDB和MyISAM引擎的表,但在處理myisam時需要加一個讀鎖。并且加入了一些使用的選項。如slave-info可以記錄備份恢 復后,作為slave需要的一些信息,根據(jù)這些信息,可以很方便的利用備份來重做slave。

    2、Xtrabackup可以做什么 :

    在線(熱)備份整個庫的InnoDB、 XtraDB表

    在xtrabackup的上一次整庫備份基礎上做增量備份(innodb only)

    以流的形式產(chǎn)生備份,可以直接保存到遠程機器上(本機硬盤空間不足時很有用)

    MySQL數(shù)據(jù)庫本身提供的工具并不支持真正的增量備份,二進制日志恢復是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;接著,開始拷貝全部的數(shù)據(jù)文 件.ibd;在拷貝全部數(shù)據(jù)文件結(jié)束之后,才停止拷貝logfile。

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

    因為innobackupex支持innodb,myisam,所以本文說一下,怎么使用innobackupex。

    二,安裝xtrabackup

    1、下載地址

    http://www.percona.com/downloads/XtraBackup/

    2、安裝

    根據(jù)需求,選擇不同的版本,我選擇的是rpm安裝包,如果報以下錯誤

    代碼如下:

    [root@localhost xtrabackup]# rpm -ivh percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm

    warning: percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY

    error: Failed dependencies:

    perl(Time::HiRes) is needed by percona-xtrabackup-2.2.4-5004.el6.x86_64

    解決辦法:

    代碼如下:

    [root@localhost xtrabackup]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL //安裝依賴包

    [root@localhost xtrabackup]# rpm -ivh percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm //重新安裝

    warning: percona-xtrabackup-2.2.4-5004.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY

    Preparing... ########################################### [100%]

    1:percona-xtrabackup ########################################### [100%]

    注意:

    xtrabackup 2.2.4不支持mysql 5.1.73,所以如果要用新的xtrabackup,就要用高版本的mysql數(shù)據(jù)庫,不然就會報以下錯誤:

    innobackupex: Error: Unsupported server version: '5.1.73'

    二、修改my.cnf

    查看一下mysqld下面有沒有datadir,如果沒有加上

    代碼如下:

    [mysqld]

    datadir=/var/lib/mysql

    不加的話,還原數(shù)據(jù)的時候,有可能會出現(xiàn)以下問題:

    代碼如下:

    xtrabackup: Error: Please set parameter 'datadir'

    innobackupex: fatal error: no 'mysqld' group in MySQL options

    innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options

    三、全部數(shù)據(jù)庫備份與還原

    1、全部數(shù)據(jù)庫備份

    代碼如下:

    # innobackupex --defaults-file=/etc/my.cnf --user=root /home/tank/backup/

    如果報以下錯誤:

    代碼如下:

    InnoDB: Error: log file ./ib_logfile0 is of different size 5242880 bytes

    InnoDB: than specified in the .cnf file 50331648 bytes!

    innobackupex: Error: The xtrabackup child process has died at /usr/bin/innobackupex line 2679.

    解決辦法:在my.cnf的mysqld中加入以下內(nèi)容:

    代碼如下:

    [mysqld]

    innodb_log_file_size = 5M

    2、單數(shù)據(jù)庫備份

    代碼如下:

    # innobackupex --defaults-file=/etc/my.cnf --user=root --database=backup_test /home/tank/backup/

    3、數(shù)據(jù)庫備份并壓縮

    代碼如下:

    # innobackupex --defaults-file=/etc/my.cnf --user=root --stream=tar /home/tank/backup | gzip > /home/tank/backup/`date +%F_%H-%M-%S`.tar.gz

    4、全數(shù)據(jù)還原

    代碼如下:

    # /etc/init.d/mysqld stop //停掉mysql

    # mv /var/lib/mysql /var/lib/mysql_bak //數(shù)據(jù)目錄備份

    # mkdir -p /var/lib/mysql //重建數(shù)據(jù)目錄

    //--apply-log選項的命令是準備在一個備份上啟動mysql服務

    # innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /home/tank/backup/2014-09-18_16-35-12

    //--copy-back 選項的命令從備份目錄拷貝數(shù)據(jù),索引,日志到my.cnf文件里規(guī)定的初始位置

    # innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /home/tank/backup/2014-09-18_16-35-12

    # chown -R mysql.mysql /var/lib/mysql //改變文件所屬

    # /etc/init.d/mysqld stop //啟動mysql

    四、增量備份與還原

    1、創(chuàng)建測試數(shù)據(jù)庫和表

    代碼如下:

    create database backup_test; //創(chuàng)建庫

    CREATE TABLE `backup` ( //創(chuàng)建表

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `name` varchar(20) NOT NULL DEFAULT '' ,

    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,

    `del` tinyint(1) NOT NULL DEFAULT '0',

    PRIMARY KEY (`id`)

    ) ENGINE=myisam DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    2、增量備份

    代碼如下:

    mysql> INSERT INTO backup (name) VALUES ('tank'),('tank1'); //插入數(shù)據(jù)

    # innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/tank/backup/2014-09-18_16-35-12 --incremental /home/tank/backup/

    3、在增量的基礎上在進行增量備份

    代碼如下:

    mysql> INSERT INTO backup (name) VALUES ('tank2'),('tank3'),('tank4'),('tank5'),('tank6'); //在插入數(shù)據(jù)

    //2014-09-18_18-05-20這個目錄,上次增量備份產(chǎn)生的目錄

    # innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/tank/backup/2014-09-18_18-05-20 --incremental /home/tank/backup/

    查看增量備份記錄文件:

    代碼如下:

    [root@localhost 2014-09-18_16-35-12]# cat xtrabackup_checkpoints //全備目錄下的文件

    backup_type = full-prepared

    from_lsn = 0 //全備起始為0

    to_lsn = 23853959

    last_lsn = 23853959

    compact = 0

    [root@localhost 2014-09-18_18-05-20]# cat xtrabackup_checkpoints //第一次增量備份目錄下的文件

    backup_type = incremental

    from_lsn = 23853959

    to_lsn = 23854112

    last_lsn = 23854112

    compact = 0

    [root@localhost 2014-09-18_18-11-43]# cat xtrabackup_checkpoints //第二次增量備份目錄下的文件

    backup_type = incremental

    from_lsn = 23854112

    to_lsn = 23854712

    last_lsn = 23854712

    compact = 0

    增量備份做完后,把backup_test這個數(shù)據(jù)庫刪除掉,drop database backup_test;這樣可以對比還原后。

    4、增量還原

    代碼如下:

    # innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /home/tank/backup/2014-09-18_16-35-12

    # innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /home/tank/backup/2014-09-18_16-35-12 --incremental-dir=/home/tank/backup/2014-09-18_18-05-20

    # innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /home/tank/backup/2014-09-18_16-35-12 --incremental-dir=/home/tank/backup/2014-09-18_18-11-43

    在這里有三個目錄:

    1)、/home/tank/backup/2014-09-18_16-35-12,全備份目錄

    2)、/home/tank/backup/2014-09-18_18-05-20,第一次增量備份產(chǎn)生的目錄

    3)、/home/tank/backup/2014-09-18_18-11-43,第二次增量備份產(chǎn)生的目錄

    到這里增量還原,還沒有結(jié)束,還有最重要一步,就是要進行一次全量還原。停止數(shù)據(jù)庫,刪除/var/lib/mysql,在還原。

    增量備份的原理就是,把增量目錄下的數(shù)據(jù),整合到全變量目錄下,然后在進行,全數(shù)據(jù)量的還原。

    總體來說,innobackupex速度快,支持innodb,myisam,用起來是還不是很方便,單庫還原,還是增量備份還原,都要進行全部數(shù)據(jù)庫還原,這個不合理。

    五、innobackup 常用參數(shù)說明

    --defaults-file

    同xtrabackup的--defaults-file參數(shù)

    --apply-log

    對xtrabackup的--prepare參數(shù)的封裝

    --copy-back

    做數(shù)據(jù)恢復時將備份數(shù)據(jù)文件拷貝到MySQL服務器的datadir ;

    --remote-host=HOSTNAME

    通過ssh將備份數(shù)據(jù)存儲到進程服務器上;

    --stream=[tar]

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

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

    --tmpdir=DIRECTORY

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

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

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

    --use-memory=#

    該參數(shù)在prepare的時候使用,控制prepare時innodb實例使用的內(nèi)存量

    --throttle=IOS

    同xtrabackup的--throttle參數(shù)

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

    --compress[=LEVEL]

    對備份數(shù)據(jù)迚行壓縮,僅支持ibbackup,xtrabackup還沒有實現(xiàn);

    --include=REGEXP

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

    --databases=LIST

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

    --uncompress

    解壓備份的數(shù)據(jù)文件,支持ibbackup,xtrabackup還沒有實現(xiàn)該功能;

    --slave-info,

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

    --socket=SOCKET

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

    更多信息請查看IT技術專欄

    更多信息請查看數(shù)據(jù)庫
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢?yōu)闇剩?/div>

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)