參考:http://mingxiao.blog.51cto.com/8124243/1623634mysql
一 全備sql
1.命令安裝:數據庫
yum install -y gnupg rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm(64位源) rpm -Uhv https://www.percona.com/redir/downloads/percona-release/percona-release-0.0-1.i386.rpm(32位源) yum install -y percona-xtrabackup
[root@aliyun-112 ~]# xtrabackup -vbash
xtrabackup version 2.3.3 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 525ca7d)app
2.命令功能:ide
對InnoDB作數據備份的工具,支持在線熱備份工具
3.命令參數:ui
--database=sundong 單獨對hu數據庫作備份 ,如果不添加此參數那就那就是對全庫作備份 spa
--stream =tar 打包格式 目前只支持 tar and xbstream日誌
2>/var/backups/hu.log 輸出信息寫入日誌中
1> /var/backups/hu.tar.gz 打包壓縮存儲到該文件中
--incremental-dir=/var/backups/plus/ 增量備份目錄
--copy-back選項的命令從備份目錄拷貝數據,索引,日誌到my.cnf文 件裏規定的初始位置
--apply-log選項的命令是準備在一個備份上啓動mysql服務
--port=PORT
4.命令實例:
備份並打包壓縮 (只備份hu這個數據庫)
innobackupex --defaults-file=/home/DB/mysql/my.cnf --user=root --password=xxxxx --database=hu --stream=tar /var/backups/ 2>/var/backups/hu.log | gzip 1> /var/backups/hu.tar.gz
5 整庫備份。(一次性備份全部的數據庫)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=cdqd /var/backups/
(root爲數據庫用戶名,cdqd爲數據庫密碼,/etc/my.cnf爲mysql配置文件所在位置,/var/backups/爲備份文件存儲目錄)
6 恢復
首先停掉數據庫,而後刪除數據庫目錄下的全部數據庫文件。
首先寫日誌文件,而後恢復,以下。(注:2010-04-17_22-19-30是自動生成的以備份時間命名的文件夾,恢復時根據狀況進行選擇)
# innobackupex --defaults-file=/etc/my.cnf --apply-log /var/backups/2010-04-17_22-19-30 (寫日誌)
# innobackupex --defaults-file=/etc/my.cnf --copy-back /var/backups/2010-04-17_22-19-30 (恢復)
而後去你的備份目錄查看是否有備份的文件,而後還須要更改權限(這步我是cd到原數據庫目錄下進行的)
#chown -R mysql:mysql *
重啓數據庫,開恢復是否成功。
二 增量備份與恢復
在這裏爲了表述清楚咱們作兩次增量備份。
爲student表插入數據,爲增量備份作基礎。
mysql>use hu; mysql>create table student (`id` int(4),`name` char(40),`values`char(40)) mysql> INSERT INTO student (Name) VALUES ('XiaoHei3'),('XiaoHei4');
徹底備份:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/backup
備份完成以後產生這個
2015-03-23_23-19-24/ 文件夾,這是徹底備份的目錄
第一次增量備份,--incremental-basedir=指的是徹底備份所在的目錄。/backup是備份的目錄
INSERT INTO student (Name) VALUES ('XiaoHei1'),('XiaoHei2');
[root@localhost /]#
innobackupex --incremental /backup --incremental-basedir=/backup/2015-03-23_23-19-24/
執行完這個以後會產生一個2015-03-23_23-21-49/ ,第二次增量備份指定它就能夠
mysql>
INSERT INTO student (Name) VALUES ('XiaoHei5'),('XiaoHei6');
第二次增量備份,--incremental-basedir=指的是第上一次增量備份所在的目錄,這裏指第一次,以此類推。
[root@localhost /]# innobackupex --incremental /backup --incremental-basedir=/backup/2015-03-23_23-21-49/
步驟三:準備徹底備份和增量備份
增量備份完成,下面要準備徹底備份和增量備份。
--redo-only後面是徹底備份所在目錄。
--incremental-dir指增量備份所在目錄,如有多個,按時間前後執行屢次。
[root@localhost /]# innobackupex --apply-log --redo-only /backup/2015-03-23_23-19-24/
[root@localhost /]# innobackupex --apply-log --redo-only /backup/2015-03-23_23-19-24/ --incremental-dir=/backup/2015-03-23_23-21-49/ --incremental-dir指向第一次增量備份目錄
[root@localhost /]# innobackupex --apply-log --redo-only /backup/2015-03-23_23-19-24/ --incremental-dir=/backup/2015-03-23_23-22-44/ --incremental-dir指向第二次增量備份目錄
步驟四:模擬mysqld故障
[root@localhost /]# service mysqld stop
Shutting down MySQL. SUCCESS!
[root@localhost /]# rm -rf /mydata/data/*
步驟五:恢復數據
[root@localhost data]# innobackupex --copy-back /backup/2015-03-23_23-19-24/ (第一次全備份的目錄)
而後進入到備份目錄查看是否有備份文件存在
注意:恢復數據後,在重啓mysqld前,須要修改數據目錄權限,默認是root用戶,root組,須要改成mysql用戶,mysql組。
[root@localhost data]# chown -R mysql.mysql ./*
service mysqld start
mysql> use hu;
Database changed
mysql> select * from student;
+----+-------------------+---------------+
| ID | Name | Course |
+----+-------------------+---------------+
| 1 | xiaoming | English |
| 2 | xiaohong | Kuihuabaodian |
| 16 | XiaoHei1 | |
| 17 | XiaoHei2 | |
| 18 | XiaoHei3 | |
| 19 | XiaoHei4 | |
| 20 | XiaoHei5 | |
| 21 | XiaoHei6 | |
+----+-------------------+---------------+
9 rows in set (0.00 sec)
能夠看到全部數據都完整無缺,至此,備份恢復操做都已完成。