系統版本RHEL6.6 mysql
MySQL版本 5.5.28-i386sql
XtraBackup-2.2.9數據庫
Percona XtraBackup是一塊開源且免費的對MySQL Innodb存儲引擎備份數據的工具,使用此工具的時候不需中止MySQL,並且支持壓縮備份,支持對Innodb存儲引擎作增量備份,對MYISAM存儲引擎作徹底備份,而且支持流備份。服務器
使用innobakupex備份時,其會調用xtrabackup備份全部的InnoDB表,複製全部關於表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。app
在備份的同時,innobackupex還會在備份目錄中建立以下文件:ide
(1)xtrabackup_checkpoints —— 備份類型(如徹底或增量)、備份狀態(如是否已經爲prepared狀態)和LSN(日誌序列號)範圍信息;工具
每一個InnoDB頁(一般爲16k大小)都會包含一個日誌序列號,即LSN。LSN是整個數據庫系統的系統版本號,每一個頁面相關的LSN可以代表此頁面最近是如何發生改變的。ui
(2)xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置。spa
(3)xtrabackup_binlog_pos_innodb —— 二進制日誌文件及用於InnoDB或XtraDB表的二進制日誌文件的當前position。日誌
(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執行文件;
(5)backup-my.cnf —— 備份配置文件
步驟一:下載安裝
先去官網下載對應版本的XtraBackup的rpm包
[root@localhost ~]# rpm -ivhpercona-xtrabackup-2.2.9-5067.el6.i686.rpm
warning:percona-xtrabackup-2.2.9-5067.el6.i686.rpm: Header V4 DSA/SHA1 Signature, keyID cd2efd2a: NOKEY
error: Failed dependencies:
perl(DBD::mysql)is needed by percona-xtrabackup-2.2.9-5067.el6.i686
perl(Time::HiRes)is needed by percona-xtrabackup-2.2.9-5067.el6.i686
出現錯誤,須要手動解決依賴關係,解決辦法:
[root@localhost ~]# yum -y install perl-Time-HiRes perl-DBD-MySQL
[root@localhost~]# rpm -ivh percona-xtrabackup-2.2.9-5067.el6.i686.rpm
步驟二:徹底備份
把數據備份到/backup目錄,備份完成後,在/backup目錄下生成以當前時間命名的備份文件。
[root@localhost ~]# innobackupex --user=root /backup
[root@localhost ~]# ls /backup/
2015-03-22_20-16-17
步驟三:準備徹底備份
在備份完成後,數據還不能用於恢復操做,由於備份的數據中可能會包含還沒有提交的事務或已經提交但還沒有同步至數據文件中的事務。所以要作一個準備工做。
使用--apply-log選項 ,指定徹底備份目錄。
[root@localhost ~]# innobackupex --apply-log /backup/2015-03-22_20-16-17/
步驟四:模擬用戶寫入數據
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
+--------------------+
mysql> use school;
mysql> SHOW TABLES;
+------------------+
| Tables_in_school |
+------------------+
| student |
+------------------+
mysql> SELECT * FROM student;
+----+--------------------+---------------+
| ID | Name | Course |
+----+--------------------+---------------+
| 1 | xiaoming | English |
| 2 | xiaohong | Kuihuabaodian |
| 3 | www.mingxiao.info | |
| 4 | www.mingxiao.info1 | |
+----+--------------------+---------------+
mysql> INSERT INTO student (Name) VALUES ('xiaohei'),('xiaoqing');
Query OK, 2 rows affected, 1 warning (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 1
插入之後結果:
mysql> SELECT * FROM student;
+----+--------------------+---------------+
| ID | Name | Course |
+----+--------------------+---------------+
| 1 | xiaoming | English |
| 2 | xiaohong | Kuihuabaodian |
| 3 | www.mingxiao.info | |
| 4 | www.mingxiao.info1 | |
| 5 | xiaohei | |
| 6 | xiaoqing | |
+----+--------------------+---------------+
更新二進制日誌文件
mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW MASTER LOGS;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 398 |
| mysql-bin.000002 | 107 |
+------------------+-----------+
2 rows in set (0.00 sec)
備份二進制日誌文件,用於及時點復原
[root@localhost data]# mysqlbinlog --start-position=107 /mydata/data/mysql-bin.000001 > /backup/BIN_LOG.sql
步驟五:模擬MySQL損壞
service mysqld stop
[root@localhost ~]# rm -rf /mydata/data/*
步驟六:恢復數據
[root@localhost ~]# innobackupex --copy-back /backup/2015-03-22_20-16-17/
此時數據目錄/mydata/data中數據屬主和屬組都是root用戶root組,須要改成mysql用戶mysql組。改完之後就能夠啓動mysqld服務。
[root@localhost data]# chown -R mysql.mysql /mydata/data/*
[root@localhost data]# service mysqld start
Starting MySQL.. SUCCESS!
連上mysql,可看到剛剛插入表中的數據不存在,所以須要用二進制日誌作及時點還原。
mysql> USE school;
Database changed
mysql> SELECT * FROM student;
+----+--------------------+---------------+
| ID | Name | Course |
+----+--------------------+---------------+
| 1 | xiaoming | English |
| 2 | xiaohong | Kuihuabaodian |
| 3 | www.mingxiao.info | |
| 4 | www.mingxiao.info1 | |
+----+--------------------+---------------+
4 rows in set (0.00 sec)
mysql> SET sql_log_bin=0; 關閉二進制日誌文件功能
Query OK, 0 rows affected (0.00 sec)
mysql> SOURCE /backup/BIN_LOG.sql; 及時點還原
mysql> SET sql_log_bin=1; 開啓二進制日誌文件功能
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM student;
+----+--------------------+---------------+
| ID | Name | Course |
+----+--------------------+---------------+
| 1 | xiaoming | English |
| 2 | xiaohong | Kuihuabaodian |
| 3 | www.mingxiao.info | |
| 4 | www.mingxiao.info1 | |
| 5 | xiaohei | |
| 6 | xiaoqing | |
+----+--------------------+---------------+
6 rows in set (0.00 sec)
可看到原先插入的數據也已經回覆。
至此,全部操做已經完成。