您好,登錄后才能下訂單哦!
Xtarbackup簡介
Xtrabackup是由percona開源的免費數據庫熱備份軟件,它能對InnoDB數據庫和XtraDB存儲引擎的數據庫非阻塞地備份(對于MyISAM的備份同樣需要加表鎖);mysqldump備份方式是采用的邏輯備份,其最大的缺陷是備份和恢復速度較慢,如果數據庫大于50G,mysqldump備份就不太適合。
Xtrabackup優點
1)備份速度快,物理備份可靠
2)備份過程不會打斷正在執行的事務(無需鎖表)
3)能夠基于壓縮等功能節約磁盤空間和流量
4)自動備份校驗
5)還原速度快
6)可以流傳將備份傳輸到另外一臺機器上
7)在不增加服務器負載的情況備份數據
Xtrabackup備份原理
備份開始時首先會開啟一個后臺檢測進程,實時檢測mysql redo的變化,一旦發現有新的日志寫入,立刻將日志記入后臺日志文件xtrabackup_log中,之后復制innodb的數據文件一系統表空間文件ibdatax,復制結束后,將執行flush tables with readlock,然后復制.frm MYI MYD等文件,最后執行unlock tables,最終停止xtrabackup_log。
Xtrabackup增量備份介紹
xtrabackup增量備份的原理是:
1)、首先完成一個完全備份,并記錄下此時檢查點LSN;
2)、然后增量備份時,比較表空間中每個頁的LSN是否大于上次備份的LSN,若是則備份該頁并記錄當前檢查點的LSN。
增量備份優點:
1)、數據庫太大沒有足夠的空間全量備份,增量備份能有效節省空間,并且效率高;
2)、支持熱備份,備份過程不鎖表(針對InnoDB而言),不阻塞數據庫的讀寫;
3)、每日備份只產生少量數據,也可采用遠程備份,節省本地空間;
4)、備份恢復基于文件操作,降低直接對數據庫操作風險;
5)、備份效率更高,恢復效率更高。
安裝
運行環境是centos 7.2
下載XtraBackup:
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el7-x86_64-bundle.tar
(Percona-XtraBackup-8.0下載:
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm
依賴:yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel perl perl-devel perl-Digest-MD5 perl-Time-HiRes perl-DBD-MySQL libev libev-devel libgcrypt libgcrypt-devel curl curl-devel python-setuptools libarchive-devel)
解壓:tar -xf Percona-XtraBackup-2.4.9-ra467167cdd4-el7-x86_64-bundle.tar
檢查安裝percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm所需依賴包:
yum -y install percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm --skip-broken
根據提示進行安裝:
yum -y install perl-* mariadb-libs
還有一個依賴包需要手動下載安裝
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/libev-4.15-7.el7.x86_64.rpm
安裝完成幾個依賴包,嘗試安裝percona-xtrabackup
yum -y install percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm
我這顯示正確安裝,沒有報錯。
[root@localhost src]# which xtrabackup
/usr/bin/xtrabackup
[root@localhost src]# innobackupex -v
innobackupex version 2.4.9 Linux (x86_64) (revision id: a467167cdd4)
[root@localhost src]#
mysql創建數據庫以及表
mysql> create database home ;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
mysql> create table address (name varchar(10) not null,homeaddress varchar(20) not null);
Query OK, 0 rows affected (0.08 sec)
mysql> use home ;
Database changed
mysql> insert into address values('zhuangsan','guangzhou');
Query OK, 1 row affected (0.02 sec)
mysql> insert into address values('lisi','shanghai');
Query OK, 1 row affected (0.01 sec)
mysql> insert into address values('waner','shenzhen');
Query OK, 1 row affected (0.03 sec)
全量備份:
[root@localhost run]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123abc" --backup /data/mysqldata
--user :mysql的用戶帳號
--password:為帳號的密碼
/data/mysqldata:數據備份目錄
[root@localhost run]# ls /data/mysqldata/2018-03-09_17-25-31/ #在這個目錄中可以看到備份信息,同樣可以看到我們創建的庫的名稱。
[root@localhost ~]# innobackupex --apply-log /data/mysqldata/2018-03-09_17-25-31/ #使用此參數使相關數據性文件保持一致性狀態。
恢復:
刪除表信息:
mysql> show databases
-> ;
+------------------------------+
| Database |
+------------------------------+
| information_schema |
| #mysql50#2018-03-09_17-25-31 |
| home |
| mysql |
| performance_schema |
| sys |
+------------------------------+
6 rows in set (0.09 sec)
mysql> use home;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_home |
+----------------+
| address |
+----------------+
1 row in set (0.00 sec)
mysql> drop table address;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from address
->;
ERROR 1146 (42S02): Table 'home.address' doesn't exist
mysql>
恢復之前必須保證數據目錄為空,即mysqldata目錄。由于之前的備份數據在mysqldata目錄中,所以需要將里面的數據copy出來,確保mysqldata目錄是空的。才能正常恢復數據。要不然會報mysqldata目錄非空錯誤。
[root@localhost mysqldata]# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/mysqldata.bak/2018-03-09_17-25-31/
所遇問題處理 注:
恢復數據后,啟動mysql出現報錯,無法啟動。
[root@localhost mysqldata]# service mysqld start
Starting MySQL.. ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).
檢查過/var/run/mysqld目錄沒問題,進入恢復數據文件目錄和之前的數據進行對比,發現所以數據的所有者不是mysql而是root
修改恢復目錄的數據權限
[root@localhost data]# chown -R mysql:mysql mysqldata
重新啟動mysql,正常啟動
查看數據是否恢復。
數據恢復正常。
增量備份與恢復:
新插入一些數據,創建用于增量備份的數據,用來模擬刪除掉了全備后的數據,能否通過增量備份文件來恢復。
mysql> select * from address;
+-----------+-------------+
| name | homeaddress |
+-----------+-------------+
| zhuangsan | guangzhou |
| lisi | shanghai |
| waner | shenzhen |
| jinjin | jiangxi |
| xiaoxiong | xi`an |
| meimei | fujian |
+-----------+-------------+
6 rows in set (0.00 sec)
mysql>
增量備份:
[root@localhost mysqldata.bak]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123abc --incremental /data/mysqldata --incremental-basedir=/data/mysqldata.bak/2018-03-09_17-25-31
--incremental /data/mysqldata 指定增量備份文件存放目錄
--incremental-basedir=/data/mysqldata.bak/2018-03-09_17-25-31 指定上一次全量備份或增量備份的存放目錄
顯示以下內容說明成功:
180323 14:54:20 Executing UNLOCK TABLES
180323 14:54:20 All tables unlocked
180323 14:54:20 [00] Copying ib_buffer_pool to /data/mysqldata/2018-03-23_14-54-12/ib_buffer_pool
180323 14:54:20 [00] ...done
180323 14:54:20 Backup created in directory '/data/mysqldata/2018-03-23_14-54-12/'
180323 14:54:20 [00] Writing /data/mysqldata/2018-03-23_14-54-12/backup-my.cnf
180323 14:54:20 [00] ...done
180323 14:54:20 [00] Writing /data/mysqldata/2018-03-23_14-54-12/xtrabackup_info
180323 14:54:20 [00] ...done
xtrabackup: Transaction log of lsn (2564189) to (2564198) was copied.
180323 14:54:20 completed OK!
[root@localhost mysqldata.bak]#
查看備份情況
刪除一條數據測試增量恢復
在恢復數據之前記得關閉數據庫服務。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。