基於Innobackupex的完全恢複,Innobackupex恢複

來源:互聯網
上載者:User

基於Innobackupex的完全恢複,Innobackupex恢複
    對於MySQL的完全恢複,我們可以藉助於Innobackupex的多重備份加上binlog來將資料庫恢複到故障點。這裡的完全恢複是相對於時間點復原(也叫不完全恢複)。本文主要示範了基於Innobackupex如何做一個完全恢複,供大家參考。

    有關Innobackupex的備份恢複的知識點請參考以下連結:
        Innobackupex 全備資料庫
        使用mysqlbinlog提取二進位日誌
        基於Innobackupex的全備恢複
        基於Innobackupex的增備及恢複

1、完全恢複的概念

    完全恢複是指使用備份加上binlog日誌將資料庫恢複到最新的時間點。
    完全恢複的依賴條件為完整的Database Backup及binlog存在,只要2者完整存在,我們即可以將其完整的還原到最新狀態。
    完全恢複的概念不限於熱備與邏輯備份(mysqldump)方式,都可以實現完全恢複。

2、示範備份過程

a、建立示範環境robin@localhost[(none)]> show variables like 'version';  --當前MySQL版本+---------------+------------+| Variable_name | Value      |+---------------+------------+| version       | 5.6.12-log |+---------------+------------+robin@localhost[(none)]> use tempdb;   robin@localhost[tempdb]> create table tb(id smallint,val varchar(20));   robin@localhost[tempdb]> insert into tb  values(1,'fullbak');  --建立一個全備SHELL> innobackupex --user=robin -password=xxx --port=3606 --socket=/tmp/mysql3606.sock --defaults-file=/etc/my3606.cnf \   > /hotbak/full --no-timestamp   b、建立一個增備--在建立增備前插入一條記錄到tbrobin@localhost[tempdb]> insert into tb values(2,'Incbak');   SHELL> innobackupex --user=robin -password=xxx --port=3606 --socket=/tmp/mysql3606.sock --defaults-file=/etc/my3606.cnf \   > --incremental /hotbak/inc --incremental-basedir=/hotbak/full --no-timestamp 
3、示範恢複過程
--再次新增一條記錄,該記錄在儲存在binlog,而不會存在於任何備份,這條記錄用於驗證完全恢複robin@localhost[tempdb]> insert into tb values(3,'Inbinlog');Query OK, 1 row affected (0.01 sec)--當前的binlog位置robin@localhost[(none)]> show master status;+--------------------+----------+--------------+------------------+-------------------+| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+--------------------+----------+--------------+------------------+-------------------+| inst3606bin.000014 |     1200 |              |                  |                   |+--------------------+----------+--------------+------------------+-------------------+--使用binlog events命令來查看我們最後insert的一條記錄robin@localhost[(none)]> show binlog events in 'inst3606bin.000014' limit 7,10;+--------------------+------+------------+-----------+-------------+---------------------------------------------------+| Log_name           | Pos  | Event_type | Server_id | End_log_pos | Info                                              |+--------------------+------+------------+-----------+-------------+---------------------------------------------------+| inst3606bin.000014 |  668 | Query      |      3606 |         751 | BEGIN                                             || inst3606bin.000014 |  751 | Query      |      3606 |         862 | use `tempdb`; insert into tb values(2,'Incbak')   || inst3606bin.000014 |  862 | Xid        |      3606 |         893 | COMMIT /* xid=449096 */                           || inst3606bin.000014 |  893 | Query      |      3606 |         973 | FLUSH ENGINE LOGS                                 || inst3606bin.000014 |  973 | Query      |      3606 |        1056 | BEGIN                                             || inst3606bin.000014 | 1056 | Query      |      3606 |        1169 | use `tempdb`; insert into tb values(3,'Inbinlog') || inst3606bin.000014 | 1169 | Xid        |      3606 |        1200 | COMMIT /* xid=449997 */                           |+--------------------+------+------------+-----------+-------------+---------------------------------------------------+--查看binlog的位置robin@localhost[(none)]> show variables like 'log_bin_basename';+------------------+------------------------------------+| Variable_name    | Value                              |+------------------+------------------------------------+| log_bin_basename | /data/inst3606/log/bin/inst3606bin |+------------------+------------------------------------+a、先做基於全備的apply,注意,此時使用了--redo-only   SHELL> innobackupex --apply-log --redo-only --user=robin -password=xxx --port=3606 \   > --defaults-file=/etc/my3606.cnf /hotbak/full   b、基於增備的apply,  --此時沒有--redo-only,如果有多個增備,僅僅最後一個增備無需指定--redo-only   SHELL> innobackupex --apply-log --user=robin -password=xxx --port=3606 --defaults-file=/etc/my3606.cnf \   > /hotbak/full --incremental-dir=/hotbak/inc   c、進行copy back  SHELL> mysqldown -P3606     --copy back前關閉執行個體   SHELL> netstat -nltp|grep mysql|grep 3606  SHELL>  mv /data/inst3606/data3606 /data/inst3606/data3606bk  SHELL>  mkdir -p /data/inst3606/data3606   SHELL> innobackupex --user=robin -password=xxx --port=3606 --copy-back /hotbak/full --defaults-file=/etc/my3606.cnf   SHELL> chown -R mysql:mysql /data/inst3606/data3606     d、啟動恢複後的執行個體   SHELL> mysqld_safe --defaults-file=/etc/my3606.cnf &SHELL> sql -P3606robin@localhost[(none)]> use tempdb;--如下,我們可以看到記錄3, 'Inbinlog'記錄並沒有被恢複robin@localhost[tempdb]> select * from tb;+------+---------+| id   | val     |+------+---------+|    1 | fullbak |    --Author: Leshami|    2 | Incbak  |    --Blog  : http://blog.csdn.net/leshami+------+---------+2 rows in set (0.00 sec)e、使用binlog做完全恢複SHELL> cd /hotbak/inc/SHELL> more xtrabackup_binlog_info    --從innobackupex獲得binlog的位置inst3606bin.000014      893--使用mysqlbinlog 追加的最新SHELL> mysqlbinlog /data/inst3606/log/bin/inst3606bin.000014 --start-position=893 \> |mysql -urobin -pxxx -P3606 -S /tmp/mysql3606.sock--驗證,可以看到第3條記錄以及被恢複SHELL> mysql -urobin -pxxx -P3606 -S /tmp/mysql3606.sock -e "select * from tempdb.tb"Warning: Using a password on the command line interface can be insecure.+------+----------+| id   | val      |+------+----------+|    1 | fullbak  ||    2 | Incbak   ||    3 | Inbinlog |+------+----------+   
4、小結
a、對於完全恢複,我們需要使用備份加binlog兩者結合的方式來實現
b、在恢複期間,首先使用帶read-only的apply-log方式來prepare全備
c、接下來使用帶read-only的apply-log方式來prepare增備,僅最後一個增備可以不用read-only
d、停止原有執行個體,並copy-back後啟動恢複後的執行個體
e、從Innobakcupex備份資訊中擷取最後的binlog日誌及位置資訊

f、使用mysqlbinlog方式將日誌追加到最新時刻         

          

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.