linux運維、架構之路-xtrabackup
阿新 • • 發佈:2018-01-09
init binary trab src 啟動 binlog apply-log innodb 技術
一、XtraBackup介紹
1、備份工具
xtrabackup:是一款基於InnoDB的在線熱備工具,具有開源,免費,支持在線熱備,占用磁盤空間小,能夠非常快速地備份與恢復mysql數據庫,(備份時不影響數據讀寫)
官方下載地址為http://www.percona.com/software/percona-xtrabackup
mysqldump:備份是邏輯備份,備份出來的文件是sql語句,但是當備份MySQL數據超過10G時,用mysqldump來導出備份就比較慢了
2、備份原理
3、xtrabackup包含兩個主要的工具
①xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表;
②innobackupex是一個封裝了xtrabackup的Perl腳本,支持同時備份innodb和myisam,但在對myisam備份時需要加一個全局的讀鎖,還有就是myisam不支持增量備份
innobackupex備份和恢復的工作原理
二、XtraBackup安裝部署
1、環境
①db
[root@db ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db ~]# uname -r 2.6.32-696.el6.x86_64 [root@db ~]# /etc/init.d/iptables status iptables: Firewallis not running. [root@db ~]# getenforce Disabled [root@db ~]# hostname -I 172.19.5.54 172.16.1.54
②db01
[root@db01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db01 ~]# uname -r 2.6.32-696.el6.x86_64 [root@db01 ~]# /etc/init.d/iptables status iptables: Firewall is not running. [root@db01~]# getenforce Disabled [root@db01 ~]# hostname -I 172.19.5.55 172.16.1.55
2、安裝XtraBackup
cd /server/tools/ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm yum localinstall percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm -y
3、db服務器模擬插入數據
create database oldboy;#創建oldboy庫 use oldboy; create table test( id int(4) not null,name char(20) not null);#在oldboy庫中創建test表 insert into test values(1,"oldboy");#test表中插入數據 insert into test values(2,"oldgirl"); insert into test values(3,"inca"); insert into test values(4,"zuma"); insert into test values(5,"kaka"); insert into test values(6,"老男孩");
查看test表中內容
mysql> select * from test; +----+-----------+ | id | name | +----+-----------+ | 1 | oldboy | | 2 | oldgirl | | 3 | inca | | 4 | zuma | | 5 | kaka | | 6 | 老男孩 | +----+-----------+ 6 rows in set (0.00 sec)
4、備份數據
①db操作
mkdir /backup -p && cd /backup innobackupex --defaults-file="/etc/my.cnf" --user=root --password=‘123456‘ --socket=/application/mysql/tmp/mysql.sock /backup/ #備份完成會出現如下內容 …… xtrabackup: Transaction log of lsn (1642766) to (1642766) was copied. 180109 11:40:30 completed OK!
②查看備份的內容
[root@db backup]# ll /backup/2018-01-09_11-57-49/ total 131104 -rw-r----- 1 root root 418 2018-01-09 11:57 backup-my.cnf -rw-r----- 1 root root 12582912 2018-01-09 12:01 ibdata1 -rw-r----- 1 root root 50331648 2018-01-09 12:01 ib_logfile0 -rw-r----- 1 root root 50331648 2018-01-09 12:01 ib_logfile1 -rw-r----- 1 root root 12582912 2018-01-09 12:01 ibtmp1 drwxr-x--- 2 root root 4096 2018-01-09 11:57 mysql drwxr-x--- 2 root root 4096 2018-01-09 11:57 oldboy drwxr-x--- 2 root root 4096 2018-01-09 11:57 performance_schema -rw-r----- 1 root root 22 2018-01-09 11:57 xtrabackup_binlog_info -rw-r--r-- 1 root root 22 2018-01-09 12:01 xtrabackup_binlog_pos_innodb -rw-r----- 1 root root 113 2018-01-09 12:01 xtrabackup_checkpoints -rw-r----- 1 root root 536 2018-01-09 11:57 xtrabackup_info -rw-r----- 1 root root 8388608 2018-01-09 12:01 xtrabackup_logfile
③預處理數據
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=‘123456‘ --socket=/application/mysql/tmp/mysql.sock --apply-log --use-memory=1G /backup/2018-01-09_11-57-49/
④模擬刪除oldboy庫,恢復全備
drop database oldboy;
⑤為了保持數據一致性,停庫恢復
[root@db ~]# /etc/init.d/mysqld stop Shutting down MySQL.. SUCCESS! rm -fr /application/mysql/data/* innobackupex --defaults-file="/etc/my.cnf" --user=root --password=‘123456‘ --socket=/application/mysql/tmp/mysql.sock --move-back /backup/2018-01-09_11-57-49/
⑥恢復全備成功後,重新授權數據目錄,啟動MySQL
chown -R mysql.mysql /application/mysql/data/ [root@db mysql]# /etc/init.d/mysqld start Starting MySQL.. SUCCESS! #登錄數據庫查看恢復的數據 mysql> select * from oldboy.test; +----+-----------+ | id | name | +----+-----------+ | 1 | oldboy | | 2 | oldgirl | | 3 | inca | | 4 | zuma | | 5 | kaka | | 6 | 老男孩 | +----+-----------+ 6 rows in set (0.00 sec)
三、主從復制部署
②從庫預處理
授權從庫連接用戶
grant replication slave on *.* to ‘rep‘@‘172.19.5.%‘ identified by ‘123456‘;
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=‘123456‘ --socket=/application/mysql/tmp/mysql.sock --apply-log --use-memory=1G /backup/2018-01-09_10-33-44/
③關閉從庫,復制數據
linux運維、架構之路-xtrabackup