使用Xtrabackup 備份mysql數據庫

##建立邏輯卷
[root@node1 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@node1 ~]# vgcreate myvg /dev/sdb1 
  Volume group "myvg" successfully created
[root@node1 ~]# lvcreate -n mydata -L 5G myvg 
  Logical volume "mydata" created.

[root@node1 ~]# mkfs.ext4 /dev/mapper/myvg-mydata   #格式化
[root@node1 ~]# mkdir /lvm_data
[root@node1 ~]# mount /dev/mapper/myvg-mydata /lvm_data  #掛載到/lvm_data

[root@node1 ~]# vim /etc/my.cnf    #修改mysql配置文件的datadir以下

datadir=/lvm_data

[root@node1 ~]# service mysqld restart  #重啓MySQL

########從新導入employees數據庫########
建立快照卷並備份

mysql> FLUSH TABLES WITH READ LOCK;     #鎖定全部表
Query OK, 0 rows affected (0.00 sec)

[root@node1 lvm_data]# lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvg-mydata   #建立快照卷
  Logical volume "mydata-snap" created.

mysql> UNLOCK TABLES;  #解鎖全部表
Query OK, 0 rows affected (0.00 sec)

[root@node1 lvm_data]# mkdir /lvm_snap  #建立文件夾
[root@node1 lvm_data]# mount /dev/myvg/mydata-snap /lvm_snap/  #掛載snap
mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only

[root@node1 lvm_data]# cd /lvm_snap/
[root@node1 lvm_snap]# ls
employees  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql-bin.000001  mysql-bin.000002  mysql-bin.000003  mysql-bin.index  test
[root@node1 lvm_snap]# tar cf /tmp/mysqlback.tar *  #打包文件到/tmp/mysqlback.tar

[root@node1 ~]# umount /lvm_snap/  #卸載snap
[root@node1 ~]# lvremove myvg mydata-snap  #刪除snap

恢復數據:前端

[root@node1 lvm_snap]# rm -rf /lvm_data/*
[root@node1 ~]# service mysqld start    #啓動MySQL, 若是是編譯安裝的應該不能啓動(需從新初始化),若是rpm安裝則會從新初始化數據庫。

[root@node1 ~]# cd /lvm_data/
[root@node1 lvm_data]# rm -rf * #刪除全部文件
[root@node1 lvm_data]# tar xf /tmp/mysqlback.tar     #解壓備份數據庫到此文件夾 
[root@node1 lvm_data]# ls  #查看當前的文件
employees  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql-bin.000001  mysql-bin.000002  mysql-bin.000003  mysql-bin.index  test

使用Xtrabackup 備份node

