一、在生產環境中,數據的安全性是相當重要的,任何數據的丟失均可能產生嚴重的後果
二、形成數據丟失的緣由
程序錯誤
人爲錯誤
計算機失敗
磁盤失敗
災難(如地震等)和偷竊mysql
1、從物理與邏輯的角度,備份可分爲:sql
一、物理備份:對數據庫操做系統的物理文件(如數據文件、日誌文件等)的備份 物理備份又能夠分爲脫機備份(冷備份)和聯機備份(熱備份): -冷備份:是在關閉數據庫的時候進行的 -熱備份:數據庫處於運行狀態,這種備份方法依賴於數據庫的日誌文件 二、邏輯備份:對數據庫邏輯組件(如表等數據庫對象)的備份
2、從數據庫的備份策略角度, 備份可分爲:shell
一、徹底備份:每次對數據進行完整的備份 二、差別備份:備份那些自從上次徹底備份以後被修改過的文件 三、增量備份:只有那些在.上次徹底備份或者增量備份後被修改的文件纔會被備份 注意點:差別備份與增量備份相輔相成
一、徹底備份是對整個數據庫的備份、數據庫結構和文件結構的備份 二、徹底備份保存的是備份完成時刻的數據庫 三、徹底備份是增量備份的基礎
徹底備份的優勢數據庫
備份與恢復操做簡單方便
徹底備份的缺點安全
1.數據存在大量的重複 2.佔用大量的備份空間 3.備份與恢復時間長
1、MySQL數據庫的備份能夠採用用多種方式服務器
1.直接打包數據庫文件夾,如/usr/local/mysql/data 2.使用專用備份工具mysqldump**
2、mysqldump命令ide
1.MySQL自帶的備份工具,至關方便對MySQL進行備份 2.經過該命令工具能夠將指定的庫、表或所有的庫導出爲SQL腳本,在須要恢復時可進行數據恢復
3、使用mysqldump命令對單個數據庫進行徹底備份工具
mysqldump -u用戶名 -p [密碼] [選項] [數據庫名] > /備份路徑/備份文件名
4、使用mysqldump命令對多個庫進行徹底備份操作系統
mysqldump -u 用戶名 -p [密碼] [選項] --databases 庫名1 [庫名2]... >/備份路徑/備份文件名
5、使用mysqldump命令對全部庫進行徹底備份日誌
mysqldump -u用戶名 -p [密碼] [選項] --all-databases > /備份路徑/備份文件名
在實際生產環境中,存在對某個特定表的維護操做,此時mysqldump一樣發揮重大做用
1.使用mysqldump備份表的操做
mysqldump -u 用戶名 -p [密碼] [選項] 數據庫名 表名 > /備份路徑/備份文件名
2.使用mysqldump備份表結構的操做
mysqldump -u 用戶名 -p [密碼] [選項] -d 數據庫名 表名 > /備份路徑/備份文件名
1、使用mysqldump命令導出的SQL備份腳本,在進行數據恢復時可以使用如下方法導入
source命令 #數據庫模式中運行 mysql命令 #Linux模式中運行
一、使用source恢復數據庫的步驟
●登陸到MySQL數據庫 ●執行source備份sq|腳本的路徑(絕對路徑)
MySQL [(none)] > source /backup/all-data.sql #source命令恢復
二、使用mysql命令恢復數據
mysql -u用戶名 -p [密碼] < 庫備份腳本的路徑
mysql -u root -p < /backup/all-data.sql #mysql命令恢復
2、使用mysqldump進行徹底備份的存在的問題
●備份數據中有重複數據 ●備份時間與恢復時間長
一、恢復表時一樣可使用source或者mysql命令進行 二、source恢復表的操做與恢復庫的操做相同 三、當備份文件中只包含表的備份,而不包括建立庫的語句時,必須指定庫名,且目標庫必須存在.生產環境中,可使用shell腳本自動實現按期備份 mysql -u用戶名-p [密碼] < 表備份腳本的路徑
mysql -u root -p mysql < /backup/mysql-user.sql #mysql命令恢復表
一、按期實施備份,制定備份計劃或者策略,並嚴格遵照 二、除了進行徹底備份,開啓MySQL服務器的日誌功能是很重要的 ●徹底備份加上日誌,能夠對MySQL進行最大化還原 MySQL-bin:MySQL數據庫的二進制日誌,用於記錄用戶對數據庫操做的SQL語句((除了數據查詢語句)信息。可使用mysqlbin命令查看二進制日誌的內容 三、使用統一的和易理解的備份文件名稱 ●不要使用backup一、backup2等這樣沒有意義的名字 ●推薦使用庫名或者表名加上時間的命名規則
增量備份就是備份自上一次備份以後增長或變化的文件或者內容
增量備份的特色
●沒有重複數據,備分量不大,時間短 ●恢復麻煩:須要上次徹底備份及徹底備份以後全部的增量備份才能恢復,並且要對全部增量備份進行逐個反推恢復
MySQL沒有提供直接的增量備份方法
能夠經過MySQL提供的二進制日誌(binary logs)間接實現增量備份
MySQL二進制日誌對備份的意義
●二進制日誌保存了全部更新或者可能更新數據庫的操做 ●二進制日誌在啓動MySQL服務器後開始記錄,並在文件達到max_ binlog_size所設置的大小或者接收到flush logs命令後從新建立新的日誌文件 ●只需定時執行flush logs方法從新建立新的日誌,生成二進制文件序列,並及時把這些舊的日誌保存到安全的地方就完成了一個時間段的增量備份
mysqlbinlog --no-defaults --base64-output=decode-rows -V mysql-bin.000002 > /opt/ bak. txt
就是將某個起始時間的二進制日誌導入數據庫中,從而跳過某個發生錯誤的時間點實現數據的恢復
使用基於時間點的恢復,可能會出如今一個時間點裏既同時存在正確的操做又存在錯誤的操做,因此咱們須要一種更爲精確的恢復方式
1.通常恢復
mysqlbinlog [--no-defaults] 增量備份文件 | mysql -u用戶名 -p
2.基於位置的恢復
恢復數據到指定位置
mysqlbinlog --stop-position=操做'id' 進制日誌 | mysql -u用戶名 -p 密碼
從指定的位置開始恢復數據
mysqlbinlog --start-position=操做'id' 二進制日誌 | mysql -u用戶名 -p 密碼
3.基於時間點的恢復
從日誌開頭截止到某個時間點的恢復
mysqlbinlog [--no-defaults] --stop-datetime='年-月-日 小時:分鐘:秒' 二進制日誌 | mysql -u用戶名 -p 密碼
從某個時間點到日誌結尾的恢復
mysqlbinlog [--no defaults] --start-datetime='年-月-日 小時:分鐘:秒' 二進制日誌 | mysql -u用戶名 -p 密碼
從某個時間點到某個時間點的恢復
mysqlbinlog [--no defaults] --start-datetime='年-月-日 小時:分鐘:秒' --stop-datetime='年-月-日 小時:分鐘:秒' 二進制日誌 | mysql -u用戶名 -p 密碼