MySQL運維之--xtrabackup工具的原理和使用方法


Xtrabackup工具的介紹

xtrabackup是percona公司開發的一款自由、免費、開源的一款備份工具,他的備份特點就是:支持熱備、備份速度快。

xtrabackup包含兩個重要的工具:innobackupex和xtrabackup,兩者的區別是:

  xtrabackup只能備份innodb數據表。

  innobackupex支持同時備份innodb和myisam引擎的表,但在備份myisam時需要加一個全局的讀鎖。

下面我們介紹一下innobackupex備份過程的原理:

原理如下:

  1. innobackupex 在啟動后,會先 fork 一個進程,啟動 xtrabackup進程,然后就等待 xtrabackup 備份完 ibd 數據文件;
  2. xtrabackup 在備份 InnoDB 相關數據時,是有2種線程的,1種是 redo 拷貝線程,負責拷貝 redo 文件,1種是 ibd 拷貝線程,負責拷貝 ibd 文件;redo 拷貝線程只有一個,在 ibd 拷貝線程之前啟動,在 ibd 線程結束后結束。xtrabackup 進程開始執行后,先啟動 redo 拷貝線程,從最新的 checkpoint 點開始順序拷貝 redo 日志;然后再啟動 ibd 數據拷貝線程,在 xtrabackup 拷貝 ibd 過程中,innobackupex 進程一直處於等待狀態(等待文件被創建)。
  3. xtrabackup 拷貝完成idb后,通知 innobackupex(通過創建文件),同時自己進入等待(redo 線程仍然繼續拷貝);
  4. innobackupex 收到 xtrabackup 通知后,執行FLUSH TABLES WITH READ LOCK (FTWRL),取得一致性位點,然后開始備份非 InnoDB 文件(包括 frm、MYD、MYI、CSV、opt、par等)。拷貝非 InnoDB 文件過程中,因為數據庫處於全局只讀狀態,如果在業務的主庫備份的話,要特別小心,非 InnoDB 表(主要是MyISAM)比較多的話整庫只讀時間就會比較長,這個影響一定要評估到。
  5. 當 innobackupex 拷貝完所有非 InnoDB 表文件后,通知 xtrabackup(通過刪文件) ,同時自己進入等待(等待另一個文件被創建);
  6. xtrabackup 收到 innobackupex 備份完非 InnoDB 通知后,就停止 redo 拷貝線程,然后通知 innobackupex redo log 拷貝完成(通過創建文件);
  7. innobackupex 收到 redo 備份完成通知后,就開始解鎖,執行 UNLOCK TABLES;
  8. 最后 innobackupex 和 xtrabackup 進程各自完成收尾工作,如資源的釋放、寫備份元數據信息等,innobackupex 等待 xtrabackup 子進程結束后退出。

上面的備份過程中:備份進程只在SQL命令時和數據庫有交互,基本不影響數據庫的運行。但是我們要明白,在備份非InnoDB時會有一段時間只讀(如果沒有myisam表,只讀時間在幾秒鍾)。在備份InnoDB數據文件時,對數據庫完全沒有影響,是真正的熱備。

那么xtrabackup備份InnoDB時是如何保證數據一致性的呢?

  InnoDB 和非 InnoDB 文件的備份都是通過拷貝文件來做的,但是實現的方式不同,前者是以page為粒度做的(xtrabackup),后者是 cp 或者 tar 命令(innobackupex),xtrabackup 在讀取每個page時會校驗 checksum 值,保證數據塊是一致的,而 innobackupex 在 cp MyISAM 文件時已經做了flush(FTWRL),磁盤上的文件也是完整的,所以最終備份集里的數據文件都是寫入完整的。

增量備份的原理:

innobackupex增量備份主要是針對InnoDB引擎而言,對於myisam和其他的引擎,它仍然是一個全拷貝的過程。

  InnoDB 每個 page 有個 LSN 號,LSN 是全局遞增的,page 被更改時會記錄當前的 LSN 號,page中的 LSN 越大,說明當前page越新(最近被更新)。每次備份會記錄當前備份到的LSN(xtrabackup_checkpoints 文件中),增量備份就是只拷貝LSN大於上次備份的page,比上次備份小的跳過,每個 ibd 文件最終備份出來的是增量 delta 文件。

  MyISAM 是沒有增量的機制的,每次增量備份都是全部拷貝的。

  增量備份過程和全量備份一樣,只是在 ibd 文件拷貝上有不同。

