1. 程式人生 > >percona-XtraBackup備份恢復

percona-XtraBackup備份恢復

3 XtraBackup使用手冊

3.1 使用innobackupex指令碼

innobackupex是perl指令碼對xtrabackup的封裝,和功能擴充套件。

3.1.1 備份預備工作

許可權和連線

xtrabackup需要連線到資料庫和datadir操作許可權。

xtrabackup或者innobackupex在使用過程中設計到2類使用者許可權:

1.系統使用者,用來呼叫innobackupex或者xtrabackup

2.資料庫使用者,資料庫內使用的使用者

連線到服務:innobackupex或者xtrabackup通過—user和—password連線到資料庫服務

$ innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/

$ innobackupex --user=LUKE  --password=US3TH3F0RC3 --stream=tar ./ | bzip2 -

$ xtrabackup --user=DVADER --password=14MY0URF4TH3R --backup --target-dir=/data/bkps/

其他連線選項

Option

Description

–port

The port to use when connecting to the database server with TCP/IP.

–socket

The socket to use when connecting to the local database.

–host

The host to use when connecting to the database server with TCP/IP.

需要的許可權:連線到服務是為了執行備份,需要在datadir上有read,write和execute許可權。在資料庫中需要以下許可權:

Ÿ   RELOAD和LOCK TABLES許可權為了執行FLUSH TABLES WITH READ LOCK   。

Ÿ   REPLICATION CLIENT為了獲取binary log 位置

Ÿ   CREATE TABLESPACE許可權為了匯入表,使用者表級別的恢復

Ÿ   SUPER許可權在slave環境下備份用來啟動和關閉slave執行緒

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

3.1.2 全備和全備還原

3.1.2.1 使用innobackupex建立全備

建立全備

$ innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/

會輸出以下資訊

innobackupex: Backup created in directory '/path/to/BACKUP-DIR/2013-03-25_00-00-09'
innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 1946
111225 00:00:53  innobackupex: completed OK!

從資訊中會發現備份被建立在/path/to/BACKUP-DIR/2013-03-25_00-00-09

內部機制:在備份的時候innobackupex會呼叫xtrabackup來備份innodb表,並複製所有的表定義,其他引擎的表(MyISAM,MERGE,CSV,ARCHIVE)。

其他選項:

--no-timestamp,指定了這個選項備份會直接備份在BACKUP-DIR,不再建立時間戳資料夾。

--default-file,指定配置檔案,用來配置innobackupex的選線。

3.1.2.2 使用innobackupex預備全備

建立完備份之後資料被沒有馬上可以被還原,需要回滾未提交事務,前滾提交事務,讓資料庫檔案保持一致性。

innobackupex使用—apply-log來做預備備份

$ innobackupex --apply-log /path/to/BACKUP-DIR

成功則會輸出:

111225  1:01:57  InnoDB: Shutdown completed; log sequence number 1609228

111225 01:01:57  innobackupex: completed OK!

成功後,備份可以被用來還原資料庫了。

內部機制:讀取備份資料夾中的配置檔案,然後innobackupex重做已提交事務,回滾未提交事務,之後資料就被寫到了備份的資料檔案(innodb檔案)中,並重建日誌檔案。這一步隱式呼叫了2次xtrabackup –prepare。跟多關於xtrabackup可以看之後的章節。

其他選項:

--user-memory:指定預備階段可使用的記憶體,記憶體多則速度快,預設為10MB

$ innobackupex --apply-log --use-memory=4G /path/to/BACKUP-DIR

3.1.2.3 使用innobackupex還原備份
service mysql stop 備份資料檔案
mysql> select @@datadir;
+--------------------------+
| @@datadir                |
+--------------------------+
| /data/server/mysql/data/ |
+--------------------------+
1 row in set (0.00 sec)

cd /data/server/mysql
 mv data data_bak
重建資料目錄
mkdir data
恢復:
innobackupex --copy-back /backup/mysql/2016-03-01_01-48-01

chown -R mysql:mysql data
service mysql start

3.1.3 增量備份和還原

增量備份呢是為了減少空間使用和備份的時間。

增量備份的實現,依賴於innodb頁上面的LSN(log sequence number),每次對資料庫的修改都會導致LSN自增。

增量備份會複製指定LSN之後的所有資料頁。

首先,使用percona-xtrabackup工具對資料庫進行全備,然後再每次資料庫的資料更新後對資料進行增量備份,每次增量備份均在上一次備份的基礎上。恢復時依次把每次增量備份的資料恢復到全備中,最後使用合併的資料進行資料恢復。

3.1.3.1 建立增量備份

建立全備

在建立增量備份之前需要一個全備,不然增量備份是沒有意義的。

$ innobackupex /data/backups

這樣就會在/data/backups下建立一個時間戳資料夾,如/data/backups/2013-03-31_23-01-18,然後資料夾內是備份檔案。

檢查備份資料夾下的xtrabackup-checkpoints,會有一下資訊:

backup_type = full-backuped

from_lsn =0

to_lsn =1291135

建立第一個增量備份

然後使用—incremental建立增量備份

$ innobackupex --incremental /data/backups --incremental-basedir=BASEDIR

BASEDIR指向之前的全備, /data/backups/2013-03-31_23-01-18,成功後備份會生成在/data/backups下的時間戳目錄中,如:/data/backups/2013-04-01_23-01-18 ,把這個目錄叫為記為 INCREMENTAL-DIR-1方面之後使用。

然後檢視xtrabackup-checkpoints:

backup_type = incremental

from_lsn =1291135

to_lsn =1352113

可以發現和全備不同的是,backup_type為incremental,from_lsn不為0。

然後再建立一個增量備份

在INCREMENTAL-DIR-1的基礎上再建立一個增量備份,記為INCREMENTAL-DIR-2。

$ innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-1

增量備份替代方法

可以使用指定—incremental-lsn來代替—incremental-basedir的方法建立增量備份。

innobackupex --incremental /data/backups --incremental-lsn=1291135

innobackupex --incremental /data/backups --incremental-lsn=1358967

注意:xtrabackup只會影響xtradb或者innodb的表,其他引擎的表在增量備份的時候只會複製整個檔案,不會差異。

---下面是具體的增量備份恢復案例

第一步,全備

[[email protected] databackup]# innobackupex --user=root --password=123456 /databackup/

第二步,檢視資料

