linux覆盤:innobackupex備份恢復

xtrabackup :只能夠備份innodb;mysql

可是咱們也須要備份myisam,而後就出來了一個工具:innobackupexsql

1、innobackupex 備份:

1.1 查看數據目錄:數據庫

[root@zhdy-03 ~]# ls /data/mysql/
auto.cnf  db1  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql2  performance_schema  test  zhdy01  zhdy02  zhdy03  zhdy-03.err  zhdy-03.pid

其實咱們徹底可使用mysqldump去備份myisam和innodb,可是速度有點慢,若是遇到大的數據庫很浪費時間!緩存

下面咱們就對如上的一些數據進行備份:服務器

1.2 安裝percona-xtrabackup工具:app

[root@zhdy-03 ~]# rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

[root@zhdy-03 ~]# yum list | grep percona

[root@zhdy-03 ~]# yum install percona-xtrabackup -y

1.3 建立一個備份的用戶:socket

先使用root帳戶登陸;

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bakuser'@'localhost' identified by 'zhangduanya';
Query OK, 0 rows affected (0.00 sec)

建立一個bakuser,且授予RELOAD,LOCK TABLES,REPLICATION CLIENT權限。

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

刷新一下權限;

1.4 備份:ide

首先建立一個備份的目錄;
[root@zhdy-03 ~]# mkdir -p /data/backup/

[root@zhdy-03 ~]# innobackupex --defaults-file=/etc/my.cnf --user=bakuser --password='zhangduanya' -S /tmp/mysql.sock  /data/backup

--defaults-file用來根據my.cnf的信息找打聽他datadir數據存儲目錄
-S /tmp/mysql.sock指定socket,此方法只適用於本地鏈接,等同於「mysql -uroot -p123456」
/data/backup最後跟要備份到的目標目錄

[root@zhdy-03 backup]# du -sh *
92M	2017-08-23_21-23-46

若是在備份的時候有任何的錯誤,它會自動的中止,並輸出錯誤的信息!工具

1.5 備份對比:測試

[root@zhdy-03 backup]# ls /data/mysql/
auto.cnf  db1  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql2  
performance_schema  test  zhdy01  zhdy02  zhdy03  zhdy-03.err  zhdy-03.pid

[root@zhdy-03 backup]# ls /data/backup/2017-08-23_21-23-46/
backup-my.cnf  ibdata1  mysql2              test                    xtrabackup_info     zhdy01  zhdy03
db1            mysql    performance_schema  xtrabackup_checkpoints  xtrabackup_logfile  zhdy02

其實備份的文件+目錄幾乎是同樣的,可是是不能夠直接恢復使用的!

可是du -sh 的時候會小不少是由於部分數據多是緩存之類的

2、innobackupex 恢復:

2.1 模擬數據庫被刪除:

先停掉數據庫;
[root@zhdy-03 backup]# /etc/init.d/mysqld stop 
Shutting down MySQL.. SUCCESS! 

[root@zhdy-03 backup]# mv /data/mysql /data/mysql.bak
[root@zhdy-03 backup]# ls /data/
backup  mysql.bak  wwwroot
[root@zhdy-03 backup]# mkdir -p /data/mysql
[root@zhdy-03 backup]# chown -R mysql.mysql /data/mysql

2.2 恢復數據:

第一步只是初始化了一下;

[root@zhdy-03 backup]# innobackupex --use-memory=512M --apply-log 2017-08-23_21-23-46/

-use-memory=512M:意思是恢復數據指定使用的內存爲512M;
(由於這是虛擬機,因此只是測試,要是線上的服務器64G咱們可使用32G來恢復數據,這樣速度會更快些)
--apply-log:指定須要恢復的日誌文件

2.3 如今進行恢復:

[root@zhdy-03 backup]# innobackupex --defaults-file=/etc/my.cnf --copy-back ./2017-08-23_21-23-46/

便可恢復我們的備份到mysql目錄,並且是原來的位置由於這裏調用了datadir的緣故吧

再次檢查:

[root@zhdy-03 data]# du -sh *
190M	backup
188M	mysql
188M	mysql.bak
132M	wwwroot

3、innobackupex增量備份

3.1 先全量

innobackupex --defaults-file=/etc/my.cnf --user=bakuser --password=zhangduanya -S /tmp/mysql.sock/data/backup
這裏沒有-S的指定socket其餘步驟相同,測試後不加-S不可備份,這裏需補上

xtrabackup: Transaction log of lsn (3037472) to (3037472) was copied.
170824 22:57:58 completed OK!

-----------
等待出現如上消息,意味着咱們已經對全量備份完畢。

查看全量備份:

[root@zhdy-03 ~]# ls /data/backup/
2017-08-24_22-57-43

[root@zhdy-03 ~]# du -sh /data/backup/
92M	/data/backup/

3.2 建立增量備份

再開始以前,咱們先模擬增長一個庫,就是更改一下里面的數據庫