增量恢復的原理:

恢復的目的是把備份集中的數據恢復到一個一致性位點,所謂一致就是指原數據庫某一時間點各引擎數據的狀態,比如 MyISAM 中的數據對應的是 15:00 時間點的,InnoDB 中的數據對應的是 15:20 的,這種狀態的數據就是不一致的。PXB 備份集對應的一致點,就是備份時FTWRL的時間點,恢復出來的數據,就對應原數據庫FTWRL時的狀態。

  因為備份時 FTWRL 后,數據庫是處於只讀的,非 InnoDB 數據是在持有全局讀鎖情況下拷貝的,所以非 InnoDB 數據本身就對應 FTWRL 時間點;InnoDB 的 ibd 文件拷貝是在 FTWRL 前做的,拷貝出來的不同 ibd 文件最后更新時間點是不一樣的,這種狀態的 ibd 文件是不能直接用的,但是 redo log 是從備份開始一直持續拷貝的,最后的 redo 日志點是在持有 FTWRL 后取得的,所以最終通過 redo 應用后的 ibd 數據時間點也是和 FTWRL 一致的。

  所以恢復過程只涉及 InnoDB 文件的恢復,非 InnoDB 數據是不動的。備份恢復完成后,就可以把數據文件拷貝到對應的目錄,然后通過mysqld來啟動了。
上面介紹完了xtrabackup的原理之后,我們可以學習一下如何使用他們:
如何使用呢?
講全備的過程。
1、我們這里使用yum源來一鍵安裝。
shell> yum install xtrabackup -y

注意:這里需要給大家講一下:使用yum源安裝的xtrabackup是2.6版本的,這個版本可能比較舊,對於我的mysql5.7.24版本來說xtrabackup可能有點舊,所以無法使用,直接報版本過低的錯誤。后來我又在官網上下載最新的xtrabackup來使用。這里是先把舊的xtrabackup2.6版本給卸載了,然后下載2.7版本使用rpm -i方式安裝:https://www.percona.com/downloads/XtraBackup/  (需要解決依賴,建議是先使用yum安裝2.6版本,然后卸載2.6版本,再通過官網下載rpm2.6版本的包來安裝即可)

2、使用mysql
這里使用xtrabackup的時候需要你提供mysql的賬號密碼才行。一般練習是使用root用戶可以,但是生產環境下我們大多數使用一般用戶,因此這個用戶需要有這幾個權限:(同時/etc/my.cnf要有innodb_file_per_table等參數指示。)
mysql>CREATE USER 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,CREATE TABLESPACE,SUPER ON *.* TO 'backup'@'%';

