目錄
一、概述
二、數(shù)據(jù)備份的重要性
三、造成數(shù)據(jù)丟失的原因
四、備份類型
1、物理與邏輯角度
1.1物理備份
1.2冷備份
1.3熱備份
1.4邏輯備份
2、數(shù)據(jù)庫(kù)備份策略角度
1.1完整備份
1.2增量備份
五、常見的備份方法
1、物理備份
2、使用專用備份工具
3、通過(guò)啟用二進(jìn)制日志增量備份
4、第三方工具備份
5、注意事項(xiàng)
六、備份
1、完整備份
1.1打包數(shù)據(jù)庫(kù)文件備份
1.2備份工具備份
2、增量備份
1.1使用完全備份時(shí),備份與恢復(fù)的時(shí)間過(guò)長(zhǎng)
1.2增量備份就是備份自上一次備份之后增加的或改變的文件內(nèi)容
1.3特點(diǎn)
1.4MySQL二進(jìn)制日志對(duì)備份的意義
1.5開啟二進(jìn)制日志備份功能
七、實(shí)驗(yàn)
一、概述
數(shù)據(jù)庫(kù)備份是指將數(shù)據(jù)庫(kù)中的數(shù)據(jù)、表格、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等信息備份到另一個(gè)地方,以數(shù)據(jù)庫(kù)丟失或損壞時(shí)進(jìn)行恢復(fù)。數(shù)據(jù)庫(kù)備份是數(shù)據(jù)庫(kù)管理中必不可少的一項(xiàng)工作,通過(guò)備份可以保護(hù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)和業(yè)務(wù)
二、數(shù)據(jù)備份的重要性
備份的主要目的是災(zāi)難恢復(fù),備份還可以測(cè)試應(yīng)用,回滾數(shù)據(jù)修改,查詢歷史數(shù)據(jù),審計(jì)等。
三、造成數(shù)據(jù)丟失的原因
程序錯(cuò)誤
人為錯(cuò)誤
運(yùn)算失敗
磁盤故障
災(zāi)難(如火災(zāi)、地震)和盜竊
四、備份類型
1、物理與邏輯角度
1.1物理備份
對(duì)數(shù)據(jù)庫(kù)操作系統(tǒng)的物理文件(如數(shù)據(jù)文件、日志文件等)的備份。
1.2冷備份
是在關(guān)閉數(shù)據(jù)庫(kù)的時(shí)候進(jìn)行的
1.3熱備份
數(shù)據(jù)庫(kù)處于運(yùn)行狀態(tài),這種備份方法依賴于數(shù)據(jù)庫(kù)的日志文件
1.4邏輯備份
對(duì)數(shù)據(jù)庫(kù)邏輯組件(如表等數(shù)據(jù)庫(kù)對(duì)象)的備份,表時(shí)為邏輯數(shù)據(jù)庫(kù)結(jié)構(gòu)(create database、create table等語(yǔ)句)和內(nèi)容(insert語(yǔ)句或分割文本文件)的信息
2、數(shù)據(jù)庫(kù)備份策略角度
1.1完整備份
完整備份指的是備份整個(gè)數(shù)據(jù)庫(kù)的所有信息,包括數(shù)據(jù)庫(kù)文件中所有的數(shù)據(jù)、表、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等。一般來(lái)說(shuō),完整備份是備份最全面、可靠的方式,但備份文件體積較大,備份時(shí)間也相對(duì)較長(zhǎng)
1.2增量備份
增量備份指的是在完整備份的基礎(chǔ)上,每隔一定時(shí)間備份新增的數(shù)據(jù)或修改的數(shù)據(jù)。這種備份方式可以節(jié)省備份時(shí)間和備份文件的空間,但需要配合特定軟件或命令進(jìn)行
五、常見的備份方法
1、物理備份
物理冷備份時(shí)需要在數(shù)據(jù)庫(kù)處于關(guān)閉狀態(tài)下,能夠較好的保證數(shù)據(jù)庫(kù)的完整性。物理冷備份以用于非核心業(yè)務(wù),這類業(yè)務(wù)都允許中斷,物理冷備份的特點(diǎn)就是速度快,恢復(fù)時(shí)也是最為簡(jiǎn)單的,通過(guò)直接打包數(shù)據(jù)庫(kù)文件夾(/usr/local/mysql/data)來(lái)實(shí)現(xiàn)備份。
2、使用專用備份工具
mysqldump
mysqlhotcopy
3、通過(guò)啟用二進(jìn)制日志增量備份
?MySQL支持增量備份,進(jìn)行增量備份時(shí)必須啟用二進(jìn)制日志。二進(jìn)制日志文件為用戶提供復(fù)制。對(duì)執(zhí)行備份點(diǎn)后進(jìn)行的數(shù)據(jù)庫(kù)更改所需的信息進(jìn)行備份。如果進(jìn)行增量備份(包含上次完全備份或增量備份以來(lái)發(fā)生的數(shù)據(jù)修改),需要刷新二進(jìn)制日志。
4、第三方工具備份
Percona XtraBackup是一個(gè)免費(fèi)的MySQL熱備份軟件,支持在線備份innodb和XtraDB,也可以支持MySQL表備份,
5、注意事項(xiàng)
定期備份,指定備份計(jì)劃,嚴(yán)格遵守
除了完全備份之外,開啟binlog日志功能很重要
使用統(tǒng)一的、容易理解的備份名稱,推薦使用庫(kù)名或者表名加上時(shí)間的命名規(guī)則
六、備份
1、完整備份
1.1打包數(shù)據(jù)庫(kù)文件備份
位置
源碼包的位置/usr/local/mysql/data/
rpm包的位置/var/lib/mysql
備份
在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表,并寫入數(shù)據(jù)
停止數(shù)據(jù)庫(kù)服務(wù)
創(chuàng)建備份目錄
按照特定格式對(duì)數(shù)據(jù)庫(kù)目錄進(jìn)行備份
tar ?czf ?mysql_all-$(date ?+%F).tar.gz ?/var/lib/mysql/*
?先關(guān)閉數(shù)據(jù)庫(kù),在備份數(shù)據(jù)。
systemctl stop mysqld.service
tar -czf mysql_ljt_$(date +%F).tar.gz /var/lib/mysql/*
還原
創(chuàng)建還原目錄
模擬元數(shù)據(jù)丟失
我們先把mysql打包成一個(gè)壓縮包,然后創(chuàng)建兩個(gè)文件夾,把mysql移動(dòng)到其中的一個(gè)文件夾,查看原來(lái)的mysql里面為0
tar -czf mysql_ljt_$(date +%F).taz /var/lib/mysql/*
mkdir /bak
mkdir /restore
mv /var/lib/mysql/* /bak
ll /var/lib/mysql
將解壓之后的數(shù)據(jù)還原值原目錄
tar xf mysql_ljt_2023-07-27.taz -C /restore/
cd /restore/
cd /var/lib/mysql/
解壓數(shù)據(jù)包到restore
MV移動(dòng)數(shù)據(jù)到mysql重啟一下mysql登錄進(jìn)入mysql
mv /restore/var/lib/mysql/* /var/lib/mysql/
systemctl restart mysqld
mysql -uroot -p123456
登錄查看
1.2備份工具備份
備份
工具? ? ? ? ? ?mysqldump
對(duì)單個(gè)庫(kù)進(jìn)行完全備份
mysqldump -u用戶名 -p[密碼] [選項(xiàng)] --databases [數(shù)據(jù)庫(kù)名] > /備份路徑/備份文件名
-p可以不加密碼
把原來(lái)的庫(kù)刪除在恢復(fù)測(cè)試一下
對(duì)多個(gè)庫(kù)進(jìn)行完全備份
mysqldump -u用戶名 -p[密碼] [選項(xiàng)] --databases 庫(kù)名1 [庫(kù)名2]…… > /備份路徑/備份文件名
對(duì)所有庫(kù)進(jìn)行完全備份
mysqldump -u用戶名 -p[密碼] [選項(xiàng)] --opt --all-databases > /備份路徑/備份文件名
對(duì)表進(jìn)行完全備份
mysqldump -u用戶名 -p[密碼] [選項(xiàng)] 數(shù)據(jù)庫(kù)名 表名 > /備份路徑/備份文件名
對(duì)表的結(jié)構(gòu)進(jìn)行備份? ? ? ? ? ?
mysqldump -u用戶名 -p[密碼] -d 數(shù)據(jù)庫(kù)名 表名 > /備份路徑/備份文件名
mysqldump -uroot -p -d ljt class >/mnt/class.1.sql
這個(gè)命令是用來(lái)導(dǎo)出 MySQL 數(shù)據(jù)庫(kù)中的指定表的數(shù)據(jù)結(jié)構(gòu)(僅包含表結(jié)構(gòu),不包含數(shù)據(jù))到指定路徑下的備份文件中。
-u [用戶名]
:指定數(shù)據(jù)庫(kù)的用戶名。-p[密碼]
:指定數(shù)據(jù)庫(kù)的密碼。請(qǐng)注意在-p后面沒(méi)有空格。-d
:表示只導(dǎo)出數(shù)據(jù)表的結(jié)構(gòu),不包含數(shù)據(jù)。[數(shù)據(jù)庫(kù)名]
:指定要備份的數(shù)據(jù)庫(kù)的名稱。[表名]
:指定要備份的表的名稱。> /備份路徑/備份文件名
:表示將備份的結(jié)果輸出到指定路徑和文件名中。
還原
工具
source? ? ? ? ? ? ?登錄mysql 數(shù)據(jù)庫(kù)執(zhí)行source ?備份sql腳本路徑
mysql
mysql -u用戶名 -p[密碼] < 庫(kù)備份腳本的路徑
mysql -u用戶名 -p[密碼] 庫(kù)名 < 表備份腳本的路徑
2、增量備份
1.1使用完全備份時(shí),備份與恢復(fù)的時(shí)間過(guò)長(zhǎng)
1.2增量備份就是備份自上一次備份之后增加的或改變的文件內(nèi)容
1.3特點(diǎn)
沒(méi)有重復(fù)數(shù)據(jù),備份量不大,時(shí)間短
恢復(fù)麻煩,需要上次完全備份及完全備份之后所有的增量備份才能恢復(fù),而且要對(duì)所有增量備份進(jìn)行逐個(gè)反推恢復(fù)
MySQL沒(méi)有提供直接的增量備份辦法,可以通過(guò)MySQL提供的二進(jìn)制日志(binary logsbinlog))間接實(shí)現(xiàn)增量備份
1.4MySQL二進(jìn)制日志對(duì)備份的意義
二進(jìn)制日志保存了所有更新或者可能更新數(shù)據(jù)庫(kù)的操作。
二進(jìn)制日志在啟動(dòng)MySQL服務(wù)器后開始記錄,并在文件達(dá)到max_binlog_size所設(shè)置的大小或者接收到flush logs命令后重新創(chuàng)建新的日志文件。
1.5開啟二進(jìn)制日志備份功能
MySQL的配置文件的[mysqld]項(xiàng)中加入 log-bin=文件存放路徑/文件前綴,如 log-bin=mysql-bin,然后重啟mysqld服務(wù)。默認(rèn)此配置存在。
vim /etc/my.cnf
systemctl restart mysqld
ll /var/lib/mysql
生成了一個(gè)二進(jìn)制日志
mysql回滾了一次生成另一個(gè)記錄
mysqladmin -uroot -p flush-logs
ll /var/lib/mysql
使用mysqld --log-bin=文件存放路徑/文件前綴 重新啟動(dòng)mysqld服務(wù)每周選擇服務(wù)器負(fù)載較輕的時(shí)間段,或者用戶訪問(wèn)較少的時(shí)間段進(jìn)行備份
1.6增量恢復(fù)
應(yīng)用場(chǎng)景
人為的SQL語(yǔ)句破壞了數(shù)據(jù)庫(kù)
在進(jìn)行下一次全備之前發(fā)生系統(tǒng)故障導(dǎo)致數(shù)據(jù)庫(kù)丟失
?在主從架構(gòu)中,主庫(kù)數(shù)據(jù)發(fā)生了故障,保證從庫(kù)數(shù)據(jù)一致性
方法
一般恢復(fù)
備份的二進(jìn)制日志內(nèi)容全部恢復(fù)
格式: mysqldbinlog [--no-defaults] 增量備份文件 | mysql -u用戶名 -p密碼
?基于時(shí)間點(diǎn)的恢復(fù)
便于跳過(guò)某個(gè)發(fā)生錯(cuò)誤的時(shí)間點(diǎn)實(shí)現(xiàn)數(shù)據(jù)恢復(fù)
格式:從日志開頭截止到某個(gè)時(shí)間點(diǎn)的恢復(fù):
?mysqlbinlog [--no-defaults] --stop-datetime=’年-月-日 小時(shí):分鐘:秒‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼
從某個(gè)時(shí)間點(diǎn)到日志結(jié)尾的恢復(fù)
?mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小時(shí):分鐘:秒‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼
從某個(gè)時(shí)間點(diǎn)到某個(gè)時(shí)間點(diǎn)的恢復(fù)
mysqlbinlog [--no-defaults] --start-datetime=’年-月-日 小時(shí):分鐘:秒‘ --stop-datetime=’年-月-日 小時(shí):分鐘:秒‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼
基于位置的恢復(fù)
可能在同一時(shí)間點(diǎn)既有錯(cuò)誤的操作也有正確的操作,基于位置進(jìn)行恢復(fù)更加準(zhǔn)確
mysqlbinlog --stop-position=‘操作 id‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼
mysqlbinlog --start-position=‘操作 id‘ 二進(jìn)制日志 | mysql -u用戶名 -p密碼
七、實(shí)驗(yàn)
讓我們來(lái)一次完整的二進(jìn)制內(nèi)容的操作吧
安裝mysql(yum?方式)
添加數(shù)據(jù)庫(kù)、表,錄入數(shù)據(jù)
create database client;
create table user_info(身份證 char(20) not null,姓名 char(20) not null,性別 char(4),用戶ID號(hào) char(10) not null,資費(fèi) int(10)) DEFAULT CHARSET=utf8;
insert into user_info values('000000006','張三','男','016','10');
insert into user_info values('000000007','李四','女','017','91');
insert into user_info values('000000008','王五','女','018','23');
select * from user_info;
?先進(jìn)行一次完全備份
mkdir /mysql_bak
mysqldump -uroot -p123456 client user_info > /mysql_bak/client_userinfo-$(date +%F).sql
mysqldump -uroot -p123456 --databases client > /mysql_bak/client-$(date +%F).sql
ls /mysql_bak/
添加兩條內(nèi)容,重啟一下服務(wù)
?vim /etc/my.cnf
systemctl restart mysqld
server-id=1
log-bin=mysql-bin
進(jìn)行一次日志回滾(生成新的二進(jìn)制日志)
mysqladmin -uroot -p123456 flush-logs
?出現(xiàn)了兩個(gè)日志分別為000001,000002
?繼續(xù)錄入新的數(shù)據(jù)
mysql -uroot -p123456
use client;
insert into user_info values('000000009','趙六','男','019','37');
insert into user_info values('000000010','孫七','男','020','36');
select * from user_info;
進(jìn)行增量備
mysqladmin -uroot -p123456 flush-logs
ll /var/lib/mysql
mv /var/lib/mysql/mysql-bin.000002 /mysql_bak/
mysqlbinlog -v /mysql_bak/mysql-bin.000002
?模擬誤操作刪除user_info表
drop table client.user_info;
select * from client.user_info;
?恢復(fù)完全備份
mysql -uroot -p123456 client < /mysql_bak/client_userinfo-2023-07-28.sql
查看一下數(shù)據(jù)庫(kù)
mysql -uroot -p123456
select * from client.user_info;
?恢復(fù)增量備份
mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 | mysql -uroot -p123456
select * from client.user_info;
?基于時(shí)間點(diǎn)的增量備份恢復(fù)
drop table client.user_info;
select * from client.user_info;
mysql -uroot -p123456 client < /mysql_bak/client_userinfo-2023-07-28.sql
mysqlbinlog --no-defaults /mysql_bak//mysql-bin.000002 -v
完整備份回?cái)?shù)據(jù)庫(kù)查看一下時(shí)間點(diǎn)的文件
?查看一下數(shù)據(jù)庫(kù)的身份信息
select * from client.user_info;
?查看一下趙六的結(jié)束時(shí)間戳
?再看一下孫七的結(jié)束時(shí)間戳
?只恢復(fù)趙六,不恢復(fù)孫七:
mysqlbinlog --no-defaults --stop-datetime="2023-07-28 ?9:42:43" /mysql_bak/mysql-bin.000002 | mysql -uroot -p123456
?只恢復(fù)孫七,不恢復(fù)趙六:
drop table client.user_info;
mysql -uroot -p123456 client < /mysql_bak/client_userinfo-2023-07-28.sql
?
?這就要使用另一個(gè)命令了需要的是開始時(shí)間
mysqlbinlog --no-defaults --start-datetime="2023-07-28 9:42:43" /mysql_bak/mysql-bin.000002 | mysql -uroot -p123456
?查看數(shù)據(jù)庫(kù)
基于位置的恢復(fù)
drop table client.user_info;
mysql -uroot -p123456 client < /mysql_bak/client_userinfo-2023-07-28.sql
?只恢復(fù)趙六,不恢復(fù)孫七:
mysqlbinlog --no-defaults --stop-position='520' /mysql_bak/mysql-bin.000002 | mysql -uroot -p123456
select * from client.user_info;
?只恢復(fù)孫七,不恢復(fù)趙六:
drop table client.user_info;
mysql -uroot -p123456 client < /mysql_bak/client_userinfo-2023-07-28.sql
mysqlbinlog --no-defaults --start-position='520' /mysql_bak/mysql-bin.000002 | mysql -uroot -p123456
select * from client.user_info;
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-770070.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-770070.html
到了這里,關(guān)于小白帶你學(xué)習(xí)linux的mysql數(shù)據(jù)庫(kù)備份(三十)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!