[root@zhdy-03 ~]# mysql -uroot -pzhangduanya -e "create database db123"      //建立一個db123庫

[root@zhdy-03 ~]# mysql -uroot -pzhangduanya db123 < /tmp/mysqlbak.sql   //把以前備份的數據恢復獲得db123庫
##注意不用在意這裏備份進去的數據是什麼,這是在測試其可用性

第一次增量備份:

[root@zhdy-03 ~]# innobackupex --user=bakuser --password='zhangduanya' -S /tmp/mysql.sock
--incremental /data/backup --incremental-basedir /data/backup/2017-08-24_22-57-43

##這裏不須要指定mysql目錄了--defaults-file由於和這裏不要緊了
##指定專門用來備份的帳號密碼,目錄和全量備份的數據

[root@zhdy-03 backup]# du -sh *
92M	2017-08-24_22-57-43
16M	2017-08-24_23-10-21

---------------------------
第一次增量備份的數據只有16M;

3.3 模擬執行第二次增量備份

[root@zhdy-03 backup]# mysql -uroot -pzhangduanya -e "create database lalala"
#建立庫

[root@zhdy-03 backup]# mysql -uroot -pzhangduanya lalala < /tmp/mysqlbak.sql 
#導入點數據

[root@zhdy-03 backup]# ls /data/mysql/
auto.cnf  db123    ib_logfile0  lalala  mysql2              test    zhdy02  zhdy-03.err
db1       ibdata1  ib_logfile1  mysql   performance_schema  zhdy01  zhdy03  zhdy-03.pid
#找到咱們建立的兩個db123,和lalala

[root@zhdy-03 backup]# innobackupex --user=bakuser --password='zhangduanya' -S /tmp/mysql.sock
--incremental /data/backup --incremental-basedir /data/backup/2017-08-24_23-10-21

[root@zhdy-03 backup]# du -sh *
92M	2017-08-24_22-57-43
16M	2017-08-24_23-10-21
17M	2017-08-24_23-41-33

-----------------------------
這裏特別注意,也是困擾不少人的一個關鍵操做,咱們再次作增量備份的時候要基於剛剛已經作了的基礎上面再次增量,
也就是2017-08-24_23-10-21。也就是說這樣此次的增量裏面纔會有剛剛第一次增量時添加的db123庫

4、增量備份的恢復

4.1 爲了還原真實性,我模擬刪除數據庫,而且停掉mysql,利用我們已經備份的數據去恢復它。

[root@zhdy-03 backup]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS! 

[root@zhdy-03 data]# ls
backup  mysql  wwwroot

[root@zhdy-03 data]# mv /data/mysql/ /data/mysqlbak

[root@zhdy-03 data]# ls /data/
backup  mysqlbak  wwwroot

[root@zhdy-03 data]# mkdir /data/mysql

[root@zhdy-03 data]# chown -R mysql.mysql /data/mysql

[root@zhdy-03 data]# ls 
backup  mysql  mysqlbak  wwwroot

爲了避免容易混淆,我先把backup目錄中的這些備份展現出來:

[root@zhdy-03 backup]# ls
2017-08-24_22-57-43  ##全量
2017-08-24_23-10-21  ##一次增量
2017-08-24_23-41-33  ##二次增量

4.2 先初始化全量備份:

[root@zhdy-03 data]# innobackupex --apply-log --redo-only /data/backup/2017-08-24_22-57-43

--apply-log:指定須要恢復的日誌文件
--redo-only:這個是整合合併的東西初始化時候用,最後一步不須要整合了

----
/data/backup/2017-08-24_22-57-43:此爲我們第一次全量備份的數據。

4.3 初始化整合第一次的增量:

[root@zhdy-03 backup]# innobackupex --apply-log --redo-only /data/backup/2017-08-24_22-57-43 
--incremental-dir=/data/backup/2017-08-24_23-10-21

4.4 初始化整合第二次的增量:

[root@zhdy-03 backup]# innobackupex --apply-log --redo-only /data/backup/2017-08-24_22-57-43 
--incremental-dir=/data/backup/2017-08-24_23-41-33

##實驗得出若是咱們再次作增量備份的時候沒有基於剛剛已經作了的基礎上面再次增量,那麼第二次備份恢復初始化就會報錯

4.5 再次把整合好的增量再次初始化一下:

[root@zhdy-03 backup]# innobackupex --apply-log  /data/backup/2017-08-24_22-57-43
#這裏就沒有了--redo-only

4.6 最後一步恢復:

[root@zhdy-03 ~]# innobackupex --copy-back  /data/backup/2017-08-24_22-57-43/

再次檢查數據:

[root@zhdy-03 ~]# ls /data/mysql
db1  db123  ibdata1  ib_logfile0  ib_logfile1  lalala  mysql  mysql2  
performance_schema  test  xtrabackup_info  zhdy01  zhdy02  zhdy03

剛剛建立的db123和lalala也已經所有恢復!

[root@zhdy-03 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
相關文章
相關標籤/搜索