數據庫基礎之05(第三方軟件percona之innobackupex完全備份和增量備份及恢復)

目錄

1、安裝軟件 :yum  -y  install  perl-DBD-mysql   perl-Digest-MD5 --------依賴包

2、完全備份和恢復

3、增量備份

4、在生產中我們使用腳本實現

5、使用innobackupex完全備份文件恢復單個表


XtraBackup工具,是一款強大的支持在線熱備份的工具,備份過程中不鎖庫表,非常適合生產環境,由專業組織Percona提供。

它主要包含兩個組件:

------xtrabackup: C 程序,支持innodb/xtradb

------innobackupex: 以perl腳本封裝Xtraback,還支持myisam

下面上點實戰操作:

1、安裝軟件 :yum  -y  install  perl-DBD-mysql   perl-Digest-MD5 --------依賴包

rpm -ivh  libev-4.15-1.el6.rf.x86_64.rpm ----------依賴包

rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm ------主程序包

pm  -ql  percona-xtrabackup-24 ---------列出percona程序目錄列表

man  xtrabackup -------------查詢相關man幫助

man  innobackupex -------查詢相關man幫助

2、完全備份和恢復

2-1、完全備份

innobackupex --user root  --password 123456  --databases="mysql  performance_schema sys gamedb "  /allbak   --no-timestamp(不新建時間目錄)                                                   備份 mysql  performance_schema sys gamedb這幾個庫

ls   /allbak  (備份目錄下既有備份的數據又有日誌文件)

cat xtrabackup_checkpoints --------查看日至序列號lsn

2-2、準備恢復數據  (回滾備份目錄下日誌信息)
]#innobackupex --user root  --password 123456    \
--databases="mysql  performance_schema sys gamedb "  \
 --apply-log /allbak   
 
]# systemctl  stop  mysqld------先將服務停下
]# rm  -rf  /var/lib/mysql/*--------再刪除主目錄
 
2-3、把備份目錄下數據庫拷貝回數據庫目錄下
]#innobackupex --user root  --password 123456    \
--databases="mysql  performance_schema sys gamedb " \
--copy-back /allbak
 
2-4、修改數據庫目錄所有者和組用戶改爲mysql
]# chown  -R  mysql:mysql /var/lib/mysql
啓動數據庫服務
]# systemctl  start   mysqld
 
2-5、登錄查看數據。
]# mysql  -uroot  -p123456
mysql> show databases;
mysql>  select  * from gamedb.a;

3、增量備份

增量備份:備份上次備份後,所有新產生的數據。
 
innobackupex  增量備份
 
3-1第1次備份 所有數據
]# innobackupex  --user  root   --password  123456    /fullbak  --no-timestamp
 
3-2、完全備份後向表裏存儲新數據
insert into  gamedb.a  values(9090),(990);
insert into  gamedb.b  values(880),(8080);
 
select  * from gamedb.a; select  * from gamedb.b;
 
3-3、對數據做增量備份
]# innobackupex  --user  root   --password  123456   --incremental  /new1dir     --incremental-basedir=/fullbak   --no-timestamp

--incremental  /new1dir -----------指定增量備份存放的位置

--incremental-basedir=/fullbak--------指定增量備份時從何處開始備份所參考的備份文件
]# ls  /new1dir
 
3-4、增量備份後繼續向表中存儲新數據
insert into  gamedb.a  values(60),(660);
insert into  gamedb.b  values(780),(7780);
select  * from gamedb.a; select  * from gamedb.b;
3-5、對數據做增量備份
]# innobackupex  --user  root   --password  123456   --incremental   /new2dir  --incremental-basedir=/new1dir  --no-timestamp
 注意這裏參考的文件是/new1dir
]# ls /new2dir---------查看lsn  日誌序列號

3-6、innobackupex  增量恢復
準備恢復數據
]# innobackupex  --user  root   --password  123456  --apply-log  --redo-only /fullbak
 
]#innobackupex  --user  root   --password  123456  --apply-log  --redo-only /fullbak  --incremental-dir=/new1dir
 
]#innobackupex  --user  root   --password  123456  --apply-log  --redo-only /fullbak  --incremental-dir=/new2dir
   注意:以上三步作完便將SQL日誌命令合併了
]# rm -rf /new1dir/
]# rm -rf /new2dir/
 
把備份目錄下的數據拷貝到數據庫目錄並修改所有者和組爲mysql
systemctl  stop  mysqld
rm  -rf /var/lib/mysql/*
]# innobackupex  --user  root   --password  123456  --copy-back  /fullbak
 
啓動數據庫服務
]# chown  -R mysql:mysql  /var/lib/mysql
]# systemctl  start mysqld
 
登錄查看數據 select  *  from  gamedb.a;

3-7、恢復後繼續存儲數據,執行增量備份
 ]# innobackupex --user root  --password 123456  --incremental  /dir1  --incremental-basedir=/fullbak --no-timestamp
 
 注意此時做增量備份時參考的備份文件繼續是/fullbak,因爲之前在作準備恢復文件時已經將SQL日誌命令合併了。


4、在生產中我們使用腳本實現

vim  /root/allbak.sh
#!/bin/bash
day=`date +%F`
innobackupex  --user  root   --password  123456    /fullbak_${day}  --no-timestamp
:wq
 
vim /root/newallbak.sh
#!/bin/bash
jt=`date  +%d`
zt=` expr  $jt  -  1 `
m=`date  +%m`
innobackupex  --user  root   --password  123456   --incremental   /new${m}_${jt}dir  --incremental-basedir=/new${m}_${zt}dir  --no-timestamp
:wq
 
chmod  +x  /root/allbak.sh
chmod  +x  /root/newallbak.sh
00  23   *   *  1    /root/allbak.sh
00  23    *   * 2-7    /root/newallbak.sh
 

5、使用innobackupex完全備份文件恢復單個表

目錄

1、安裝軟件 :yum  -y  install  perl-DBD-mysql   perl-Digest-MD5 --------依賴包

2、完全備份和恢復

3、增量備份

4、在生產中我們使用腳本實現

5、使用innobackupex完全備份文件恢復單個表


5-1、備份一個數據庫 
]#innobackupex  --user  root   --password  123456   \
--databases="gamedb"   /gamedbbak  --no-timestamp
5-2、刪除該數據庫下的一張表(模擬生產環境中誤刪) 
mysql>  drop  table  gamedb.a;
mysql>  system  ls /var/lib/mysql/gamedb/a.*
mysql>  system  ls /var/lib/mysql/gamedb/b.*
5-3、恢復單個表
create  table   gamedb.a(id int);-----參考所刪表的結構重新創建該表同樣名稱的新表
mysql>  system  ls /var/lib/mysql/gamedb/a.*
mysql>  alter  table gamedb.a  discard  tablespace;--------- 刪除表空間 a.ibd
mysql>  system  ls /var/lib/mysql/gamedb/a.*
]#innobackupex  --user  root   --password  123456 \
--apply-log --export  /gamedbbak------------  導出表信息 ,會 在/gamedbbak/gamedb/下生成a.{cfg,exp,ibd}  三個文件
]# cp /gamedbbak/gamedb/a.{cfg,exp,ibd} /var/lib/mysql/gamedb/
]# chown   mysql:mysql  /var/lib/mysql/gamedb/a.*
mysql> alter  table  gamedb.a  import  tablespace;--------導入表空間,通過cfg,exp,ibd來恢復表內容生成與備份前a.ibd一樣的a.ibd
]# rm -rf /var/lib/mysql/gamedb/a.{cfg,exp}  刪除表信息文件
MySQL> select  * from gamedb.a;

感謝您的拜讀!!!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章