3、接下來我們創建一個測試環境:(我這里使用root用戶演示)

  1. 創建一個數據庫“chen”,一個表“chaofeng”,然后插入一點數據
    MySQL [chen]> show tables;
    +----------------+
    | Tables_in_chen |
    +----------------+
    | chaofeng       |
    +----------------+
    1 row in set (0.00 sec)
    
    MySQL [chen]> select * from chaofeng;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | chen |
    |    2 | chao |
    |    3 | feng |
    +------+------+
    3 rows in set (0.00 sec)
  2. 然后創建一個目錄/data/mysql_bak,這個目錄的作用是把xtrabackup的備份文件放在此處。因此這個目錄要有mysql用戶可以寫入文件的權限。我這里把這個目錄修改用戶和組為mysql
     
               
    [root@:vg_adn_tidbCkhsTest /data]#mkdir /data/mysql_bak
    [root@:vg_adn_tidbCkhsTest /data]#chown mysql:mysql mysql_bak/
  3. 此時MySQL為運行狀態。接着我們開始進行備份
    [root@:vg_adn_tidbCkhsTest /data]#innobackupex --user=root --password=1234567 -P 3306 -S /tmp/mysql.sock /data/mysql_bak
    181230 13:41:57 innobackupex: Starting the backup operation
    
    IMPORTANT: Please check that the backup run completes successfully.
               At the end of a successful backup run innobackupex
               prints "completed OK!".
    
    Unrecognized character \x01; marked by <-- HERE after <-- HERE near column 1 at - line 1374.
    181230 13:41:57 Connecting to MySQL server host: localhost, user: root, password: set, port: 3306, socket: /tmp/mysql.sock
    Using server version 5.7.24

    181230 13:41:59 [01] Copying ./performance_schema/session_variables.frm to /data/mysql_bak/2018-12-30_13-41-57/performance_schema/session_variables.frm
    181230 13:41:59 [01] ...done
    181230 13:41:59 [01] Copying ./chen/db.opt to /data/mysql_bak/2018-12-30_13-41-57/chen/db.opt
    181230 13:41:59 [01] ...done
    181230 13:41:59 [01] Copying ./chen/chaofeng.frm to /data/mysql_bak/2018-12-30_13-41-57/chen/chaofeng.frm
    181230 13:41:59 [01] ...done
    181230 13:41:59 Finished backing up non-InnoDB tables and files
    181230 13:41:59 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
    xtrabackup: The latest check point (for incremental): '2602112'
    xtrabackup: Stopping log copying thread.
    .181230 13:41:59 >> log scanned up to (2602121)

    181230 13:41:59 [00] ...done
    xtrabackup: Transaction log of lsn (2602112) to (2602121) was copied.
    181230 13:41:59 completed OK!

    當我們看到最后這一行內容的時候,表示備份成功。備份數據會在備份目錄下創建一個以當前日期為名字的目錄。如果不想要這樣的以日期命名的目錄。可以加上--no-timestamp參數。

  4. 我們來這個備份的目錄看一下。
    [root@:vg_adn_tidbCkhsTest /data/mysql_bak]#ls
    2018-12-30_13-41-57/
    [root@:vg_adn_tidbCkhsTest /data/mysql_bak]#ls 2018-12-30_13-41-57/
    backup-my.cnf  chen  ib_buffer_pool  ibdata1  mysql  performance_schema  sys  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile
    我們對這幾個配置文件解析一下:
    backup-my.cnf:備份命令用到的配置選項信息
    ibdata1:備份的表空間文件
    xtrabackup_info:備份用到的一些配置信息。
    xtrabackup_checkpoints:備份類型(如完全或增量)、備份狀態、LSN等
    xtrabackup_logfile:備份的重做日志文件

  5、准備(prepare)一個完全備份

    一般情況下,在備份完成后,備份的數據尚且還不能用於恢復操作,因為備份數據的過程中可能包含還沒有提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時的數據文件仍處於不一致狀態。“准備”的主要作用就是通過回滾未提交的事務及同步已經提交的事務至數據文件也是的數據文件處於一致性狀態。

    參數是--apply-log

  • [root@:vg_adn_tidbCkhsTest /data]#innobackupex --apply-log --use-memory=10G /data/mysql_bak/2018-12-30_13-41-57/
    181230 14:07:30 innobackupex: Starting the apply-log operation
    
    IMPORTANT: Please check that the apply-log run completes successfully.
               At the end of a successful apply-log run innobackupex
               prints "completed OK!".
    innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7)
    xtrabackup: cd to /data/mysql_bak/2018-12-30_13-41-57/
      InnoDB: FTS optimize thread exiting.
      InnoDB: Starting shutdown...
      InnoDB: Shutdown completed; log sequence number 2602536
      181230 14:07:38 completed OK!

  當看到最后一行的時候,表示備份成功了。

  6、再來看一下此目錄下的文件

  • [root@:vg_adn_tidbCkhsTest:34.202.241.16:172.31.26.133 /data/mysql_bak/2018-12-30_13-41-57]#ls
    backup-my.cnf  ib_buffer_pool  ib_logfile0  ib_logfile2  mysql               sys                     xtrabackup_info
    chen           ibdata1         ib_logfile1  ibtmp1       performance_schema  xtrabackup_checkpoints  xtrabackup_logfile

    此時這個目錄下面多了不少文件,並且體積也增大了。

  7、接下來我們就模擬一個數據庫損壞來還原數據庫。

   恢復備份到MySQL的數據文件目錄,這一過程要關閉MySQL數據庫,重命名原數據庫文件目錄,再創建一個新的數據文件目錄,將備份數據復制到新的數據文件目錄下,賦予權限,再啟動MySQL數據庫。

  • 接下來我們演示一下步驟
    [root@:vg_adn_tidbCkhsTest /data]#ls
    data_mysql  data_mysql.csv  data_tidb  lost+found  mysql_bak
    [root@:vg_adn_tidbCkhsTest /data]#mv data_mysql data_mysql_bak                                                #將原來的MySQL數據目錄移動並重命名。
    [root@:vg_adn_tidbCkhsTest /data]#mkdir data_mysql                                      #重新創建MySQL的數據目錄
    [root@:vg_adn_tidbCkhsTest /data]#innobackupex --copy-back --rsync /data/mysql_bak/2018-12-30_13-41-57/ #開始備份 181230 14:55:35 innobackupex: Starting the copy-back operation IMPORTANT: Please check that the copy-back run completes successfully. At the end of a successful copy-back run innobackupex prints "completed OK!". innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7) 181230 14:55:35 [01] Copying ib_logfile0 to /data/data_mysql/ib_logfile0 181230 14:55:35 [01] ...done 181230 14:55:35 [01] Copying ib_logfile1 to /data/data_mysql/ib_logfile1 181230 14:55:36 [01] ...done 181230 14:55:37 [01] Copying ib_logfile2 to /data/data_mysql/ib_logfile2 181230 14:55:38 [01] ...done 181230 14:55:38 [01] Copying ibdata1 to /data/data_mysql/ibdata1 181230 14:55:38 [01] ...done 181230 14:55:38 [01] Copying ./xtrabackup_info to /data/data_mysql/xtrabackup_info

      181230 14:55:39 [01] Copying ./chen/chaofeng.frm to /data/data_mysql/chen/chaofeng.frm
      181230 14:55:39 [01] ...done
      181230 14:55:39 completed OK!                                                                        #表示備份成功

    接下來我們授權data目錄並重啟MySQL

    [root@:vg_adn_tidbCkhsTest /data]#chown -R mysql:mysql ./data_mysql [root@:vg_adn_tidbCkhsTest /data]#service mysql start
    Starting MySQL. SUCCESS! 
    [root@:vg_adn_tidbCkhsTest /data]#mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 3 MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | chen | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) MySQL [(none)]> use chen Database changed MySQL [chen]> show tables; +----------------+ | Tables_in_chen | +----------------+ | chaofeng | +----------------+ 1 row in set (0.00 sec) MySQL [chen]> select * from chaofeng; +------+------+ | id | name | +------+------+ | 1 | chen | | 2 | chao | | 3 | feng | +------+------+ 3 rows in set (0.01 sec)

    授權這一步很重要,否則我們沒有權限從而無法啟動MySQL服務器。

   可以看出來我們已經恢復數據成功了。

