MySQL的增量備份與恢復
-
增量備份:只備份那些在上次完全備份或者增量備份後被修改的文件才會被備份。
-
優點:沒有重復數據,備份量不大,時間短。
- 缺點:需要上一次完全備份及完全備份之後所有的增量備份才能恢復,而且對所有增量備份進行逐個反推恢復,操作較為繁瑣。
一、增量備份
1、編輯MySQL配置文件,開啟二進制功能
vim /etc/my.cnf
log-bin=mysql-bing #添加二進制日誌文件
systemctl restart mysql.service
- 服務重啟之後會在/use/local/mysql/data目錄下生成一個空的二進制日誌文件;
2、創建以基本數據庫
mysql -u root -p #進入MySQL
create database client; #創建一個名為client的庫
use client; #使用數據庫
create table info (name varchar(10),score decimal(5.2)); #創建表
insert into info (name,score) values (‘zhangsan‘,88); #插入內容
insert into info (name,score) values (‘lisi‘,88);
quit #退出MySQL
3、備份數據庫,並生成新的二進制日誌文件;
mysqldump -u root -p client test > /opt/client.sql
mysqladmin -u root -p flush-logs
- 數據庫中的內容會生成到第一個二進制日誌文件中,除此之外還會生成一個空的二進制日誌文件;
4、在數據庫中添加新的內容,並生成新的二進制日誌文件;
mysql -u root -p
use client
insert into info (name,score) values (‘test01‘,88);
quit #退出MySQL
mysqladmin -u root -p flush-logs
- 數據庫中新添加的內容會生成到第二個二進制日誌文件,同時生成一個空的二進制日誌文件;
二、恢復
1、刪除表,並進行完全備份恢復操作;
mysql -u root -p ;
use client;
drop tables test;
quit;
mysql -u root -p client < /opt/client.sql
2、使用二進制日誌文件進行恢復操作;
mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p
三、基於時間點與位置的恢復
1、插入兩條數據內容,並刪除一條數據,模擬操作失誤;
mysql -u root -p
use client
insert into info (name,score) values (‘test01‘,88);
delete from test where name=‘lisi‘;
insert into info (name,score) values (‘test02‘,88);
quit
2、生成二進制日誌文件,刪除表,並進行完全備份恢復操作;
mysqladmin -u root -p flush-logs
mysql -u root -p ;
use client;
drop tables test;
quit
mysql -u root -p client < /opt/client.sql
3、按時間點進行恢復(跳過誤操作時間);
mysqlbinlog --no-defaults --stop-datetime=‘18-07-06 10:39:23‘ /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p
mysqlbinlog --no-defaults--start-datetime=‘18-07-06 10:39:33‘ /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p
4、按位置進行恢復(跳過錯誤的位置);
mysqlbinlog --no-defaults --stop-position=‘1151‘ /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p
mysqlbinlog --no-defaults--start-position=‘1226‘ /usr/local/mysql/data/mysql-bin.000003 | mysql -u root -p
MySQL的增量備份與恢復