mysql數(shù)據(jù)庫備份與恢復(fù)
一、為什么要備份
災(zāi)難恢復(fù):硬件故障、軟件故障焙蹭、自然災(zāi)害、黑客攻擊墅诡、誤操作測試等數(shù)據(jù)丟失場景
備份注意要點
能容忍最多丟失多少數(shù)據(jù)
恢復(fù)數(shù)據(jù)需要在多長時間內(nèi)完成
需要恢復(fù)哪些數(shù)據(jù)
還原要點
做還原測試壳嚎,用于測試備份的可用性
還原演練
二桐智、備份類型
備份類型:
完全備份,部分備份
完全備份:整個數(shù)據(jù)集
部分備份:只備份數(shù)據(jù)子集烟馅,如部分庫或表
完全備份说庭、增量備份、差異備份
增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數(shù)據(jù)郑趁,備份較快刊驴,還原復(fù)雜
差異備份:僅備份最近一次完全備份以來變化的數(shù)據(jù),備份較慢寡润,還原簡單
//注意:二進(jìn)制日志文件不應(yīng)該與數(shù)據(jù)文件放在同一磁盤
三捆憎、備份種類
冷、溫梭纹、熱備份
冷備:讀寫操作均不可進(jìn)行
溫備:讀操作可執(zhí)行躲惰;但寫操作不可執(zhí)行
熱備:讀寫操作均可執(zhí)行
MyISAM引擎:溫備,不支持熱備
InnoDB引擎: 都支持
物理和邏輯備份
物理備份:直接復(fù)制數(shù)據(jù)文件進(jìn)行備份变抽,與存儲引擎有關(guān)础拨,占用較多的空間,速度快
邏輯備份:從數(shù)據(jù)庫中“導(dǎo)出”數(shù)據(jù)另存而進(jìn)行的備份绍载,與存儲引擎無關(guān)诡宗,占用空間少,速度慢击儡,可能丟失精度
四塔沃、邏輯備份
邏輯備份特點
1.備份的都是SQL語句,數(shù)據(jù)量大的話SQL語句備份快阳谍,但是恢復(fù)數(shù)據(jù)的時候會很慢
2.備份的是建表蛀柴、建庫、插入等操作所執(zhí)行SQL語句(DDL DML DCL)边坤,適用于中小型數(shù)據(jù)庫名扛。
3.效率相對較低
用法
mysqldump -h 服務(wù)器(默認(rèn)本機(jī)) -u.. -p.. 數(shù)據(jù)庫名>name.sql
日常用法
備份所有數(shù)據(jù)庫
先配置用戶名和密碼
在任意文件內(nèi)配置
[mysqldump]
user=root
password=root
...
文件內(nèi)容配好的話谅年,在備份的時候可以用 --defaults-file直接讀取文件內(nèi)容茧痒,方便快捷
mysqldump --defaults-file=~/.mysql_user --all-databases > xxx.sql
# 不包含 INFORMATION_SCHEMA,performance_schema,sys
備份單個庫
mysqldump --defaults-file=/root/.mysql_user -hlocalhost --databases servers >servers.sql
mysqldump --defaults-file=/root/.mysql_user -hlocalhost servers>servers.sql
加與不加--databases的區(qū)別:
加上--databases的話,備份文件內(nèi)會有創(chuàng)庫與進(jìn)庫語句
如果不加的話融蹂,必須自己創(chuàng)建庫并且進(jìn)入庫
進(jìn)入數(shù)據(jù)庫內(nèi)使用 source backup.sql
備份多個庫
mysqldump --defaults-file=/root/.mysql_user -hlocalhost --databases db1 db2 db3 . >db.sql
備份一個庫的幾個表
mysqldump --defaults-file=/root/.mysql_user -hlocalhost db1 t1 t2 t3 >backup.sql
恢復(fù)數(shù)據(jù)
1. mysql -uroot -proot db < backup.sql
2. 進(jìn)入數(shù)據(jù)庫
source backup.sql
五旺订、物理備份
5.1、全量備份
知識
對數(shù)據(jù)庫在線進(jìn)行全備的時候超燃,用戶可以對數(shù)據(jù)庫進(jìn)行增刪改查区拳,如果數(shù)據(jù)庫已經(jīng)完成備份后,數(shù)據(jù)并不會同步意乓,如果不處理的話數(shù)據(jù)就會造成損失
這時會有一個事件用來監(jiān)控那些已經(jīng)備份完成之后的數(shù)據(jù)庫樱调,這些內(nèi)容會存儲在xtrabackup_logfile這個二進(jìn)制文件內(nèi),但是這個文件并不能數(shù)據(jù)庫解析,所以數(shù)據(jù)備份之后就要對這個文件進(jìn)行恢復(fù)笆凌,將其轉(zhuǎn)換為可以被mysql識別的文件圣猎,然后在進(jìn)行恢復(fù)數(shù)據(jù),也就是復(fù)制文件
下載xtrabackup
1. yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2. yum install -y libev
3. yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
4. yum install percona-xtrabackup-24
全備的大致流程
1. 創(chuàng)建好存儲備份的目錄
2. 對數(shù)據(jù)庫進(jìn)行備份
3. 將事件產(chǎn)生的日志轉(zhuǎn)換為數(shù)據(jù)庫可以識別的
4. 將數(shù)據(jù)庫服務(wù)停止
5. 進(jìn)行備份
6. 開啟數(shù)據(jù)庫服務(wù)進(jìn)行驗證
全備的操作
1. shell> xtrabackup --backup --user=root --password='123' --target-dir=/backups/full
# 備份完成后乞而,可以看到備份時的LSN號送悔,當(dāng)下次進(jìn)行增量備份時,xtrabackup就只備份大于此號的page即可爪模。
2. shell> xtrabackup --prepare --target-dir=/backups/full
3. shell> systemctl stop mysqld.service
4. shell> rm -rf /var/lib/mysql/*
5. shell> xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/ful
6. systemctl start mysqld 開啟數(shù)據(jù)庫服務(wù)進(jìn)行檢驗
5.2欠啤、增量備份
增量備份是在全備的基礎(chǔ)之上進(jìn)行增量備份
特點:是在上一次
備份的基礎(chǔ)上進(jìn)行增量備份
創(chuàng)建增量備份
- 進(jìn)行全量備份
xtrabackup --backup --user=root --password=root --target-dir=/backup/full
- 進(jìn)行增量備份
手動增加數(shù)據(jù)之后進(jìn)行增量備份
第一次增量備份
xtrabackup --backup --user=root --password=root --target-dir=/backup/inc1 --incremental-basedir=/backup/full
在第一次全備的基礎(chǔ)上進(jìn)行增量備份,備份后的文件放在inc1目錄內(nèi)
第二次增量備份
xtrabackup --backup --user=root --password=root --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
在第一次增量備份的基礎(chǔ)上進(jìn)行增量備份屋灌,備份后的文件放在inc2目錄內(nèi)
- 恢復(fù)數(shù)據(jù)
1. 準(zhǔn)備全備的數(shù)據(jù)
xtrabackup --prepare --apply-log-only --target-dir=/backup/full
2.把第一次備份的數(shù)據(jù)合并到全備的數(shù)據(jù)內(nèi)
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --
incremental-dir=/backup/incl
3.把第一次備份的數(shù)據(jù)合并到全備的數(shù)據(jù)內(nèi)
xtrabackup --prepare --target-dir=/backup/full --
incremental-dir=/backup/inc2
注意最后一次合并不加 --apply-log-only
- 停止服務(wù)洁段,刪除數(shù)據(jù)
systemctl stop mysqd
rm -rf /var/lib/mysqld/*
5.恢復(fù)數(shù)據(jù)
xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backup/full
6.修改權(quán)限之后開啟服務(wù)就可以了
將數(shù)據(jù)庫恢復(fù)默認(rèn)
1. 關(guān)閉服務(wù) 將數(shù)據(jù)庫內(nèi)的內(nèi)容全部清空
2. mysqld --initialize --user=mysql