MySQL備份與恢復

MySQL備份與恢復

上篇博客講了MySQL的日誌系統,這篇博客將系統的講解MySQL備份與恢復。按照常理說這些內容都是屬於DBA的職責,那麼做爲後端開發人員爲何要學習這些內容呢?是否與專業深度的思想相違背呢?其實做爲WEB開發人員,必定要系統的瞭解從服務發起到服務終結之間全部的內容,這樣纔算是專精,提高本身的職業深度。MySQL就如同技術人員的糧倉,怎麼儲存糧食,失火的時候怎麼確保糧食顆粒歸倉,這是一個必須引發充分重視的問題。下面咱們來系統的瞭解下MySQL的備份與恢復。css

MySQL服務實例運行期間,意外的停電,硬盤損壞,還有一些誤操做、服務器宕機等狀況。這個時候如何確保數據庫可以最大程度地恢復到'正確'的狀態呢?html

對於數據庫管理人員來講,防止數據丟失最簡單的方法就是:對原始數據按期進行備份,建立數據副本。但數據與預期發生不一致狀況,而後使用備份的數據恢復數據。對於MySQL來講,建立數據副本的經常使用方法有三種mysql

建立數據副本的方法web

一、數據備份:sql

MySQL日誌系統前一篇博客咱們知道數據庫的所有數據都以文件的形式,存儲在硬盤上,那咱們就能夠直接備份MySQL的全部數據目錄下的文件就可以達到目的。所以在開啓MySQL服務的時候要設計好各類數據文件以及日誌文件的存放位置,以方便可以快速備份。另外備份的時候最好可以備份到其餘的機器上。數據庫

二、使用二進制日誌:後端

上面的【數據備份方法】屬於物理備份,粒度較粗,不能實現更細粒度的數據恢復,特別是對於更新較爲頻繁的系統。二進制日誌記錄了數據庫全部的更新操做,數據丟失時,能夠經過徹底備份進行二進制日誌的重作,能夠完成基於時間點或者操做點的恢復,繼而實現數據庫更細粒度的恢復。安全

三、數據庫複製:服務器

數據庫的複製其實是經過二進制日誌預防數據丟失的,數據複製能夠實現數據庫的異地備份和恢復。ide

邏輯備份與物理備份

按照備份後產生的副本文件是否能夠編輯,能夠將MySQL的備份方法分爲邏輯備份物理備份

一、邏輯備份:

使用邏輯備份是,數據庫管理員一般能夠直接查看和編輯副本文件中的內容。邏輯備份中產生的副本一般喲兩種狀況。情形一:副本是SQL文件,該SQL文件中有crete table 和大量的inert 語句。情形2、副本是指定分隔符的文件,導入數據庫的時候再以指定分隔符切割數據導入便可。

二、物理備份:

物理備份產生的數據副本都是二進制文件,經常不可編輯,例如數據庫的二進制日誌。

冷備份、溫備份、熱備份

數據備份期間,按照是否須要中止MySQL服務實例,能夠將MySQL的數據恢復分爲:冷備份、溫備份、熱備份。

一、冷備份:

冷備份是指中止MySQL服務的運行後在進行數據備份,這種備份方法很是簡單,可是在服務繁忙的系統中,並不容許這樣作。

二、溫備份: 溫備份介於熱備份與冷備份之間,溫備份容許MySQL服務實例繼續運行,備份數據期間,溫備份藉助讀鎖機制保證備份期間,沒有新的數據寫入。例如經常會執行以下命令來進行溫備份:

flush tables with read lock;

三、熱備份:

熱備份是指不須要中止MySQL服務實例運行,備份數據的方法。若是數據庫的更新操做較爲頻繁,在數據備份期間,備份過的數據可能早已發生變化,所以熱備份的實現方式較爲複雜。一般熱備份須要藉助第三方工具實現,例如:

MySQL提供了自帶工具mysqlhotcopy 實現了MyISAM引擎的熱備份。
percona公司的Xtrabackup工具實現了對InnoDB表的熱備份。

徹底備份、增量備份

按照副本文件的缺失程度能夠將數據備份分爲徹底備份以及增量備份。

一、徹底備份:

徹底備份是一個完整的數據備份,僅僅依靠該副本文件就能夠將數據庫恢復到某個正確的狀態。若是不借助熱備份工具,徹底備份可能須要中止MySQL服務。此時MySQL將沒法提供服務,在真實的業務場景中,不多真正使用徹底備份。

二、增量備份:

增量備份是指在徹底備份的基礎上,對更新的數據進行備份,恢復時須要藉助徹底備份產生的副本文件,目前,MySQL尚未提供真正的增量備份工具。數據庫管理人員可使用熱備份工具模擬實現增量備份,也能夠經過從新執行二進制日誌中的更新語句模擬實現增量備份。

1、邏輯備份與邏輯恢復

邏輯備份與邏輯恢復的最大優勢在於,對於不一樣存儲引擎的表,均可以採用一樣的邏輯備份方法產生副本文件。採用一樣的恢復方法將數據恢復到某個正確的狀態中。若是數據庫中有多個存儲引擎,選用邏輯備份恢復數據會簡單一點。邏輯備份經常使用的有select ... into outfile ,以及mysqldump工具。前者產生的副本文件爲指定格式的文本文件,後者產生的副本文件既能夠是指定格式的文本文件也能夠是SQL腳本文件。邏輯恢復經常使用的工具備load data in file 以及 mysqlimport

使用select ...into outfile備份數據

語法格式以下: select 語句 into outfile 文本文件 文本文件選項和參數以下:

fields terminated by '字符串' : 字符串分割符,默認是製表符'\t'
fileds escaped by ’字符‘ : 轉義字符,默認是’\‘
fileds [optionally] enclose by 字符’‘: 字段引用符,負責向字段值兩端加上字段引用符。若是使用optionally 選項,則表示字符串類型上添加字段分隔符。
lines starting by '字符串',每條記錄前添加該字段。
lines terminated by ’字符串‘,每條記錄後添加該字符串,默認是換行符 ‘\n’

例如:

mysql> select * from classes into outfile 'data_back' fields terminated by '|';

結果會生成在data目錄下,對應的數據庫目錄下面。能夠直接使用cat命令查看。

恢復表數據:

一、使用load data infile...快速地從一個指定格式的文本文件中讀取數據到一個數據庫表中。

更復雜的配置就不寫了,沒什麼必要,還增長大腦的負擔。等用到的時候,去網上查找具體的參數便可,咱們並不擅長記憶這些並不經常使用的選項。 一句話歸納這種邏輯備份的精要:怎麼吃個人,怎麼給我吐出來。怎麼吐出來來,怎麼給我裝進去。選用了什麼樣的分割選項,導入數據的時候就須要使用對應的分割選項去導入數據。 結合我本身平時的工做內容與實踐,基本上不使用這種方式導出。反而使用mysqldump 更多一點。

使用mysqldump 備份數據庫

mysqldump也是MySQL轉儲數據庫經常使用的自帶工具,mysqldump產生副本文件有兩種情形:

一、文件是指定格式的文本文件 二、是能夠執行的SQL腳本文件

使用方法有如下3種:

一、備份指定的多個數據庫。

mysqldump -u root -p --databases choose test > roverliang.sql

二、備份全部的數據庫

mysqldump -u root -p --all-databases choose test > roverliang.sql

三、備份指定數據庫中的某些表

mysqldump -u root -p  choose test > roverliang.sql

mysqldump 完整的參數是:

mysqldump -u USER_NAME -p PASSWORD [其餘選項] DB [其餘數據庫庫表]

--default-character-set: 設置字符集

--single-transaction : 將導出設置成事務

--no-data : 導出的SQL腳本中,將只包含建立表的create 語句。

--add-drop-table :導出的腳本中,包含 drop table if exists

--routines導出存儲過程及函數

--events導出事件

--triggers導出觸發器

導入mysqldump 的數據文件

一句命令就能搞定,在mysql終端下執行:
命令格式:
source FILE_PATH
source ~/demo.sql

2、MySQL物理備份與熱備份

這一部分介紹兩款熱備份工具:mysqlhotcopyXtrabackup;

其中mysqlhotcopy 是mysql自帶的熱備份工具,但僅可以備份MyISAM引擎的數據,而Xtrabackup 則能夠備份InnoDB引擎和MyISAM引擎的數據,操做複雜。

Xtrabackup 的下載地址

MySQL數據庫中,表的存儲引擎不一樣,與之對應的文件類型也不相同。以MyISAM存儲引擎爲例,每張表有都會有3個文件,分別是表結構定義文件(frm),表索引文件(MYI),表數據文件(MYD)。那麼備份的時候只須要物理的複製這三個文件就能完成備份。而InnoDB引擎爲了維護事務安全,則要複雜的多。若是你看過前文的日誌的話,就明白每一個InnoDB都會存在frm表定義文件,InnoDB的數據和索引是在一個文件裏面,稱做表空間文件(共享表空間文件,獨享表空間)。重作日誌(redo)記錄在iblogfile0 和iblogfile1中。回滾日誌(undo)則記錄在表空間文件中,共享表空間文件(ibdata1)或者獨享表空間文件(ibd)中。關於InnoDB事務日誌詳情可查看MySQL系統日誌。所以備份InnoDB表引擎的表時,上面提到的幾個文件都要備份到。

有前文提到,冷、熱、溫備份的本質在因而否可以繼續提供服務,根據提供服務的級別,纔有了冷、熱、溫之分。

MyISAM 表物理備份、熱備份工具 使用很是簡單,可是我仍是折騰了挺長的時間。先是mac mysql 5.7 版本去掉了mysqlhotbin腳本。而後登錄本身的阿里雲服務器,安裝一些mysqlhotcopy依賴的時候,報錯沒法解決。而後切換到本身的內網虛擬機,才最終解決了這個問題。 如安裝遇到問題:可參考mysqlhotbin

mysqlhotcopy -u USER_NAME -p  USER_PASSWORD -addtodest DB1 DB2 DB3.table1 > PATH/TOSAVE.sql
另外能夠在在my.cnf中配置密碼:
[mysqlhotcopy]
interactive-timeout
user=root
password=123456
port=3306

Xtrabackup 因爲內容較多,也比較難以操做。所以須要單獨一篇博客去介紹。

接下來,會陸續的將MySQL的主從複製,以及MySQL安全優化方面的博客寫出來。

相關文章
相關標籤/搜索