前言
前兩天因為沒注意的誤操作, 直接把某個資料表清掉了, 心慌慌. 怪自己學藝不精, 當時整了一下午也沒把資料找回來. 當晚回來閉關研究, 終於在凌晨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的安裝目錄 切記此處一定要用雙斜槓 單斜槓我這裡會出錯,不過看...