講只備份一個數據庫的過程

  有時候我們只備份一個數據庫,如果出現問題了,那我們也僅僅恢復這一個數據庫  

  1、首先是我們備份一個數據庫:

[root@:vg_adn_tidbCkhsTest /data]#mkdir haha
[root@:vg_adn_tidbCkhsTest /data]#innobackupex --user=root --password=1234567 -P 3306 --databases=chen /data/haha/
181230 15:11:07 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

Unrecognized character \x01; marked by <-- HERE after <-- HERE near column 1 at - line 1374.
181230 15:11:07 Connecting to MySQL server host: localhost, user: root, password: set, port: 3306, socket: not set
xtrabackup: Transaction log of lsn (2602555) to (2602564) was copied.
181230 15:11:09 completed OK!
[root@:vg_adn_tidbCkhsTest /data]#ls
data_mysql  data_mysql_bak  data_mysql.csv  data_tidb  haha  lost+found  mysql_bak
[root@:vg_adn_tidbCkhsTest /data]#du -sh haha
13M    haha
[root@:vg_adn_tidbCkhsTest /data]#innobackupex --apply-log --use-memory=10G /data/haha
181230 15:13:00 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.
           At the end of a successful apply-log run innobackupex
           prints "completed OK!".
InnoDB: Shutdown completed; log sequence number 2603048
181230 15:13:24 completed OK!
[root@:vg_adn_tidbCkhsTest /data]#du -sh haha
417M    haha
[root@:vg_adn_tidbCkhsTest /data]#cd haha
[root@:vg_adn_tidbCkhsTest /data/haha]#ls
2018-12-30_15-11-07
[root@:vg_adn_tidbCkhsTest /data/haha]#cd 2018-12-30_15-11-07/
[root@:vg_adn_tidbCkhsTest /data/haha/2018-12-30_15-11-07]#ls
backup-my.cnf  ib_buffer_pool  ib_logfile0  ib_logfile2  xtrabackup_checkpoints  xtrabackup_logfile
chen           ibdata1         ib_logfile1  ibtmp1       xtrabackup_info

  2、接下來我們登陸MySQL把這個chen數據庫刪除了,這里不再演示刪除操作。

  3、然后把mysql服務器停止了。開始進行恢復操作,這里需要注意的是恢復的目錄是MySQL的數據目錄,但是此時數據目錄下有文件,不是空目錄,因此不能進行恢復,所以我們選擇一個新建的空目錄進行恢復,恢復完成后,把要恢復的數據庫移動到MySQL的data目錄下,同時也要把恢復目錄下的ibdata1 ,ib_logfile*的這幾個文件替換掉data目錄下的這幾個文件,否則mysql無法識別,即使啟動之后我們看到了已經恢復了的數據庫和表,但是表里面仍然沒有數據。原因就在這幾個文件的重要性。

  4、這樣子重啟機器之后我們就看到了已經恢復的單個數據庫了,但是這樣的方法是有一定的問題的:比如數據庫很多的情況下我們怎么樣才能只備份innodb引擎的數據庫呢?(因為全備意味着也要備份myisam引擎,此時會有幾秒mysql處於lock狀態,影響讀寫)

