mysql配置資料恢復 MySQL 資料恢復

2021-10-18 07:00:07 字數 2592 閱讀 9852

前言

前兩天因為沒注意的誤操作, 直接把某個資料表清掉了, 心慌慌. 怪自己學藝不精, 當時整了一下午也沒把資料找回來. 當晚回來閉關研究, 終於在凌晨1點多整出來了, 特此記錄, 以備不時之需.

對於 mysql 資料的備份, 主要有兩種: 全量備份和增量備份.

全量備份: 將資料庫中的所有資料全部進行備份. 相當於複製貼上的步驟. 全量備份要儲存所有資料, 占用空間大, 必然不可能精確到每一秒.

增量備份: 對資料庫的所有變動進行備份. 增量備份可以將資料庫的變動全部儲存下來, 但也不可能一直儲存, 否則備份檔案的體積超級大.

而對資料庫資料的恢復操作, 思路也很簡單, 使用全量備份和增量備份相配合, 以某個時間點的全量備份為基礎, 通過增量備份使資料庫資料恢復到具體的某個時間節點.

為了防止下次遇到這種情況再抓狂, 我決定對資料庫進行定時備份. 通過全量和增量的備份檔案來面對下一次事故的發生(當然, 我是肯定不會再出現了, 防止之後其他人誤操作吧)

資料的備份操作基本如下:

每天對資料庫進行全量備份

保持 binlog 的增量備份

當需要恢復時, 找到當天的全量備份資料恢復, 然後在這基礎上進行增量恢復即可恢復到某個特定的時間點. 好, 開搞.

定時全量備份

思路很簡單, 通過mysqldump命令進行全量備份, 乙個簡單的定時 shell 指令碼即可滿足. 指令碼如下:

#!/bin/bash

# 備份檔案保留天數

fileretainday=30

# 備份目錄

bakdir=/users/hujing/dir/tmp/mysqldump_log

# 資料庫使用者名稱

user=root

# 資料庫密碼

password=root

# 今天的日期

date=`date +%y-%m-%d`

cd $bakdir

mysqldump -u$user -p$password --quick --all-databases --flush-logs > $date.sql

# --quit: 不使用快取

# --flush-logs: 重新整理資料庫的 logbin 檔案

# --all-databases: 備份所有資料庫

# 刪除30天前的備份檔案

find $bakdir -mtime +$fileretainday -type f -name "*.sql" | xargs rm

指令碼很簡單. 接下來通過crontab定時每天跑一次:

1 0 * * * bash /users/hujing/dir/tmp/mysql_back.sh

每天的12點1分跑一次. 這樣30天以內的資料備份檔案就有了.

增量備份

全量備份搞定了, 剩下增量備份. 增量備份就是 mysql 的binlog了.

以下幾個 mysql 的命令列查詢命令可檢視當前binlog狀態:

show binary logs 檢視當前存在的 log 檔案

show variables like '%log_bin%' 檢視 binlog 是否開啟及檔案位置

show master status 檢視當前使用的 binlog

show binlog events in 'binlog.000001' 檢視日誌檔案內容

binlog相關配置:

# 開啟 binlog

log_bin=on

# binlog 日誌檔案字首

log_bin_basename=/var/lib/mysql/binlog

# 索引檔案

log_bin_index=/var/lib/mysql/binlog.index

# 檔案過期時間, 過期檔案會自動刪除

expire_logs_days=7

# 每個檔案的最大儲存大小

max_binlog_size=1024m

很好, 現在我們也有了增量備份檔案.

資料恢復

當需要恢復資料時, 如何根據這兩個備份檔案進行恢復呢?

打個比方, 當前時間是: 2020-9-4 23:00:00. 此時, 我做了清表的瘋**作. 如何恢復資料?

1. 通過全量備份, 將資料恢復到今天凌晨的時刻

進入 mysql命令列, 執行資料恢復檔案:

source /users/hujing/dir/tmp/mysqldump_log/2020-09-04.sql

此時, 資料庫已經恢復到本日凌晨的時刻. 請注意, 這步操作會將今日生成的資料刪除.

2. 通過增量備份, 將資料恢復到指定時間節點

通過mysqlbin工具, 將指定時間的資料庫變更操作匯出:

mysqlbinlog -v --start-datetime="2020-09-04 00:00:00" --stop-datetime="2020-09-04 23:00:00" /var/lib/mysql/binlog.0000* > s.sql

同樣通過source命令執行此sql檔案. 此時, 資料就已經恢復了.

膚淺的記錄一下, 雖然現在可以恢復資料了, 但是還有很多問題沒有解決, 比如, 如何只恢復一張表的資料等等.

吃一塹長一智, 之後對資料庫的操作要慎之又慎.

MySQL 資料恢復

原理 mysql資料庫在系統上是以乙個資料夾的形式出現的,你建立了ac資料庫,那麼在磁碟上就會出現名稱為ac的目錄,而ac資料庫的全域性配置則是ac資料夾中的db.opt檔案來管理的。mysql的資料檔案在datadir下,你在資料庫中執行 show variables like datadir 就...

Mysql資料恢復

2 innodb引擎資料表恢復 二 後記 三 引用 本博講解的是應對資料庫崩潰無法恢復,但是仍舊可以獲取到資料庫原檔案的前提下,針對資料庫原檔案進行的資料恢復。主要講解mysiam和innodb兩種引擎資料表的恢復方法。這兩種資料表的位置均在 var lib mysql,不同的安裝方式可能位置不一樣...

MySQ安裝配置相關mysql8 0 11

環境 win7 10 guimysql sqlyog 第一步 解壓免安裝的mysql包 第二步 自建 my.ini 在根目錄下 內容 mysqld port 3306 設定3306埠 basedir d mysql8011 設定mysql的安裝目錄 切記此處一定要用雙斜槓 單斜槓我這裡會出錯,不過看...