linux数据库都备份什么,Linux运维学习之数据库备份与恢复
今天給大家?guī)淼氖顷P(guān)于數(shù)據(jù)庫備份與恢復(fù)的教程,當(dāng)我們手賤或者不知道什么原因?qū)е聰?shù)據(jù)庫的崩潰,甚至刪除數(shù)據(jù)庫時怎么辦,總不能跑路吧?所以我們做好日常的備份和相關(guān)的災(zāi)后重建很有必要。
那么備份都有什么方式,方法呢?一,文件備份,就是很笨的把所有的文件的都一一拷貝到我們準備好的各種存儲設(shè)備上,但是此種方法缺乏時效性,需要冷備,就是把服務(wù)停掉,慢慢拷,而且只能作用與少量數(shù)據(jù)備份,太多的話裝不下,功能性賊弱,二,邏輯備份,重數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)而另進行的備份,優(yōu)點是編輯器簡單,恢復(fù)簡單,缺點是備份是數(shù)據(jù)較大時,備份較慢,所以我們推出了完全備份和差異備份還有增量備份,完全備份顧名思義就是把數(shù)據(jù)庫完全備份下來,不過我們可以把它和差異備份和增量備份相結(jié)合,差異備份就是備份的數(shù)據(jù)是上一次全備份之后新增加的和修改過的數(shù)據(jù),增量備份就是備份的數(shù)據(jù)是上一次備份后增加的和修改過的數(shù)據(jù),有的小伙伴就蒙圈了,這是什么鬼?那么給你一張圖就能很好的體現(xiàn)出三種方式備份的區(qū)別。
總的來說我們的完全備份和增量備份,是和樓梯結(jié)構(gòu)差不多,一級一級的去備份,當(dāng)我們恢復(fù)的時候,當(dāng)然也是一級一級的去恢復(fù),而差異備份則不然,它和完全備份結(jié)合時,是相對于全備份而言的,當(dāng)有一天數(shù)據(jù)丟失時,直接使用全備份和前一天的備份就能很快找到我們的數(shù)據(jù)。
今天我們就先來實驗一下完全備份+增量備份。
完全備份我們使用的是mysqldump工具,增量備份我們使用的是二進制日志方式實現(xiàn),那么具體怎么操作呢?
實驗環(huán)境:centos7虛擬機一臺,安裝完成mysql
第一步:準備備份目錄,更改所屬人,所屬組
mkdir /backup
chown mysql:mysql /backup/
第二步:準備備份數(shù)據(jù)庫及表
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:全部的數(shù)據(jù)庫
# --lock-all-tables:鎖全部表(為了保持數(shù)據(jù)一致性)
# --flush-log:刷新二進制文件從內(nèi)存寫入硬盤
# --master-data=2:導(dǎo)出的語句chage master to被注釋
第四步:向表中插入數(shù)據(jù)
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/*!*/;結(jié)尾的一段,上面有end_log_pos NUM2。
第六步:繼續(xù)插入數(shù)據(jù),在沒有備份的情況下刪除數(shù)據(jù)庫,模擬誤操作
mysql
use qiangge;
insert into zao values (06,'mile fly'),(07,'usaf');
drop database qiangge;
第七步:數(shù)據(jù)恢復(fù),由于最后我們沒有備份就刪除了數(shù)據(jù)庫,所以我們首先需要保護最后的二進制日志,查看刪除操作之前的position值:mysqlbinlog 二進制文件。
第八步:將最后操作的二進制日志備份
mysqlbinlog --start-position=NUM3 --stop-position=NMU4 二進制日志 >/backup/`date +%F-%T`-bl2.sql
第九步:導(dǎo)入之前備份的數(shù)據(jù)庫
mysql
mysql
mysql
第十步:查看數(shù)據(jù)庫的恢復(fù)
mysql
select * from qiangge.zao;
完成。我們可以查看到我們成功的完成了數(shù)據(jù)庫的恢復(fù)。
然后,我們第二個實驗的方法是基于一個小工具xtrabackup,它有更簡單的命令和備份速度快,還原快,備份可靠,節(jié)省磁盤的等等一大堆優(yōu)點,還可以自動實現(xiàn)備份檢驗。
首先,我們先要安裝一個包,yum源就可以
yum install?percona-xtrabackup
然后新建一個目錄專門存儲備份數(shù)據(jù)
mkdir /backup
1 完全備份
innobackupex --user=root /backup/
2 添加數(shù)據(jù)
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 刪除數(shù)據(jù)庫
mysql
drop database qiangge;
5 數(shù)據(jù)恢復(fù)前準備
為什么要準備呢?因為因為備份的數(shù)據(jù)中可能會包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時數(shù)據(jù)文件仍處理不一致狀態(tài),所以已提交的事務(wù)要重放,合并到完全備份上,沒提交事務(wù)的要回滾.
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
#一定要用絕對路徑,此處為坑,筆者當(dāng)時切到該目錄下,可以補全,以為可以使用相對路徑,結(jié)果排了半下午的錯
6 恢復(fù)階段,數(shù)據(jù)恢復(fù)
innobackupex --copy-back /backup/2017-11-16_23-55-11
此時它會提醒我們/var/lib/mysql是非空的,這是為什么呢?因為該目錄下的是數(shù)據(jù)庫數(shù)據(jù),它會直接把所有的數(shù)據(jù)恢復(fù)到該目錄,我們直接刪除此目錄。
rm -rf /var/lib/mysql/*
再次執(zhí)行該命令,發(fā)現(xiàn)還有問題,我們更改一下目錄的所有人,所屬組
chown -R mysql.mysql /var/lib/mysql
systemctl restart mysql
然后成功,進入瞅一眼,數(shù)據(jù)庫完全ok的啦!
最后我們要再來一個lvm2快照和binlog的結(jié)合,就是邏輯卷快照和二進制日志結(jié)合使用的數(shù)據(jù)備份和恢復(fù)。
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配置文件,使得數(shù)據(jù)文件在邏輯卷上 datadir=/lvm_data
8 重啟mariadb服務(wù)
9 創(chuàng)建數(shù)據(jù)庫,進行操作
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 創(chuàng)建快照卷
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 刪除數(shù)據(jù)庫
rm -rf /lvm_data/*
18 解壓恢復(fù)數(shù)據(jù)庫
tar -xvf?/tmp/mysqlback.tar ./
19 驗證數(shù)據(jù)是否恢復(fù)
上面的三種方式可以應(yīng)付日常管理備份恢復(fù)了,那么具體他們的區(qū)別是什么呢?筆者總結(jié)了一下
總結(jié)
以上是生活随笔為你收集整理的linux数据库都备份什么,Linux运维学习之数据库备份与恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 远程控制权限,总结一下lin
- 下一篇: linux下java调用matlab程序