xtrabackup安裝部署配置 備份恢復
[[email protected] ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
[[email protected] ~]# yum list | grep percona
[[email protected] ~]# yum install percona-xtrabackup-24 -y # 解除安裝命令:yum remove percona-xtrabackup
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[[email protected] ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/tarball/percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz
[[email protected] ~]# tar xf percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz -C /usr/local/
[[email protected] ~]# mv /usr/local/percona-xtrabackup-2.4.8-Linux-x86_64/ /usr/local/xtrabackup
[[email protected] local]# echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
[[email protected] local]# source /etc/profile
[[email protected] ~]# yum install numactl -y #安裝依賴
----全量備份
備份資料存放在/data/backup/下面,innobackupex會自動建立一個資料夾+當前系統的時間戳
建立測試資料庫,表
mysql> create database test;
mysql> use test;
mysql> create table t1;
mysql> create table t1(id int auto_increment primary key);
mysql> insert into t1 values(null);
mysql> insert into t1 values(null);
mysql> insert into t1 values(null);
資料庫備份
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --socket=/var/lib/mysql/mysql.sock /data/backup/full
full日期下的檔案各檔案說明:
(1) backup-my.cnf —— 備份命令用到的配置選項資訊;
(2) ibdata1 —— 備份的表空間檔案;
(3) xtrabackup_binary —— 備份中用到的xtrabackup的可執行檔案;
(4) xtrabackup_binlog_info —— mysql伺服器當前正在使用的二進位制日誌檔案及至備份這一刻為止二進位制日誌事件的位置;
(5) xtrabackup_checkpoints —— 備份型別(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(日誌序列號)範圍資訊;
6) xtrabackup_logfile —— 備份的重做日誌檔案。
二、資料庫恢復
1、測試
關閉資料庫,更改datadir目錄
[[email protected] ~]$ service mysql stop
Shutting down MySQL (Percona Server)...[ OK ]
rm: cannot remove `/var/lock/subsys/mysql': Permission denied
[[email protected] ~]# mv /var/lib/mysql /var/lib/mysql.bak
[[email protected] ~]# cd /var/lib/mysql.bak
[[email protected] mysql.bak]# ls
auto.cnf ibdata2 ib_logfile1 mysql prod RPM_UPGRADE_HISTORY test
ibdata1 ib_logfile0 ib_logfile101 performance_schema rh64.pid RPM_UPGRADE_MARKER-LAST
建立新的datadir:
[[email protected] mysql.bak]# mkdir /var/lib/mysql
資料庫恢復:備註xx--xx是備份的日期,恢復目錄一定為空
[[email protected] backup]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/full/xx--xx--xx
......
151028 14:35:22 [01] Copying ./performance_schema/events_waits_history.frm to /data/mysql/backup/full/performance_schema/events_waits_history.frm
151028 14:35:22 [01] ...done
151028 14:35:22 [01] Copying ./performance_schema/host_cache.frm to /data/mysql/backup/full/performance_schema/host_cache.frm
151028 14:35:22 [01] ...done
151028 14:35:22 [01] Copying ./performance
......
151028 14:41:53 [01] ...done
151028 14:41:53 [01] Copying ./performance_schema/events_stages_history_long.frm to /var/lib/mysql/performance_schema/events_stages_history_long.frm
151028 14:41:53 [01] ...done
151028 14:41:53 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info
151028 14:41:53 [01] ...done
151028 14:41:54 completed OK!
修改資料資料夾許可權
chown -R mysql.mysql /var/lib/mysql
chmod 755 -R /var/lib/mysql
systemctl start mysqld
問題一這時候我是遠端登入阿里雲的,mysql -u root -p輸入正確的密碼也可能登入不進報錯28000
解決方法用mysql無密碼進入或者初始mysql -u -root 不用密碼直接登入
登入後,兩行密碼設定再設定一下密碼會報錯已經設定,沒關係不用理會,退出重新就可以密碼登入了
set password for 'root'@'localhost' =password('123456');
set password for 'root'@'%' =password('123456');
第二行因為我是遠端連線阿里雲伺服器的建立遠端使用者名稱如下:
--------------------------------------------------------------------------------------------------------------------
【把在所有資料庫的所有表的所有許可權賦值給位於所有IP地址的root使用者。
mysql> grant all privileges on *.* to [email protected]'%'identified by 'password';
如果是新使用者而不是root,則要先新建使用者
mysql>create user 'username'@'%' identified by 'password';
mysql>flush privileges;更新MySQL資料】
-----------------------------------------------------------------------------------------------------------------------------------
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --use-memory=4G --apply-log /data/2017-08-05_11-44-06/ #第1步是apply-log,為了加快速度,一般建議設定--use-memory,這個步驟完成之後,目錄就準備就緒
170805 16:49:32 completed OK! #成功
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/2017-08-05_11-33-06/ #第2步是copy-back,即把備份檔案拷貝至原資料目錄下。注意:innobackupex 增量備份僅針對InnoDB這類支援事務的引擎,對於MyISAM等引擎,則仍然是全備
170805 16:49:32 completed OK! #成功
增量備份
在進行增量備份時,首先要進行一次全量備份,第一次增量備份是基於全備的,之後的增量備份是基於上一次的增量備份,以此類推。
全備份放在/data/backup/full,增量備份放在/data/backup/incremental
先來全量備份
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock /data/backup/full
為了測試效果,我們在t1表中插入資料
mysql> insert into t1 values(null);
再來增量備份
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/full/2017-08-05_11-59-39/ --parallel=2
我們看看增量備份的大小以及檔案內容
在test種建立t2,並插入資料然後建立增量備份2
mysql> use test;
mysql> create table t2(name varchar(20));
mysql> insert into t2 values('will');
mysql> insert into t2 values('tom');
mysql> insert into t2 values('jim');
建立增量備份2(這次是基於上次的增量備份)
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/incremental/2017-08-05_12-13-27/ --parallel=2
增量備份恢復
增量備份的恢復大體為3個步驟
*恢復完全備份
*恢復增量備份到完全備份(開始恢復的增量備份要新增--redo-only引數,到最後一次增量備份去掉--redo-only引數)
*對整體的完全備份進行恢復,回滾那些未提交的資料
恢復完全備份(注意這裡一定要加--redo-only引數,該引數的意思是隻應用xtrabackup日誌中已提交的事務資料,不回滾還未提交的資料)
[[email protected] ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39
將增量備份1應用到完全備份
[[email protected] ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-04-59
將增量備份2應用到完全備份(注意恢復最後一個增量備份時需要去掉--redo-only引數,回滾xtrabackup日誌中那些還未提交的資料)
[[email protected] ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-13-27
把所有合在一起的完全備份整體進行一次apply操作,回滾未提交的資料:
[[email protected] ~]# innobackupex --apply-log /data/backup/full/2014-04-07_23-37-20/
把恢復完的備份複製到資料庫目錄檔案中,賦權,然後啟動mysql資料庫,檢測資料正確性
[[email protected] ~]# systemctl start mysqld
[[email protected] ~]# mv /var/lib/mysql /var/lib/mysql.bak
[[email protected] ~]# mkdir /var/lib/mysql
[[email protected] ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/full/2017-08-05_11-59-39/
chown -R mysql.mysql /var/lib/mysql
chmod 755 -R /var/lib/mysql
systemctl start mysqld