在生產環境中,數據的安全性是相當重要的,任何數據的丟失均可能產生嚴重的後果 形成數據丟失的緣由: 程序錯誤 人爲錯誤 計算機失敗 磁盤失敗 災難和偷竊
對數據庫操做系統的物理文件(如數據文件,日誌文件等)的備份
冷備份:是在關閉數據庫的時候進行的 熱備份:數據庫處於運行狀態,這種備份方法依賴於數據庫的日誌文件
對數據庫邏輯組件(如表等數據庫對象)的備份
徹底備份:每次對數據進行完整的備份 差別備份:備份那些自從上次徹底備份以後被修改過的文件 增量備份:只有那些在上次徹底備份或者增量備份後被修改的文件纔會被備份
徹底備份是對整個數據庫的備份,數據結構和文件結構的備份 徹底備份保存的是備份完成時刻的數據庫 徹底備份是增量備份的基礎
備份與恢復操做簡單方便
數據存在大量的重複 佔用大量的備份空間 備份與恢復時間長
直接打包數據庫文件夾,如/usr/local/mysql/data 使用專用備份工具mysqldump
MySQL自帶的備份工具,至關方便對MySQL進行備份 經過該命令工具能夠將指定的庫,表和所有的庫處處爲SQL腳本,在須要恢復時可進行數據恢復
mysqldump -u 用戶名 -p [密碼] [選項] [數據庫名] > /備份路徑/備份文件名
mysqldump -u root -p auth > /backup/auth.sql mysqldump -u root -p mysql > /backup/mysql.sql
mysqldump -u 用戶名 -p [密碼] [選項] --database 庫名1 [庫名2]... > /備份路徑/備份文件名
mysqldump -u root -p --databases auth mysql > /back/databases-auth-mysql.sql
mysqldump -u 用戶名 -p [密碼] [選項] --all-databases > /備份路徑/備份文件名
mysqldump -u root -p --opt --all-databases > /backup/all-data.sql
mysqldump -u 用戶名 -p [密碼] [選項] 數據庫名 表名 > /備份路徑/備份文件名
mysqldump -u root -p mysql user > /backup/mysql-user.sql
source命令 mysql命令
登陸到MySQL數據庫 執行source備份sql腳本的路徑
MySQL [(none)]> source /backup/all-data.sql
mysql -u 用戶名 -p [密碼] < 庫備份腳本的路徑
mysql -u root -p < /backup/all-data.sql
mysql -u 用戶名 -p [密碼] < 表備份腳本的路徑 mysql -u root -p mysql < /backup/mysql-user.sql
徹底備份加上日誌,能夠對MySQL進行最大化的還原
推薦使用庫名或者表名加上時間的命名規則
備份數據中有重複數據 備份時間與恢復時間長
沒有重複數據,備分量不大,時間短 恢復麻煩:須要上次徹底備份及徹底備份以後全部的增量備份才能恢復,並且要對全部增量備份進行逐個反推恢復
二進制日誌保存了全部更新或者可能更新數據庫的操做
二進制日誌在啓動MySQL服務器後開始記錄,並在文件達到max_ binlog_size所設置的大小或者接收到flush logs命令後從新建立新的日誌文件
只需定時執行flush logs方法從新建立新的日誌,生成二進制文件序列,並及時把這些舊的日誌保存到安全的地方就完成了一個時間段的增量備份mysql
就是將某個起始時間的二進制日誌導入數據庫中,從而跳過某個發生錯誤的時間點實現數據的恢復
使用基於時間點的恢復,可能會出如今一個時間點裏既同時存在正確的操做又存在錯誤的操做,因此咱們須要一種更爲精確的恢復方式
mysqlbinlog [--no-defaults]增量備份文件 | mysql -u用戶名 -p
mysqlbinlog --stop-position=操做'id' 1進制日誌 | mysql -u用戶名 -p 密碼
mysqlbinlog --start-position=操做'id'二進制日誌 | mysql -u用戶名 -p 密碼
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 密碼
mysqlbinlog --no-defaults --base64-output=decode-rows -V mysql-bin.000002 > /opt/ bak. txt