linux数据库都备份什么,Linux运维学习之数据库备份与恢复
今天給大家帶來的是關于數據庫備份與恢復的教程,當我們手賤或者不知道什么原因導致數據庫的崩潰,甚至刪除數據庫時怎么辦,總不能跑路吧?所以我們做好日常的備份和相關的災后重建很有必要。
那么備份都有什么方式,方法呢?一,文件備份,就是很笨的把所有的文件的都一一拷貝到我們準備好的各種存儲設備上,但是此種方法缺乏時效性,需要冷備,就是把服務停掉,慢慢拷,而且只能作用與少量數據備份,太多的話裝不下,功能性賊弱,二,邏輯備份,重數據庫中導出數據而另進行的備份,優點是編輯器簡單,恢復簡單,缺點是備份是數據較大時,備份較慢,所以我們推出了完全備份和差異備份還有增量備份,完全備份顧名思義就是把數據庫完全備份下來,不過我們可以把它和差異備份和增量備份相結合,差異備份就是備份的數據是上一次全備份之后新增加的和修改過的數據,增量備份就是備份的數據是上一次備份后增加的和修改過的數據,有的小伙伴就蒙圈了,這是什么鬼?那么給你一張圖就能很好的體現出三種方式備份的區別。
總的來說我們的完全備份和增量備份,是和樓梯結構差不多,一級一級的去備份,當我們恢復的時候,當然也是一級一級的去恢復,而差異備份則不然,它和完全備份結合時,是相對于全備份而言的,當有一天數據丟失時,直接使用全備份和前一天的備份就能很快找到我們的數據。
今天我們就先來實驗一下完全備份+增量備份。
完全備份我們使用的是mysqldump工具,增量備份我們使用的是二進制日志方式實現,那么具體怎么操作呢?
實驗環境:centos7虛擬機一臺,安裝完成mysql
第一步:準備備份目錄,更改所屬人,所屬組
mkdir /backup
chown mysql:mysql /backup/
第二步:準備備份數據庫及表
mysql
create database qiangge;
use qiangge;
create tabel zao(id int not null,name char(20));
第三步:進行完整備份
mysqldump --all-databases --lock-all-tables --flush-log --master-data=2 >/backup/`date +%F-%T`-all.sql
# --all-databases:全部的數據庫
# --lock-all-tables:鎖全部表(為了保持數據一致性)
# --flush-log:刷新二進制文件從內存寫入硬盤
# --master-data=2:導出的語句chage master to被注釋
第四步:向表中插入數據
mysql
use qiangge;
insert into zao values (01,'jerry'),(02,'tom'),(03,'dog'),(04,'cat');
第五步:進行增量備份,備份稱二進制日志
vim /etc/my.cnf
[mysqld]
log-bin=bl
systemctl restart mariadb
mysqlbinlog --start-position=NUM1 --stop-position=NUM2 /var/lib/mysql/bl.000002 > /backup/`date +%F-%T`-bl.sql
#NMU1,NUM2都是查看bl.000002,具體的方法是mysqlbinlog bl.000002,如果bl.000002沒有,那就找一下bl.000001,at NUM1開頭,中間夾著SQL語句,COMMIT/*!*/;結尾的一段,上面有end_log_pos NUM2。
第六步:繼續插入數據,在沒有備份的情況下刪除數據庫,模擬誤操作
mysql
use qiangge;
insert into zao values (06,'mile fly'),(07,'usaf');
drop database qiangge;
第七步:數據恢復,由于最后我們沒有備份就刪除了數據庫,所以我們首先需要保護最后的二進制日志,查看刪除操作之前的position值:mysqlbinlog 二進制文件。
第八步:將最后操作的二進制日志備份
mysqlbinlog --start-position=NUM3 --stop-position=NMU4 二進制日志 >/backup/`date +%F-%T`-bl2.sql
第九步:導入之前備份的數據庫
mysql
mysql
mysql
第十步:查看數據庫的恢復
mysql
select * from qiangge.zao;
完成。我們可以查看到我們成功的完成了數據庫的恢復。
然后,我們第二個實驗的方法是基于一個小工具xtrabackup,它有更簡單的命令和備份速度快,還原快,備份可靠,節省磁盤的等等一大堆優點,還可以自動實現備份檢驗。
首先,我們先要安裝一個包,yum源就可以
yum install?percona-xtrabackup
然后新建一個目錄專門存儲備份數據
mkdir /backup
1 完全備份
innobackupex --user=root /backup/
2 添加數據
mysql
create database qiangge;
use qiangge;
create table six(id int,name char(20));
insert into six values (1,'haha'),(2,'hehe');
3 增量備份
innobackupex --incremental /backup/ --incremental-basedir=/backup/2017-11-16_23-55-11/
4 刪除數據庫
mysql
drop database qiangge;
5 數據恢復前準備
為什么要準備呢?因為因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態,所以已提交的事務要重放,合并到完全備份上,沒提交事務的要回滾.
innobackupex --apply-log --redo-only /backup/2017-11-16_23-55-11
innobackupex --apply-log --redo-only /backup/2017-11-16_23-55-11 --incremental-dir=/backup/2017-11-16_23-57-12
#一定要用絕對路徑,此處為坑,筆者當時切到該目錄下,可以補全,以為可以使用相對路徑,結果排了半下午的錯
6 恢復階段,數據恢復
innobackupex --copy-back /backup/2017-11-16_23-55-11
此時它會提醒我們/var/lib/mysql是非空的,這是為什么呢?因為該目錄下的是數據庫數據,它會直接把所有的數據恢復到該目錄,我們直接刪除此目錄。
rm -rf /var/lib/mysql/*
再次執行該命令,發現還有問題,我們更改一下目錄的所有人,所屬組
chown -R mysql.mysql /var/lib/mysql
systemctl restart mysql
然后成功,進入瞅一眼,數據庫完全ok的啦!
最后我們要再來一個lvm2快照和binlog的結合,就是邏輯卷快照和二進制日志結合使用的數據備份和恢復。
1 首先添加一塊硬盤,作為邏輯卷
2 添加物理卷
pvcreate /dev/sdb1
3 添加卷組
vgcreate myvg /dev/sdb1
4 添加邏輯卷
lvcreate -n mydata -L 5G myvg
5 格式化邏輯卷
mkfs.ext4 /dev/mapper/myvg-mydata
6 掛載邏輯卷
mount /dev/mapper/myvg-mydata /lvm_data
7 修改mysql配置文件,使得數據文件在邏輯卷上 datadir=/lvm_data
8 重啟mariadb服務
9 創建數據庫,進行操作
mysql
create database qiangge;
use qiangge;
create table six(id int,name char(20));
insert into six values (1,'six'),(2,'sixsix');
10 鎖定表
mysql
flush tables read lock;
11 創建快照卷
lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvgmydata
12 解鎖所有表
mysql
unlock tables;
13 掛載快照卷
mount /dev/myvg/mydata-snap /lvm_snap/
14 打包物理備份
tar cvf /tmp/mysqlback.tar ./*
15 卸載snap
umount /lvm_snap/
16 刪除snap
lvremove myvg mydata-snap
17 刪除數據庫
rm -rf /lvm_data/*
18 解壓恢復數據庫
tar -xvf?/tmp/mysqlback.tar ./
19 驗證數據是否恢復
上面的三種方式可以應付日常管理備份恢復了,那么具體他們的區別是什么呢?筆者總結了一下
總結
以上是生活随笔為你收集整理的linux数据库都备份什么,Linux运维学习之数据库备份与恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 远程控制权限,总结一下lin
- 下一篇: linux下java调用matlab程序