########################################################################################
增量備份與增量恢復
王益ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
一、啟用binlog日志實現(xiàn)增量備份
1、binlog日志介紹:
又被稱為二進制日志,是MySQL數(shù)據(jù)庫服務日志文件的一種。
好處:
記錄 除查詢以外的所有SQL命令
可用于數(shù)據(jù)恢復
配置mysql主從同步的必要條件
############################################################
2、啟用binlog日志
#vim /etc/my.cnf
[mysql]
server_id=id號 //數(shù)值范圍1-255,不能重復
log-bin[=dir/name]
//日志存放默認位置為/var/lib/mysql/,如果需要自己指定日志文件的名稱以及存放位置,需要寫成中括號內的格式。
注意:自己指定存放的位置的目錄需要修改文件屬主及屬組。chown -R mysql:mysql 存放路徑。
binlog_format="mixed" //日志格式
#systemctl restart mysqld
#ls /var/lib/mysql/
主機名-bin.000001 //默認的binlog日志文件名
主機名-bin.index //記錄當前已有的binlog日志文件名
日志格式:
statement:每一條修改數(shù)據(jù)的命令都會記錄在binlog日志中。
row:不記錄sql命令的上下文信息,僅保存哪條記錄被修改。
mixed:前兩種的綜合。
#############################################################
3、查看binlog日志:
#mysqlbinlog binlog日志文件名
#############################################################
4、binlog日志文件記錄sql命令的方式:
時間點 //根據(jù)修改的時間記錄
pos點 //根據(jù)數(shù)據(jù)偏移量記錄
#############################################################
5、恢復數(shù)據(jù)
格式:
mysqlbinlog 選項 binlog日志文件名 | mysql -uroot -p密碼
選項:
--》根據(jù)時間點恢復
--start-datatime="yyyy-mm-dd hh:mm:ss" --stop-datatime="yyyy-mm-dd hh:mm:ss"
--》根據(jù)偏移量恢復 --start-position=數(shù)字 --stop-position=數(shù)字
##############################################################
6、生成日志與刪除日志
--》生成日志
mysql> flush logs;
#mysql -uroot -p123456 -e "flush logs"
#systemctl restart mysqld
--》刪除日志
mysql>reset master; //刪除所有
mysql>purge master logsto "日志文件名" //刪除指定日志之前的所有日志
mysql>purge master logs to "mysql11-bin.000003" //1和2 已經刪除,但是3以后的保留
##################################################################
7、舉例
啟用binlog日志
重啟服務
寫入數(shù)據(jù)
#mysql -uroot -p123456
show master status; //查看當前使用的binlog日志
create database db1;
create table db1.t1(id int);
insert into table db1 values(100);
insert into table db1 values(200);
select * from db1.t1; //查看數(shù)據(jù)是否插入成功
刪除數(shù)據(jù)
drop databases db1;
查看日志
mysqlbinlog /var/lib/mysql/mysql11-bin.000001
//通過查詢日志,create database db1; 建表的偏移量at 296
//insert into table db1 values(200); 插入這條記錄的偏移量 at 1097
恢復數(shù)據(jù)(通過偏移量)
mysql>show databases; //確認庫已經刪除
mysql>quit
#mysqlbinlog --start-position=296 --stop-position=1097 \
/var/lib/mysql/mysql11-bin.000001 | mysql -uroot -p123456
查看結果
mysql>show databases;
mysql>select * from db1.t1;
###################################################################
二、使用第三方軟件percona提供的命令innobackupex做增量備份
物理備份缺點:
備份時間長,冗余備份,浪費村數(shù)空間
跨平臺性差
mysqldump備份缺點:
效率低,備份和還原時間慢
備份過程中,數(shù)據(jù)插入與更新會被掛起
percona優(yōu)點:
備份過程不鎖表,適合生產環(huán)境
支持InnoDB/XtraDB
以Perl腳本封裝Xtrabackup還支持MyISAM
##########################################################
1、安裝軟件包(網上下載)
libev-4.15-1.el6.rf.x86_64.rpm
percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
###########################################################
2、innobackupex基本選項
--host //主機名
--user //用戶名
--password //登陸密碼
--databases //數(shù)據(jù)庫名
--no-timestamp //備份文件不用日期命名
--apply-log //回滾日志(準備還原)
--redo-only //日志回滾合并(最后一次的回滾合并不需要添加此選項)
--incremental 目錄名 //增量備份
--incremental-basedir=目錄名 //增量備份時指定上一次備份數(shù)據(jù)村存儲的文件名
--export //導出表信息
import //導入表空間
##############################################################
3、完全備份
#innobackupex --user root --password 123456 --databases="系統(tǒng)庫 存儲庫" 備份目錄名 --no-timestamp
#rm -rf /var/lib/mysql
#mkdir /var/lib/mysql
完全恢復數(shù)據(jù)
#innobackup --user root --password 123456 --databases="系統(tǒng)庫 存儲庫" --apply-log 備份目錄名
//回滾日志
#innobackupex --user root --password 123456 --databases="系統(tǒng)庫列表 存儲數(shù)據(jù)庫" --copy-back 備份目錄名
//恢復數(shù)據(jù)
#ls /var/lib/mysql/
#chown -R mysql:mysql /var/lib/mysql
#systemctl stop mysqld
#systemctl start mysqld
#mysql -uroot -pabc123
mysql>show databases;
###############################################################
4、增量備份
增量備份之前,通常先作一次完全備份
增量備份第一次:
#innobackupex --user root --password 123456 --databases="系統(tǒng)庫列表 存儲數(shù)據(jù)庫" --incremental 目錄名1 --incremental-basedir=完全備份名 --no-timestamp
增量備份第二次:
#innobackupex --user root --password 123456 --databases="系統(tǒng)庫列表 存儲數(shù)據(jù)庫" --incremental 目錄名2 --incremental-basedir=目錄名1 --no-timestamp
//相當于你的下一次備份,參照的時上一次的備份文件。
5、刪除信息
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
6、增量恢復日志文件
#innobackupex --user root --password 123456 --databases=“系統(tǒng)庫 存儲庫” --apply-log --redo-only 完全備份目錄名
#innobackupex --user root --password 123456 --databases=“系統(tǒng)庫 存儲庫” --apply-log --redo-only 完全備份目錄名
--incremental-dir=目錄名1
#innobackupex --user root --password 123456 --databases=“系統(tǒng)庫 存儲庫” --apply-log --redo-only 完全備份目錄名
--incremental-dir=目錄名2
#cat 備份目錄/xtraback_checkpositions //文件可以查看日志序列號
7、恢復數(shù)據(jù)
#innobackupex --user root --password abc123 --databases="系統(tǒng)庫列表 存儲數(shù)據(jù)庫" --copy-back 完全備份目錄名
#chown -R mysql:mysql /var/lib/mysql
8、重啟服務查看
#systemctl stop mysqld
#systemctl start mysqld
###############################################################################
9、增量舉例
/allbak //自定義完全備份的目錄名
/new1 //自定義第一次增量備份目錄名
/new2 //自定義第二次增量備份目錄名
//無需自己創(chuàng)建
完全備份
#innobackupex --user root --password 123456 --databases="系統(tǒng)庫列表 gamedb" /allbak
--no-timestamp
增量第一次:
mysql>create table gamedb.t2(id int);
mysql>insert into gamedb.t2 values(200);
#innobackupex --user root --password 123456 --databases="系統(tǒng)庫列表 gamedb" --incremental /new1 --incremental-basedir=/allbak --no-timestamp
增量第二次:
mysql>create table gamedb.t3(id int);
mysql>insert into gamedb.t3 values(300);
#innobackupex --user root --password 123456 --databases="系統(tǒng)庫 gamedb" --incremental /new2
--incremental-basedir=/new1 --no-timestamp
刪除數(shù)據(jù)
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
恢復日志文件
#innobackupex --user root --password abc123 --databases="系統(tǒng)庫列表 gamedb" --apply-log --redo-only
/allbak
//回滾日志
#cat /allbak/xtraback_checkpositions //文件可以查看日志序列號
#innobackupex --user root --password abc123 --databases="系統(tǒng)庫列表 gamedb" --apply-log --redo-only
/allbak --incremental-dir=/new1
//增量回滾/new1
#cat /new1/xtraback_checkpositions //文件可以查看日志序列號
#cat /allbak/xtraback_checkpositions //文件可以查看日志序列號
//對比可以發(fā)現(xiàn),回滾成功,它們的序列號是首尾相接的
#innobackupex --user root --password abc123 --databases="系統(tǒng)庫列表 gamedb" --apply-log --redo-only
/allbak --increment-dir=/new2
//增量回滾/new2
#cat /new2/xtraback_checkpositions //文件可以查看日志序列號
#cat /allbak/xtraback_checkpositions //文件可以查看日志序列號
//對比可以發(fā)現(xiàn),回滾成功,它們的序列號是首尾相接的
恢復數(shù)據(jù)
#innobackupex --user root --password abc123 --databases="系統(tǒng)庫列表 gamedb" --copy-back /allbak
查看
#systemctl stop mysqld
#systemctl start mysqld
##############################################################################################
10、恢復單個表:
10.1 備份庫
#innobackup --user root --password 123456 --databases="gamedb" /gamedbbak
10.2 刪除單個表
mysql> drop table gamedb.t1;
10.3 按照原表結構創(chuàng)建表
mysql> create table gamedb.t1(id int);
10.4 導出表信息
#innobackup --user root --password abc123 --databases=“gamedb.t1” --apply-log --export /gamedbbak
10.5 刪除表空間
mysql>alter table gamedb.t1 discart tablespace;
10.6 將導出的表信息,拷貝到對應的數(shù)據(jù)庫目錄下
#cd /gamedbbak/gamedb
#cp t1.{exp,ibd,cfg} /var/lib/mysql/gamedb/
#ls /var/lib/mysql/gamedb/t1.
#chown mysql:myql /var/lib/mysql/gamedb/t1.
10.6 導入表空間
alter table t1 import tablespace;
10.7 驗證
select * from gamedb.t1;
###########################################################################################################
4、
名稱欄目:Mysql(五)-數(shù)據(jù)恢復
當前網址:http://sd-ha.com/article28/jgipjp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站維護、定制網站、網站建設、全網營銷推廣、企業(yè)建站、微信小程序
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)