講增量備份

  在MySQL進行增量備份時,首先要進行一次全量備份,第一次增量備份是基於全備的,之后的增量備份時基於上一次的增量備份。

  1、創建基礎備份base。(注意,由於我進行備份的時候沒有加上--no-timestamp參數,因此我在恢復備份數據的時候目錄下要加上xtrabackup自動添加的目錄才行,詳細看下面)

[root@:vg_adn_tidbCkhsTest /data]#mkdir base
[root@:vg_adn_tidbCkhsTest /data]#mysql -u root -p1234567
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> use chen
Database changed
MySQL [chen]> select * from chaofeng;
+------+------+
| id   | name |
+------+------+
|    1 | chen |
|    2 | chao |
|    3 | feng |
+------+------+
3 rows in set (0.00 sec)

MySQL [chen]> exit
Bye
[root@:vg_adn_tidbCkhsTest /data]#innobackupex --defaults-file=/etc/my.cnf --user=root --password=1234567 -P 3306 /data/base/
181230 16:21:43 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.
xtrabackup: Transaction log of lsn (2613322) to (2613331) was copied.
181230 16:21:46 completed OK!

  2、在數據庫chen下再增加一些數據

MySQL [chen]> insert into chaofeng values (4,'xiaoming'),(5,'xiaohong');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MySQL [chen]> select * from chaofeng;
+------+----------+
| id   | name     |
+------+----------+
|    1 | chen     |
|    2 | chao     |
|    3 | feng     |
|    4 | xiaoming |
|    5 | xiaohong |
+------+----------+
5 rows in set (0.00 sec)

  3、創建增量備份incre_one

[root@:vg_adn_tidbCkhsTest /data]#mkdir incre_one
[root@:vg_adn_tidbCkhsTest /data]#innobackupex --defaults-file=/etc/my.cnf --user=root --password=1234567  -P 3306 --incremental /data/incre_one --incremental-basedir=/data/base/2018-12-30_16-21-43/
181230 16:26:54 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

Unrecognized character \x01; marked by <-- HERE after <-- HERE near column 1 at - line 1374.
181230 16:26:54 Connecting to MySQL server host: localhost, user: root, password: set, port: 3306, socket: not set

  4、在test庫下再次添加一些數據

MySQL [chen]> insert into chaofeng values(6,'xiaozhag'),(7,'xiaowang'),(8,'laoli');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

MySQL [chen]> select * from chaofeng;
+------+----------+
| id   | name     |
+------+----------+
|    1 | chen     |
|    2 | chao     |
|    3 | feng     |
|    4 | xiaoming |
|    5 | xiaohong |
|    6 | xiaozhag |
|    7 | xiaowang |
|    8 | laoli    |
+------+----------+
8 rows in set (0.00 sec)

  5、繼續創建增量備份incre_two