mysql> use larrydb;
Database changed
mysql> select * from class;
+------+-------+
| cid  | cname |
+------+-------+
|    1 | linux |
|    2 | dab   |
|    3 | Devel |
+------+-------+
3 rows in set (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
+------+----------+------+
1 row in set (0.00 sec)

第三步,更新資料

mysql> insert into stu values(2,'larry02',1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
+------+----------+------+
2 rows in set (0.00 sec)

第四步,增量備份,進行了全備和第一次增量備份,所以有兩個備份資料夾。我們每次增量備份都是針對上一次備份。

#--incremental:增量備份的資料夾
#--incremental-dir:針對哪個做增量備份
[[email protected] databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-12-50/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.
……
innobackupex: Backup created in directory '/databackup/2013-09-10_22-15-45'
innobackupex: MySQL binlog position: filename 'mysql-bin.000004', position 353
130910 22:16:04  innobackupex: completed OK!

[[email protected] databackup]# ll
total 8
drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45

第五步,再次插入資料

mysql> insert into stu values(3,'larry03',1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
|    3 | larry03  |    1 |
+------+----------+------+
3 rows in set (0.00 sec)

第六步,再次增量備份

[[email protected] databackup]# ll
total 8
drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45
[[email protected] databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-15-45/

第七步,再次插入資料

mysql> insert into stu values(4,'larry04',1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
|    3 | larry03  |    1 |
|    4 | larry04  |    1 |
+------+----------+------+
4 rows in set (0.00 sec)

第八步,再次增量備份。一次全備,三次增量備份,所以有四個備份資料夾

[[email protected] databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-19-21/


[[email protected] databackup]# ll
total 16
drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45
drwxr-xr-x. 9 root root 4096 Sep 10 22:19 2013-09-10_22-19-21
drwxr-xr-x. 9 root root 4096 Sep 10 22:22 2013-09-10_22-21-42

第九步,模擬資料丟失

mysql> drop database larrydb;
Query OK, 2 rows affected (0.02 sec)

第十步,對全部的資料進行檢查。可以看到增量備份和全備的檔案佔用磁碟大小有很大的差別,顯然全備佔用磁碟空間多,增量備份佔用磁碟空間少

[[email protected] databackup]# innobackupex --apply-log --redo-only /databackup/2013-09-10_22-12-50/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.
……
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
130910 22:23:35  InnoDB: Starting shutdown...
130910 22:23:36  InnoDB: Shutdown completed; log sequence number 2098700
130910 22:23:36  innobackupex: completed OK!

[[email protected] databackup]# du -sh ./*
22M ./2013-09-10_22-12-50
1.5M  ./2013-09-10_22-15-45
1.5M  ./2013-09-10_22-19-21
1.5M  ./2013-09-10_22-21-42

第十一步,對第一次做的增量備份資料進行合併到全備份中去

[[email protected] databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-15-45/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.
……
innobackupex: Copying '/databackup/2013-09-10_22-15-45/hello/db.opt' to '/databackup/2013-09-10_22-12-50/hello/db.opt'
130910 22:32:26  innobackupex: completed OK!

第十二步,對第二次做的增量備份資料進行合併到全備份中去

[[email protected] databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-19-21/

第十三步,對第三次做的增量備份資料進行合併到全備份中去

[[email protected] databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-21-42/

第十四步,恢復時需要停掉MySQL,所以我們停掉MySQL

[[email protected] databackup]# /etc/init.d/mysqld stop
 ERROR! MySQL server PID file could not be found!
[[email protected] databackup]# pkill -9 mysql

第十五步,恢復資料。注意這裡指定的資料夾是2013-09-10_22-12-50

[[email protected] databackup]# innobackupex --copy-back /databackup/2013-09-10_22-12-50/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

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

Original data directory is not empty! at /usr/bin/innobackupex line 571.

#報以上錯需要刪除資料目錄下的東西
[[email protected] data]# pwd
/usr/local/mysql/data
[[email protected] data]# ls
game     ib_logfile0  mysql             mysql-bin.000003  performance_schema   test
hello    ib_logfile1  mysql-bin.000001  mysql-bin.000004  serv01.host.com.err  xtrabackup_binlog_pos_innodb
ibdata1  mnt          mysql-bin.000002  mysql-bin.index   serv01.host.com.pid

[[email protected] data]# rm -rf  *

#再次恢復資料,並更改資料庫資料目錄的擁有者和所屬組
[[email protected] databackup]# innobackupex --copy-back /databackup/2013-09-10_22-12-50/

[[email protected] data]# ll
total 18464
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 game
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 hello
-rw-r-----. 1 root root 18874368 Sep 10 22:33 ibdata1
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 larrydb
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 mnt
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 mysql
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 performance_schema
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 test
-rw-r--r--. 1 root root       24 Sep 10 22:37 xtrabackup_binlog_pos_innodb
  
[[email protected] data]# chown mysql.mysql /usr/local/mysql/data/ -R

第十六步,啟動服務

[[email protected] data]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS! 

第十七步,登入資料庫,然後檢視資料

[[email protected] data]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| game               |
| hello              |
| larrydb            |
| mnt                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)

mysql> select * from larrydb.class;
+------+-------+
| cid  | cname |
+------+-------+
|    1 | linux |
|    2 | dab   |
|    3 | Devel |
+------+-------+
3 rows in set (0.00 sec)

mysql> select * from larrydb.stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
|    3 | larry03  |    1 |
|    4 | larry04  |    1 |
+------+----------+------+
4 rows in set (0.00 sec)


相關推薦

MySQL Percona XtraBackup 備份恢復之一 ---工作原理

一、前言 Percona XtraBackup(簡稱PXB)是 Percona 公司開發的一個用於 MySQL 資料庫物理熱備的備份工具,支援 MySQl(Oracle)、Percona Server

percona-XtraBackup備份恢復

3 XtraBackup使用手冊 3.1 使用innobackupex指令碼 innobackupex是perl指令碼對xtrabackup的封裝,和功能擴充套件。 3.1.1 備份預備工作 許可權和連線 xtrabackup需要連線到資料庫和datadir操作許可權。

Xtrabackup備份恢復

mysql備份 mysql恢復 mysql增量備份 mysql Xtrabackup 完全備份+兩次增量備份 --> 新主機恢復 環境:  CentOS7.4 x 2  MariaDB-5.5.5  zabbix數據  EPEL源  Xtrabackup工具包 一、兩臺主機分別安裝

XtraBackup備份恢復模擬實踐

x86 alter 故障描述 cno href color 連接 values 備份 XtraBackup是Percona公司開發的一款很好用的數據備份工具,支持對InnoDB引擎數據的熱備份,對MyISAM引擎的數據做備份時需要鎖表,詳細信息參見官網或其他資源。【Xtra

Percona Xtrabackup備份mysql全庫及指定數據庫(完整備份與增量備份)

direct 包括 ria update 格式 支持 本地 chown 一次 Xtrabackup簡介 Percona XtraBackup是開源免費的MySQL數據庫熱備份軟件,它能對InnoDB和XtraDB存儲引擎的數據庫非阻塞地備份(對於MyISAM的備份同樣需要加

xtrabackup備份恢復MySQL數據庫

服務 備份類型 file 提交 啟動數據庫 lis info done linux 1. 全量備份恢復: 查看原表內容: MariaDB [(none)]> select * from testdb.students; +----+------------+---

Percona XtraBackup 資料恢復工具安裝 ubuntu 16.04

來源: https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/apt_repo.html   Installing Percona XtraBackup on Debi

Percona XtraBackup 備份原理

本文來自:http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(簡稱PXB)是 Percona 公司開發的一個用於 MySQL 資料庫物理熱備的備份工具,支援 MySQL(Oracle)、Percona Serve

MySQL-物理備份-Percona XtraBackup 備份原理

usr ├── bin │ ├── innobackupex │ ├── xbcrypt │ ├── xbstream │ └── xtrabackup 其中最主要的是 innobackupex 和 xtrabackup,前者是一個 perl 指令碼,後者是 C/C++ 編譯的二進位制。

mysql的xtrabackup備份恢復基本操作

演示環境:作業系統:Linux-x86-64資料庫版本:5.7.19本次演示包括:xtrabackup軟體的安裝, 全量備份,增量備份,恢復 操作附:官方軟體及文件下載地址:https://www.percona.com/software/mysql-database/per

如何用Percona XtraBackup進行MySQL從庫的單表備份恢復【轉】

empty lec del bsp 重建表 nbsp 創建 cfg serve 前提 應該確定采用的是單表一個表空間,否則不支持單表的備份與恢復。 在配置文件裏邊的mysqld段加上 innodb_file_per_table = 1 環境說明: 主庫

MySQL備份恢復percona-xtrabackup軟體的使用

一 使用percona-xtrabackup的原因        在前面,我們講到MySQL冷備、熱備、mysqldump、熱拷貝、保證資料的一致性。因為mysql冷備、mysqldump、mysql熱拷貝均不能實現增量備份,在實際環境中增量備份是使用較多的,percon

Percona XtraBackup的部分備份恢復/單庫備份/單表備份/指定庫備份/指定表備份

原官方文件沒有如何恢復的方法,恢復部分是我自己加的。 -----------------------------------------------------------這是一條分割線-------------------------------------------

mysql-學習-13-20170619-MySQL備份恢復-xtrabackup-2

soc tar pex cfa nod 遠程 表空間 tid doc mysql-學習-13-20170619-MySQL備份恢復-xtrabackup-2 【管理員】吳炳錫(82565387) 20:34:15基於xtrabackup的增備,只需要了解如果需要增備建

使用percona-xtrabackup工具對mysql數據庫的備份方案

因此 name 遠程 tables pex 兩臺 days 裝包 support 使用percona-xtrabackup工具對mysql數據庫的備份方案 需要備份mysql的主機 172.16.155.23存放備份mysql的主機 172.16.155.22 目的:將

xtrabackup全備操作和誤刪備份恢復操作

href strong -h 正常 backup 如果 x86 dir 一致性 1.安裝percona源rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_6

mysql系列之6--------使用第三方工具-percona備份mysql和恢復

文件目錄 restart form rpm 導入 完全備份 mys 只需要 schema 使用第三方工具來備份mysql-----percona一、前期準備工作: 1、安裝依賴包:yum -y install perl-Digest-MD5 perl-DBD-

MYSQL 5.6備份實錄-- Percona XtraBackup

-name 技術 分享圖片 .com img zxvf crontab ces pex [root@king01 ~]# cd /usr/local/src[root@king01 src]# tar zxvf percona-xtrabackup-2.4.4-Linux-

XtraBackup 備份恢復實例講解

XtraBackupXtraBackup官網 www.percona.com 下載XtraBackup wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.3/binary/redhat/6/i386/percona

Mysql中-Xtrabackup備份恢復應用

images 選項 SQ oca memory 使用方法 doc 如果 def 關於Xtrabackup(又或innobackupex)的介紹,詳細參考官方文檔 Xtrabackup安裝指南 文件準備 [root@wuxiang11 ~]# cd percona-xtr