爲了更好地演示, 咱們此次使用mariadb-5.5的版本, 使用xtrabackup使用InnoDB可以發揮其最大功效, 而且InnoDB的每一張表必須使用單獨的表空間, 咱們須要在配置文件中添加 innodb_file_per_table = ON 來開啓;
下載安裝xtrabackup:
咱們這裏經過wget percona官方的rpm包進行安裝
[root@node1 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.4/binary/redhat/6/x86_64/percona-xtrabackup-2.3.4-1.el6.x86_64.rpm   
[root@node1 ~]# yum localinstall percona-xtrabackup-2.3.4-1.el6.x86_64.rpm   #須要EPEL源

xtrabackup介紹

Xtrabackup是由percona提供的mysql數據庫備份工具,據官方介紹,這也是世界上唯一一款開源的可以對innodb和xtradb數據庫進行熱備的工具。
特色: 一、備份過程快速、可靠; 二、備份過程不會打斷正在執行的事務; 三、可以基於壓縮等功能節約磁盤空間和流量; 四、自動實現備份檢驗; 五、還原速度快; xtrabackup實現徹底備份: 咱們這裏使用xtrabackup的前端配置工具innobackupex來實現對數據庫的徹底備份; 使用innobackupex備份時, 會調用xtrabackup備份全部的InnoDB表, 複製全部關於表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件, 同時還會備份觸發器和數據庫配置文件信息相關的文件, 這些文件會被保存至一個以時間命名的目錄.
備份過程

[root@node1 ~]# mkdir /extrabackup  #建立備份目錄
[root@node1 ~]# innobackupex --user=root /extrabackup/ #備份數據
###################提示complete表示成功*********************


[root@node1 ~]# ls /extrabackup/  #看到備份目錄
2016-04-27_07-30-48 

通常狀況, 備份完成後, 數據不能用於恢復操做, 由於備份的數據中可能會包含還沒有提交的事務或已經提交但還沒有同步至數據文件中的事務。所以, 此時的數據文件仍不一致, 因此咱們須要」準備」一個徹底備份;

[root@node1 ~]# innobackupex --apply-log /extrabackup/2016-04-27_07-30-48/  #指定備份文件的目錄
*****************通常狀況下下面三行結尾表明成功*****************
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 369661462
160427 07:40:11 completed OK!

[root@node1 ~]# cd /extrabackup/2016-04-27_07-30-48/
[root@node1 2016-04-27_07-30-48]# ls -hl  #查看備份文件
total 31M
-rw-r----- 1 root root  386 Apr 27 07:30 backup-my.cnf
drwx------ 2 root root 4.0K Apr 27 07:30 employees
-rw-r----- 1 root root  18M Apr 27 07:40 ibdata1
-rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile0
-rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile1
drwx------ 2 root root 4.0K Apr 27 07:30 mysql
drwx------ 2 root root 4.0K Apr 27 07:30 performance_schema
drwx------ 2 root root 4.0K Apr 27 07:30 test
-rw-r----- 1 root root   27 Apr 27 07:30 xtrabackup_binlog_info
-rw-r--r-- 1 root root   29 Apr 27 07:40 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root  117 Apr 27 07:40 xtrabackup_checkpoints
-rw-r----- 1 root root  470 Apr 27 07:30 xtrabackup_info
-rw-r----- 1 root root 2.0M Apr 27 07:40 xtrabackup_logfile

恢復數據:mysql

[root@node1 ~]# rm -rf /data/*   #刪除數據文件  備註:不用啓動數據庫也能夠還原。
[root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/   #恢復數據, 記清使用方法

#########咱們這裏是編譯安裝的mariadb因此須要作一些操做##########
[root@node1 data]# killall mysqld
[root@node1 ~]# chown -R mysql:mysql ./* 
[root@node1 ~]# ll /data/      #數據恢復
total 28704
-rw-rw---- 1 mysql mysql    16384 Apr 27 07:43 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Apr 27 07:43 aria_log_control
-rw-rw---- 1 mysql mysql 18874368 Apr 27 07:43 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Apr 27 07:43 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Apr 27 07:43 ib_logfile1
-rw-rw---- 1 mysql mysql      264 Apr 27 07:43 mysql-bin.000001
-rw-rw---- 1 mysql mysql       19 Apr 27 07:43 mysql-bin.index
-rw-r----- 1 mysql mysql     2166 Apr 27 07:43 node1.anyisalin.com.err

[root@node1 data]# service mysqld restart
MySQL server PID file could not be found!                  [FAILED]
Starting MySQL..                                           [  OK  ]

MariaDB [(none)]> SHOW DATABASES;  #查看數據庫, 已經恢復

增量備份:sql

#########建立連兩個數據庫以供測試#####################
MariaDB [(none)]> CREATE DATABASE TEST1;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE DATABASE TEST2;
Query OK, 1 row affected (0.00 sec)

[root@node1 ~]# innobackupex --incremental /extrabackup/ --incremental-basedir=/extrabackup/2016-04-27_07-30-48/ 

[root@node1 ~]# ls /extrabackup/2016-04-27_07-57-22/ #查看備份文件
total 96
-rw-r----- 1 root root   386 Apr 27 07:57 backup-my.cnf
drwx------ 2 root root  4096 Apr 27 07:57 employees
-rw-r----- 1 root root 49152 Apr 27 07:57 ibdata1.delta
-rw-r----- 1 root root    44 Apr 27 07:57 ibdata1.meta
drwx------ 2 root root  4096 Apr 27 07:57 mysql
drwx------ 2 root root  4096 Apr 27 07:57 performance_schema
drwx------ 2 root root  4096 Apr 27 07:57 test
drwx------ 2 root root  4096 Apr 27 07:57 TEST1
drwx------ 2 root root  4096 Apr 27 07:57 TEST2
-rw-r----- 1 root root    21 Apr 27 07:57 xtrabackup_binlog_info
-rw-r----- 1 root root   123 Apr 27 07:57 xtrabackup_checkpoints
-rw-r----- 1 root root   530 Apr 27 07:57 xtrabackup_info
-rw-r----- 1 root root  2560 Apr 27 07:57 xtrabackup_logfile

BASEDIR指的是徹底備份所在的目錄,此命令執行結束後,innobackupex命令會在/extrabackup目錄中建立一個新的以時間命名的目錄以存放全部的增量備份數據。另外,在執行過增量備份以後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。須要注意的是,增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是徹底備份。

整理增量備份:數據庫

[root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/
[root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/ --incremental-dir=/extrabackup/2016-04-27_07-57-22/

恢復數據
[root@node1 ~]# rm -rf /data/*   #刪除數據

[root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/     #整理增量備份以後能夠直接經過全量備份還原

[root@node1 ~]# chown -R mysql.mysql /data/
[root@node1 ~]# ls /data/ -l
total 28732
-rw-rw---- 1 mysql mysql     8192 Apr 27 08:05 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Apr 27 08:05 aria_log_control
drwx------ 2 mysql mysql     4096 Apr 27 08:05 employees
-rw-r----- 1 mysql mysql 18874368 Apr 27 08:05 ibdata1
-rw-r----- 1 mysql mysql  5242880 Apr 27 08:05 ib_logfile0
-rw-r----- 1 mysql mysql  5242880 Apr 27 08:05 ib_logfile1
drwx------ 2 mysql mysql     4096 Apr 27 08:05 mysql
-rw-rw---- 1 mysql mysql      245 Apr 27 08:05 mysql-bin.000001
-rw-rw---- 1 mysql mysql       19 Apr 27 08:05 mysql-bin.index
-rw-r----- 1 mysql mysql     1812 Apr 27 08:05 node1.anyisalin.com.err
-rw-rw---- 1 mysql mysql        5 Apr 27 08:05 node1.anyisalin.com.pid
drwx------ 2 mysql mysql     4096 Apr 27 08:05 performance_schema
drwx------ 2 mysql mysql     4096 Apr 27 08:05 test
drwx------ 2 mysql mysql     4096 Apr 27 08:05 TEST1
drwx------ 2 mysql mysql     4096 Apr 27 08:05 TEST2
-rw-r----- 1 mysql mysql       29 Apr 27 08:05 xtrabackup_binlog_pos_innodb
-rw-r----- 1 mysql mysql      530 Apr 27 08:05 xtrabackup_info
MariaDB [(none)]> SHOW DATABASES;  #數據還原
#關於xtrabackup還有不少強大的功能沒有敘述、有興趣能夠去看官方文檔#

總結:vim

備份方法         備份速度         恢復速度         便捷性                                  功能                通常用於
cp                   快                   快                   通常、靈活性低                     很弱                少許數據備份
mysqldump    慢                   慢                   通常、可無視存儲引擎的差別 通常              中小型數據量的備份
lvm2快照        快                   快                   通常、支持幾乎熱備、速度快 通常              中小型數據量的備份
xtrabackup     較快               較快                實現innodb熱備、對存儲引擎有要求 強大    較大規模的備份 bash

相關文章
相關標籤/搜索