[root@:vg_adn_tidbCkhsTest /data/incre_one]#mkdir incre_two
[root@:vg_adn_tidbCkhsTest /data/incre_one]#innobackupex --defaults-file=/etc/my.cnf --user=root --password=1234567 -P 3306 --incremental /data/incre_two --incremental-basedir=/data/incre_one/2018-12-30_16-48-27/ 
181230 16:52:01 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.

  6、我們已經創建好增量備份了,然后我們開始進行恢復

  主要有三個步驟:

    1、恢復基礎備份(全備)

    2、恢復增量備份到基礎備份(開始恢復的增量備份要添加--redo-only參數,到最后一次增量備份去掉--redo-only參數)

    3、對整體的基礎備份進行恢復,回滾哪些未提交的數據。

  7、恢復基礎備份(一定要加上--redo-only參數,表示只應用xtrabackup日志中已經提交的事務數據,不回滾還未提交的數據)

[root@:vg_adn_tidbCkhsTest /data/base]#innobackupex  --apply-log --redo-only --use-memory=10G /data/base/2018-12-30_16-44-07/
181230 17:03:45 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.

  8、將增量備份incre_one應用到基礎備份base

[root@:vg_adn_tidbCkhsTest /data/base]#innobackupex  --apply-log --redo-only --use-memory=10G /data/base/2018-12-30_16-44-07/ --incremental-dir=/data/incre_one/2018-12-30_16-48-27/
181230 17:06:02 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.

  9、將增量備份incre_two應用到基礎備份base里面(注意這是最后一個增量備份,因此需要去掉--redo-only參數)

[root@:vg_adn_tidbCkhsTest /data/base]#innobackupex  --apply-log --use-memory=10G /data/base/2018-12-30_16-44-07/ --incremental-dir=/data/incre_two/2018-12-30_16-52-01/

  10、把所有合在一起的基礎備份整體進行一次apply操作,回滾未提交的數據。

[root@:vg_adn_tidbCkhsTest /data/base]#innobackupex  --apply-log --use-memory=10G /data/base/2018-12-30_16-44-07/
181230 17:11:10 innobackupex: Starting the apply-log operation

  11、開始關閉MySQL服務器。然后把恢復完的數據移動到MySQL的data數據目錄下,授權mysql用戶和組,然后啟動。

[root@:vg_adn_tidbCkhsTest /data/base]#service mysql stop
Shutting down MySQL.. SUCCESS! 
[root@:vg_adn_tidbCkhsTest /data/base]#cd ..
[root@:vg_adn_tidbCkhsTest /data]#ls
base  data_mysql  data_mysql_bak  data_mysql.csv  data_tidb  incre_one  incre_two  lost+found  mysql_bak
[root@:vg_adn_tidbCkhsTest: /data]#mv data_mysql data_mysql_bak2 [root@:vg_adn_tidbCkhsTest /data]#mkdir data_mysql [root@:vg_adn_tidbCkhsTest /data]#innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/base/2018-12-30_16-44-07/
181230 17:15:06 innobackupex: Starting the copy-back operation

IMPORTANT: Please check that the copy-back run completes successfully.
181230 17:15:10 [01]        ...done
181230 17:15:10 completed OK!
[root@:vg_adn_tidbCkhsTest /data]#du -sh base
430M    base
[root@:vg_adn_tidbCkhsTest /data]#chown -R mysql:mysql ./data_mysql [root@:vg_adn_tidbCkhsTest /data]#service mysql start Starting MySQL. SUCCESS! [root@:vg_adn_tidbCkhsTest/data]#mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | chen | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) MySQL [chen]> select * from chen.chaofeng; +------+-----------+ | id | name | +------+-----------+ | 1 | chen | | 2 | chao | | 3 | feng | | 4 | xiaoming | | 5 | xiaohong | | 6 | xiaozhang | | 7 | xiaowang | | 8 | laoli | +------+-----------+ 8 rows in set (0.01 sec)

至此,我們的增量備份就恢復成功了,我們已經看到數據已經完好的顯示出來了。

關於原理大家也可以參考這個連接:https://www.cnblogs.com/yuyue2014/p/3705448.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM