數據庫的備份與恢復 mysqldump+binlog方式
實驗說明:
(1)mysqldump:邏輯備份工具,適用於所有存儲引擎,可用於溫備,能實現完全備份,部分備份;對InnoDB存儲引擎支持熱備;
binlog:二進制日誌
二進制日誌也叫作變更日誌,主要用於記錄修改數據或有可能引起數據改變的mysql語句,並且記錄了語句發生時間、執行時長、操作的數據等等。所以說通過二進制日誌可以查詢mysql數據庫中進行了哪些變化。一般大小體積上限為1G
(2)本次實驗使用備份方式:完全備份+增量備份。
(3)musqldump命令的語法格式
mysqldump [OPTIONS] database [tables]:備份單個庫,或庫指定的一個或多個表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]:備份一個或多個庫
mysqldump [OPTIONS] --all-databases [OPTIONS]:備份所有庫
其他選項
-x, --lock-all-tables:鎖定所有表
-l, --lock-tables:鎖定備份的表
--single-transaction:啟動一個大的單一事務實現備份
-C, --compress:壓縮傳輸
-E, --events:備份指定庫的事件調度器
-R, --routines:備份存儲過程和存儲函數
--triggers:備份觸發器
--master-data={0|1|2}
0:不記錄
1:記錄CHANGE MASTER TO語句;此語句未被註釋
2:記錄為註釋語句
-F,--flush-logs:鎖定表之後執行flush logs命令
1、安裝數據庫
centos6: yum install mysql
centos7: yum install mariadb
2、開啟二進制日誌
在配置文件修改
vim /etc/my.cnf
[mysqld]
log-bin=bin-log 添加改行,采用相對路徑,真實存儲路徑為/var/lib/mysql/下
3、啟動服務
systemctl start mariadb
ls /var/lib/mysql
會看到bin-log.000001 文件
每次重啟mysql服務或運行mysql> flush logs;都會生成一個新的二進制日誌文件,這些日誌文件的number會不斷地遞增。除了生成上述的文件外還會生成一個為filename.index(bin-log.index)的文件。這個文件中存儲所有二進制日誌文件的清單又稱為二進制文件的索引。
4、登入數據庫並創建需要備份的數據庫
mysql -uroot -p
(1)建立數據庫
create database mariadb
(2)建立表
use mariadb
create table table1(id int ,name char(20));
show tables;查看是否創建表成功
(3)插入數據
insert into table1 values (1,‘one‘);
insert into table1 values (2,‘two‘);
insert into table1 values (3,‘three‘);
insert into table1 values (4,‘for‘);
查看是否插入數據到表中
select * from table1
5、進行完整備份
(1)創建要備份的目錄
mkdir /backup
(2)備份
mysqldump --databases mariadb --lock-all-tables --lock-tables --flush-log --master-data=2 >/backup/`date +%F-%T`-all.sql
(3) 查看是否備份成功
ls /backup
6、向表中插入數據,進行增量備份
(1)查看 當前使用的二進制文件及所處位置
show master status;
(2)插入數據
insert into table1 values (5,five);
7、增量備份
(1)查看二進制日誌
mysqlbinlog /var/lib/mysql/bin-log.000002
選擇備份的位置
插入數據前,即完全備份的位置在245
插入數據後,位置在418
說明:整個事務一般以BEGIN開頭到COMMIT結束,註意一定要看清,很容易出錯。
(2)進行增量備份
mysqlbinlog --start-position=245 --stop-position=418 /var/lib/mysql/bin-log.000002 > /backup/`date +%F-%T`-add.sql
ls /backup
8、繼續插入數據,在沒備份的情況下刪除數據庫,模擬誤操作
inset into table1 values (6,‘six‘);
drop database mariadb;
9、不要慌張
10、備份未備份的操作
由於最後我們沒有備份就刪除了數據庫,所以我們首先需要保護最後的二進制日誌,查看刪除操作之前的position值
mysqlbinlog /var/lib/mysql/bin-log.000002
所以備份位置從結束位置在643
mysqlbinlog --start-position=445 --stop-position=643 /var/lib/mysql/bin-log.000002 > /backup/`date +%F-%T`-add.sql
一定不要備份誤刪除的位置,不然恢復後,又被刪除,就恢復不了。
11、恢復數據庫
mysql < /backup/2017-11-16-14\:24\:31-all.sql 先恢復完全備份
mysql < /backup/2017-11-16-14\:53\:33-add.sql 恢復第一個增量備份
mysql < /backup/2017-11-16-15\:13\:23-add.sql 恢復最後備份
12、登錄數據庫查看
數據恢復成功。數據位置為完全正確。
本文出自 “Linux 學習記錄” 博客,請務必保留此出處http://guanm.blog.51cto.com/13126952/1982422
數據庫的備份與恢復 mysqldump+binlog方式