文章目錄
1、數據庫備份的分類
2、MySQL 徹底備份
(1)徹底備份特色
(2)mysqldump 備份庫
一、針對單個庫進行徹底備份
二、針對多個庫進行徹底備份
三、對全部庫進行徹底備份
(3)恢復數據庫操做
一、source 命令
二、使用 mysql 命令
(4)mysqldump 備份表
一、備份表
二、備份表的結構
(5)恢復表的操做
3、MySQL 增量備份
1、數據庫備份的分類:
一、從物理與邏輯的角度,備份能夠分爲:
物理備份:對數據庫操做系統的物理文件(數據文件、日誌文件等)備份;
邏輯備份:對數據庫邏輯組件(如表等數據庫對象)備份;
二、從數據庫的備份策略角度,備份可分爲:
徹底備份:每次對數據進行完整的備份;
差別備份:備份那些自從上次徹底備份以後被修改事後的文件;
增量備份:只有那些在上次徹底備份或者增量備份後被修改的文件纔會被備份。
2、MySQL 徹底備份:
徹底備份是對整個數據庫的備份、數據庫結構和文件結構的備份;
徹底備份保存的是對備份完成時刻的數據庫;
徹底備份是加強備份的基礎
(1)徹底備份特色:
備份與恢復操做簡單方便;
數據存在大量的重複,會致使佔用大量的備份空間
備份與恢復時間長
(2)mysqldump 備份庫
mysql 數據庫的備份能夠採起多種方式:
直接打包數據庫文件夾;
使用專用的備份工具 ----- mysqldump ;
該命令工具能夠將指定的庫、表或所有的庫導出爲 SQL 腳本,在須要恢復時可進行數據恢復。
tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
//直接對整個數據庫的數據文件進行打包,備份,並以時間命名壓縮包名稱
一、針對單個庫進行徹底備份:
mysqldump -uroot -p school > /opt/school.sql
將名爲school的數據庫備份到/opt/目錄下,起名爲school.sql
二、針對多個庫進行徹底備份:
mysqldump -uroot -pabc123 --databases school team > /opt/db_s_t.sql
//對school和team這兩個數據庫進行備份,起名爲db_s_t.sql
三、對全部庫進行徹底備份:
mysqldump -uroot -pabc123 --all-databases > /opt/all.sql
//對全部的數據庫進行備份
(3)恢復數據庫操做
使用 mysqldump 命令導出的 SQL 備份腳本,在進行數據恢復時可以使用兩種方法導入:
source 命令
mysql 命令
一、source 命令:
先登陸到 mysql 數據庫,再執行 source 備份sql腳本的路徑。
mysql> source /opt/school.sql;
//恢復school數據庫
二、使用 mysql 命令:
mysql -uroot -pabc123 school < /opt/school.sql
//恢復school數據庫
(4)mysqldump 備份表
一、備份表:
mysqldump -uroot -pabc123 school info > /opt/school_info.sql
//對數據庫school下的info表進行備份
二、備份表的結構:
mysqldump -uroot -pabc123 -d school info > /opt/school_info.sql
//加-d 選項,就是備份表的結構,不備份表內的信息
(5)恢復表的操做
恢復表時,一樣可使用 source 命令 和 mysql 命令 進行,操做與恢復庫的操做相同;
須要注意的是:當備份文件中只包含表的備份,而不包括建立庫的語句時,必須指定庫名,且目標庫必須存在。
3、MySQL 增量備份:
增量備份就是備份自上一次備份以後增長或變化的文件或者內容,必須先有徹底備份才能進行增量備份。
使用 mysqldump 進行徹底備份的存在的問題:
備份數據中有重複數據;
備份時間與恢復時間長;
(1)增量備份的特色:
沒有重複數據,備分量不大,時間短;
恢復麻煩,須要上次徹底備份及徹底備份以後全部的增量備份才能恢復,並且要對全部增量備份進行逐個反推恢復。
增量備份依賴二進制日誌文件,首先須要開啓二進制日誌文件:
修改 my.cnf文件,添加:log-bin=mysql-bin
mysqladmin -uroot -pabc123 flush-logs
//刷新全部日誌
(2)MySQL 數據庫增量恢復方法:
一、例如,對數據庫進行了如下操做:
insert into info (id,name,score) values (7,'wang',33);
//插入一條信息
delete from info where name='jack';
//刪除一條信息;
insert into info (id,name,score) values (10,'qian',44);
//再插入一條信息
二、查看日誌文件:
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002
方法一:通常恢復
命令:
mysqlbinlog [--no-defaults] 增量備份文件 | mysql -u 用戶名 -p
方法二:基於位置恢復
將某個起始時間的二進制日誌導入數據庫中,從而跳過某個發生錯誤的時間實現數據的恢復。
一、恢復數據到指定的位置:
mysqlbinlog --no-defaults --stop-position='293' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
二、從指定的位置開始恢復數據:
mysqlbinlog --no-defaults --start-position='396' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
方法三:基於時間點恢復
使用基於時間點的恢復,可能會出如今一個時間點裏既同時存在正確的操做又存在錯誤的操做,因此咱們須要一種更爲精確的恢復方式。
一、從日誌開頭截止到某個時間點的恢復:
mysqlbinlog --no-defaults --stop-datetime='2020-01-14 17:56:36' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p
二、從某個時間點到日誌結尾的恢復:
mysqlbinlog --no-defaults --start-datetime='2020-01-14 17:57:03' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p
三、從某個時間點到某個時間點的恢復: