mysql數據庫備份與恢復
一、為什么要備份
災難恢復:硬件故障、軟件故障、自然災害、黑客攻擊、誤操作測試等數據丟失場景
備份注意要點
能容忍最多丟失多少數據
恢復數據需要在多長時間內完成
需要恢復哪些數據
還原要點
做還原測試,用于測試備份的可用性
還原演練
二、備份類型
備份類型:
完全備份,部分備份
完全備份:整個數據集
部分備份:只備份數據子集,如部分庫或表
完全備份、增量備份、差異備份
增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據,備份較快,還原復雜
差異備份:僅備份最近一次完全備份以來變化的數據,備份較慢,還原簡單
//注意:二進制日志文件不應該與數據文件放在同一磁盤
三、備份種類
冷、溫、熱備份
冷備:讀寫操作均不可進行
溫備:讀操作可執行;但寫操作不可執行
熱備:讀寫操作均可執行
MyISAM引擎:溫備,不支持熱備
InnoDB引擎: 都支持
物理和邏輯備份
物理備份:直接復制數據文件進行備份,與存儲引擎有關,占用較多的空間,速度快
邏輯備份:從數據庫中“導出”數據另存而進行的備份,與存儲引擎無關,占用空間少,速度慢,可能丟失精度
四、邏輯備份
邏輯備份特點
1.備份的都是SQL語句,數據量大的話SQL語句備份快,但是恢復數據的時候會很慢
2.備份的是建表、建庫、插入等操作所執行SQL語句(DDL DML DCL),適用于中小型數據庫。
3.效率相對較低
用法
mysqldump -h 服務器(默認本機) -u.. -p.. 數據庫名>name.sql
日常用法
備份所有數據庫
先配置用戶名和密碼
在任意文件內配置
[mysqldump]
user=root
password=root
...
文件內容配好的話,在備份的時候可以用 --defaults-file直接讀取文件內容,方便快捷
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的區別:
加上--databases的話,備份文件內會有創庫與進庫語句
如果不加的話,必須自己創建庫并且進入庫
進入數據庫內使用 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
恢復數據
1. mysql -uroot -proot db < backup.sql
2. 進入數據庫
source backup.sql
五、物理備份
5.1、全量備份
知識
對數據庫在線進行全備的時候,用戶可以對數據庫進行增刪改查,如果數據庫已經完成備份后,數據并不會同步,如果不處理的話數據就會造成損失
這時會有一個事件用來監控那些已經備份完成之后的數據庫,這些內容會存儲在xtrabackup_logfile這個二進制文件內,但是這個文件并不能數據庫解析,所以數據備份之后就要對這個文件進行恢復,將其轉換為可以被mysql識別的文件,然后在進行恢復數據,也就是復制文件
下載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. 創建好存儲備份的目錄
2. 對數據庫進行備份
3. 將事件產生的日志轉換為數據庫可以識別的
4. 將數據庫服務停止
5. 進行備份
6. 開啟數據庫服務進行驗證
全備的操作
1. shell> xtrabackup --backup --user=root --password='123' --target-dir=/backups/full
# 備份完成后,可以看到備份時的LSN號,當下次進行增量備份時,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 開啟數據庫服務進行檢驗
5.2、增量備份
增量備份是在全備的基礎之上進行增量備份
特點:是在上一次
備份的基礎上進行增量備份
創建增量備份
- 進行全量備份
xtrabackup --backup --user=root --password=root --target-dir=/backup/full
- 進行增量備份
手動增加數據之后進行增量備份
第一次增量備份
xtrabackup --backup --user=root --password=root --target-dir=/backup/inc1 --incremental-basedir=/backup/full
在第一次全備的基礎上進行增量備份,備份后的文件放在inc1目錄內
第二次增量備份
xtrabackup --backup --user=root --password=root --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
在第一次增量備份的基礎上進行增量備份,備份后的文件放在inc2目錄內
- 恢復數據
1. 準備全備的數據
xtrabackup --prepare --apply-log-only --target-dir=/backup/full
2.把第一次備份的數據合并到全備的數據內
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --
incremental-dir=/backup/incl
3.把第一次備份的數據合并到全備的數據內
xtrabackup --prepare --target-dir=/backup/full --
incremental-dir=/backup/inc2
注意最后一次合并不加 --apply-log-only
- 停止服務,刪除數據
systemctl stop mysqd
rm -rf /var/lib/mysqld/*
5.恢復數據
xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backup/full
6.修改權限之后開啟服務就可以了
將數據庫恢復默認
1. 關閉服務 將數據庫內的內容全部清空
2. mysqld --initialize --user=mysql