您好,登錄后才能下訂單哦!
簡介:
Xtrabackup是由percona提供的mysql數據庫備份工具,可以對Innodb數據庫做熱備
特點:
(1)備份過程快速、可靠
(2)備份過程不會打斷正在執行的事務
(3)能夠基于壓縮等功能節約磁盤空間和流量
(4)自動實現備份檢驗
(5)還原速度快
準備工作:
1.安裝xtrabackup(在percona官網下載rpm包)
# yum install percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm
2.創建最小權限用戶
MariaDB [(none)]>grant reload,lock tables,replication client on *.* to 'backupuser'@'localhost' identified by 'backuppassword';
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.04 sec)
開始備份:(模擬線上環境)
1.完全備份(生成的備份目錄為2015-04-09_02-35-22)
# innobackupex --user=backupuser --password=backuppassword /backup/
若顯示以下內容即為備份成功:
150409 02:35:25 innobackupex: Connection to database server closed
150409 02:35:25 innobackupex: completed OK!
若顯示以下錯誤信息:在my.cnf文件[mysqld] 中添加innodb_log_file_size = 5M
InnoDB: Error: log file ./ib_logfile0 is of different size 5242880 bytes
InnoDB: than specified in the .cnf file 50331648 bytes!
innobackupex: Error: The xtrabackup child process has died at /usr/bin/innobackupex line 2672.
2.在數據庫插入數據,模擬msyqld正常線上運行第一天
MariaDB [(none)]> create database xx;
Query OK, 1 row affected (0.00 sec)
3.執行增量備份(生成2015-04-09_02-59-13,此時--incremental-basedir則應該指為完全備份的目錄2015-04-09_02-35-22)
注意:增量備份僅能應用于InnoDB或XtraDB表,對于MyISAM表而言,執行增量備份時其實進行的是完全備份
# innobackupex --incremental /backup/ --incremental-basedir=/backup/2015-04-09_02-35-22/
顯示以下信息即為增量備份成功:
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 324
150409 02:59:18 innobackupex: Connection to database server closed
150409 02:59:18 innobackupex: completed OK!
4.再次在數據庫插入數據,模擬mysqld正常線上運行第二天
MariaDB [(none)]> create database yy;
Query OK, 1 row affected (0.00 sec)
5.再次執行增量備份(生成2015-04-09_03-00-38,此時--incremental-basedi則應該指為上一次增量備份的目錄2015-04-09_02-59-13)
# innobackupex --incremental /backup/ --incremental-basedir=/backup/2015-04-09_02-59-13/
6.再次在數據庫插入數據,模擬mysqld正常線上運行第三天
MariaDB [(none)]> create database zz;
Query OK, 1 row affected (0.00 sec)
7.模擬事故,停掉mysqld,刪除/data目錄下的數據
注意:線上環境應該將二進制日志文件(binlog)和數據文件分開存放;
# service mysqld stop
說明:因為此處實驗我并沒有將二進制日志文件和數據分開存放,所以我先將二進制日志復制到其他目錄再刪除數據
# cp mysql-bin.000001 /backup/
# rm /data/* -rf
8.查看上一次增量備份,二進制日志最后記錄position的位置
# cat /backup/2015-04-09_03-00-38/xtrabackup_binlog_info
mysql-bin.000001 479
9.導出二進制日志,從最后備份的position開始
# mysqlbinlog mysql-bin.000001 --start-position="479">/backup/binlog.sql
恢復數據:
一般情況下,在備份完成后,數據尚且不能用于恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處于一致性狀態
“準備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:
(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之后,所有的備份數據將合并到完全備份上。
(2)基于所有的備份將未提交的事務進行“回滾”。
此時備份目錄下的所有文件:
按排列順序:完全備份文件 第一次增量備份文件 第二次增量備份文件 導出的部分二進制日志文件 所有的二進制日志文件
1.整理合并備份文件
# innobackupex --apply-log --redo-only /backup/2015-04-09_02-35-22/
將第一個增量備份合并到完全備份中
# innobackupex --apply-log --redo-only /backup/2015-04-09_02-35-22/ --incremental-dir=/backup/2015-04-09_02-59-13/
將第二個增量備份合并到完全備份中
# innobackupex --apply-log --redo-only /backup/2015-04-09_02-35-22/ --incremental-dir=/backup/2015-04-09_03-00-38/
注意:假如我們在每周日晚上00:00點做完全備份,在周1-周6晚上00:00點做增量備份,剛好有用戶一直在00:00點前一直在操作,并且在00:01分才提交事務,所以為了避免系統自動將備份時候未提交的事務做回滾操作,所以我們需要加上--redo-only參數,讓其只提交事務,而不回滾事務。到最后系統會判定哪些是需要回滾的操作執行回滾
2.恢復操作
# innobackupex --copy-back /backup/2015-04-09_02-35-22/
3.改變恢復后數據目錄(/data)下文件的屬主屬組為msyql
# chown -R mysql.mysql /data/*
4.查看數據庫有備份的內容有無恢復
# service mysqld start
可以看到備份的數據已經恢復
5.通過二進制日志恢復未來得及備份的數據
# mysql <binlog.sql
可以看到未來的及備份的數據也通過二進制日志恢復
-------------------------------完成。-------------------------------------
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。