一、安裝解壓
1.安裝資料庫
官網:http://www.percona.com
下載下傳位址:http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.8/binary/Linux/x86_64/percona-xtrabackup-2.0.8-587.tar.gz
2.建立資料庫
create database dotatest;
mysql -uroot -p dotatest > zhan_data.sql
python mysql_update.py –host localhost –user root –passwd “” –db dotatest
use dotatest;
show tables;
desc item;
insert into item (player, item, count) values (, , ); 插入一條資料
insert into item (player, item, count) values (, , );
select * from item;
3.安裝依賴包
4.解壓安裝
[root@localhost home]# tar xf percona-xtrabackup-2.0.8-587.tar.gz
[root@localhost home]# mysql --version
mysql Ver Distrib ., for redhat-linux-gnu (x86_64) using readline
[root@localhost percona-xtrabackup-.]# pwd
/home/percona-xtrabackup-.
[root@localhost percona-xtrabackup-.]# cp bin/
innobackupex xbstream xtrabackup_51 xtrabackup_56
innobackupex-. xtrabackup xtrabackup_55
[root@localhost percona-xtrabackup-.]# cp bin/innobackupex /usr/bin/
[root@localhost percona-xtrabackup-.]# cp bin/xtrabackup* /usr/bin/
二、正常備份檔案以及對單個資料庫備份
備份全部資料庫
[root@localhost /]# mkdir /home/data/backup/
[root@localhost /]# innobackupex --defaults-file=/etc/my.cnf --user=root /home/data/backup/
--defaults-file 指定mysql的配置檔案
--user 指定使用者
/home/data/backup/ 備份檔案的路徑
需要注意的是 如果不指定--defaults-file 預設會讀取/etc/my.cnf。如果你的配置檔案是自定義的,那麼一定要指定目錄,然後會在目錄下建立一個時間戳的目錄(我們本次建立的/home/data/backup/2014-03-11_11-08-23)
檢視備份是否成功
[root@localhost /]# cd /home/data/backup/2014-03-11_11-08-23/
[root@localhost ---08-]# pwd
/home/data/backup/---08-
[root@localhost ---08-]# ls
backup-my.cnf ibdata1 test xtrabackup_binlog_info xtrabackup_logfile
dotatest mysql xtrabackup_binary xtrabackup_checkpoints zabbix
[root@localhost ---08-]#
隻針對一個資料庫備份
–database 是指定需要備份的資料庫
三、正常恢複資料庫
恢複之前先停止資料庫,并且要删除資料和日志檔案
系統環境:
[root@localhost lib]# cat /etc/redhat-release
CentOS release (Final)
[root@localhost lib]# uname -a
Linux localhost.localdomain .-.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost lib]# uname -r
.-.el6.x86_64
[root@localhost lib]#
.首先停止資料庫
[root@localhost ----]# /etc/rc.d/init.d/mysqld stop
Stopping mysqld: [ OK ]
[root@localhost ----]#
.備份删除mysql檔案
[root@localhost lib]# cp -a mysql/ mysql.bak
[root@localhost lib]# ls
alternatives dav dhclient games misc mysql nfs plymouth postfix random-seed rpm stateles
authconfig dbus fprint logrotate.status mlocate mysql.bak ntp polkit- prelink readahead rsyslog udev
[root@localhost lib]# cd mysql
[root@localhost mysql]# ls
dotatest ibdata1 ib_logfile ib_logfile1 mysql test zabbix
[root@localhost mysql]# rm -rf *
03.來恢複檔案
恢複檔案分兩步,
第1步是apply-log,為了加快速度,一般建議設定--use-memory,這個步驟完成之後,目錄/backup/mysql/data/2013-10-29_09-05-25下的備份檔案已經準備就緒。
因為我們的檔案比較少,是以我們不需要設定--user-memory産數檔案
第2步是copy-back,即把備份檔案拷貝至原資料目錄下,--ibbackup xtrabackup_56作用是指定與本地安裝的mysql版本對應的xtrabackup
[root@localhost mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /home/data/backup/2014-03-11_16-52-44/ --ibbackup xtrabackup_56
[root@localhost mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /home/data/backup/2014-03-11_16-52-44/ --ibbackup xtrabackup_56
.修改權限 啟動服務
[root@localhost lib]# chown mysql:mysql /var/lib/mysql/ -R
[root@localhost lib]# /etc/rc.d/init.d/mysqld start
Starting mysqld: [ OK ]
[root@localhost lib]#
四、配置增量備份
增量備份及其恢複
注意:innobackupex 增量備份僅針對InnoDB這類支援事務的引擎,對于MyISAM等引擎,則仍然是全備。
01.首先到資料庫中插入一條資料
mysql> use dotatest;
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> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
| | | | |
| | | | |
+----+--------+------+-------+
rows in set ( sec)
mysql> insert into item (player, item, count) values (, , );
Query OK, row affected ( sec)
mysql> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
| | | | |
| | | | |
| | | | |
+----+--------+------+-------+
rows in set ( sec)
mysql>
02.增量備份是基于一個資料庫的全部備份檔案的,在剛才我們備份了一個全備份,我們現在的增量備份就基于剛才的全部備份來做(2014-03-11_16-52-44)
需要注意如下兩個參數:
--incremental-basedir指向全備目錄;
--incremental指向增量備份的目錄;
如下增量備份:
[root@localhost backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/data/backup/2014-03-11_16-52-44/ --incremental /home/data/backup/
……略……
innobackupex: Backup created in directory '/home/data/backup/2014-03-11_17-33-57'
innobackupex: MySQL binlog position: filename '', position
:: innobackupex: completed OK!
.檢視是否有備份檔案,最新的配置檔案就是我們剛才的增量備份檔案
[root@localhost backup]# pwd
/home/data/backup
[root@localhost backup]# ls
---- ----
[root@localhost backup]#
在如下的檔案中我們可以發現增量備份的檔案from_lsn剛好等于全部備份的to_lsn
[[email protected] --_17--]# cat xtrabackup_checkpoints 增量備份檔案
backup_type = incremental
from_lsn =
to_lsn =
last_lsn =
[[email protected] --_17--]# cat ../2014-03-11_16-52-44/ xtrabackup_checkpoints 全局備份
backup_type = full-prepared
from_lsn =
to_lsn =
last_lsn =
[[email protected] --_17--]#
######五、在增量備份的基礎上再做增量備份
在備份之前我們在item表中再插入資料
mysql> insert into item (player, item, count) values (, , );
Query OK, row affected ( sec)
mysql> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
| | | | |
| | | | |
| | | | |
| | | | |
+----+--------+------+-------+
rows in set ( sec)
mysql>
在增量備份的基礎上再做增量備份,我們需要添加如下參數
–incremental-basedir 執行上一次增量備份的目錄
如下備份:
[root@localhost ----]# innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/data/backup/2014-03-11_17-33-57/ --incremental /home/data/backup/
………中間部分略………
innobackupex: Backup created in directory '/home/data/backup/2014-03-11_18-03-54'
innobackupex: MySQL binlog position: filename '', position
:: innobackupex: completed OK!
innobackupex: Backup created in directory '/home/data/backup/2014-03-11_18-10-13'
innobackupex: MySQL binlog position: filename '', position
:: innobackupex: completed OK!
然後來檢視lsn号來:
[root@localhost ----]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn =
to_lsn =
last_lsn =
[root@localhost ----]# cat ../2014-03-11_17-33-57/
backup-my.cnf ibdata1.meta xtrabackup_binary xtrabackup_logfile
dotatest/ mysql/ xtrabackup_binlog_info zabbix/
ibdata1.delta test/ xtrabackup_checkpoints
[root@localhost ----]# cat ../2014-03-11_17-33-57/ xtrabackup_checkpoints
backup_type = incremental
from_lsn =
to_lsn =
last_lsn =
[root@localhost ----]#
六、恢複增量資料庫
停止資料庫
[root@localhost backup]# /etc/rc.d/init.d/mysqld stop
Stopping mysqld: [ OK ]
[root@localhost backup]#
備份資料庫
[root@localhost lib]# mv mysql mysql.bak.2
[root@localhost lib]# pwd
/var/lib
[root@localhost lib]#
這個恢複比恢複全部備份稍微複雜點,接下來我們來恢複
innobackupex --apply-log --redo-only BASE-DIR BASE-DIR指完整的全部備份目錄
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR- INCREMENTAL-DIR-指第一次增量備份的目錄
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR- BASE-DIR指
完整的全部備份目錄 INCREMENTAL-DIR-2第二次增量備份的目錄
01.在我們的環境中我們來執行如下操作,因為我們隻有兩次的增量備份如下即可:
innobackupex --apply-log --redo-only /home/data/backup/--_16--/
innobackupex --apply-log --redo-only /home/data/backup/--_16-- --incremental-dir=/home/data/backup/--_17--/
innobackupex --apply-log /home/data/backup/--_16--/ --incremental-dir=/home/data/backup/--_18--/
02.復原未完成的日志(需要注意的是恢複的時候,我們隻恢複全備份檔案就可以了)
innobackupex --apply-log /home/data/backup/--_16--/
innobackupex --copy-back /home/data/backup/--_16--/
03.授權啟動
[root@localhost lib]# chown mysql:mysql /var/lib/mysql -R
[root@localhost lib]# /etc/rc.d/init.d/mysqld start
Starting mysqld: [ OK ]
[root@localhost lib]#
04.檢查備份是否回來
mysql> use dotatest;
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> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
| | | | |
| | | | |
| | | | |
| | | | |
+----+--------+------+-------+
rows in set ( sec)
mysql>
注意:
mkdir /var/lib/mysql
避免如下報錯