1. 程式人生 > >2020重新出發,MySql基礎,MySql資料庫備份與恢復

2020重新出發,MySql基礎,MySql資料庫備份與恢復

@[toc] # MySQL資料庫備份與恢復 儘管採取了一些管理措施來保證資料庫的安全,但是在不確定的意外情況下,總是有可能造成資料的損失。 - 例如,意外的停電,不小心的操作失誤等都可能造成資料的丟失。 所以為了保證資料的安全,我們需要定期對資料進行備份。如果資料庫中的資料出現了錯誤,就需要使用備份好的資料進行資料還原,這樣可以將損失降至最低。 MySQL 提供了多種方法對資料進行備份和恢復。 # 資料庫為什麼需要備份 任何資料庫都需要備份,備份資料是維護資料庫必不可少的操作。 **備份就是為了防止原資料丟失,保證資料的安全。**當資料庫因為某些原因造成部分或者全部資料丟失後,備份檔案可以幫我們找回丟失的資料。 因此,資料備份是很重要的工作。 常見資料庫備份的應用場景如下。 資料丟失應用場景: - 人為操作失誤造成某些資料被誤操作 - 軟體 BUG 造成部分資料或全部資料丟失 - 硬體故障造成資料庫部分資料或全部資料丟失 - 安全漏洞被入侵資料惡意破壞 非資料丟失應用場景: - 特殊應用場景下基於時間點的資料恢復 - 開發測試環境資料庫搭建 - 相同資料庫的新環境搭建 - 資料庫或者資料遷移 以上列出的是一些資料庫備份常見的應用場景,資料庫備份還有其它應用場景,這裡就不一一列舉了。 比如磁碟故障導致整個資料庫所有資料丟失,並且無法從已經出現故障的硬碟上面恢復出來時,可以通過最近時間的整個資料庫的物理或邏輯備份資料檔案,儘可能的將資料恢復到故障之前最近的時間點。 操作失誤造成資料被誤操作後,我們需要有一個能恢復到錯誤操作時間點之前的瞬間的備份檔案存在,當然這個備份可能是整個資料庫的備份,也可以僅僅只是被誤操作的表的備份。 # MySQL備份型別 備份是以防萬一的一種必要手段,在出現硬體損壞或非人為的因素而導致資料丟失時,可以使用備份恢復資料,以將損失降低到最小程度,因此備份是必須的。 備份可以分為以下幾個型別。根據備份的方法(是否需要資料庫離線)可以將備份分為: - 熱備(Hot Backup) - 熱備份可以在資料庫執行中直接備份,對正在執行的資料庫操作沒有任何的影響,資料庫的讀寫操作可以正常執行。這種方式在 MySQL 官方手冊中稱為 Online Backup(線上備份)。 - 按照備份後文件的內容,熱備份又可以分為: - 邏輯備份:在 MySQL 資料庫中,邏輯備份是指備份出的檔案內容是可讀的,一般是文字內容。內容一般是由一條條 SQL 語句,或者是表內實際資料組成。如 mysqldump 和 SELECT * INTO OUTFILE 的方法。這類方法的好處是可以觀察匯出檔案的內容,一般適用於資料庫的升級、遷移等工作。但其缺點是恢復的時間較長。 - 裸檔案備份:裸檔案備份是指複製資料庫的物理檔案,既可以在資料庫執行中進行復制(如 ibbackup、xtrabackup 這類工具),也可以在資料庫停止執行時直接複製資料檔案。這類備份的恢復時間往往比邏輯備份短很多。 - 按照備份資料庫的內容來分,備份又可以分為: - 完全備份:是指對資料庫進行一個完整的備份,即備份整個資料庫,如果資料較多會佔用較大的時間和空間。 - 部分備份:是指備份部分資料庫(例如,只備份一個表)。部分備份又分為: - 增量備份需要使用專業的備份工具。指的是在上次完全備份的基礎上,對更改的資料進行備份。也就是說每次備份只會備份自上次備份之後到備份時間之內產生的資料。因此每次備份都比差異備份節約空間,但是恢復資料麻煩。 - 差異備份指的是自上一次完全備份以來變化的資料。和增量備份相比,浪費空間,但恢復資料比增量備份簡單。 - 冷備(Cold Backup) - 冷備份必須在資料庫停止的情況下進行備份,資料庫的讀寫操作不能執行。這種備份最為簡單,一般只需要複製相關的資料庫物理檔案即可。這種方式在 MySQL 官方手冊中稱為 Offline Backup(離線備份)。 - 溫備(Warm Backup) - 溫備份同樣是在資料庫執行中進行的,但是會對當前資料庫的操作有所影響,備份時僅支援讀操作,不支援寫操作。 MySQL 中進行不同方式的備份還要考慮儲存引擎是否支援,如 **MyISAM 不支援熱備,支援溫備和冷備**。而 **InnoDB 支援熱備、溫備和冷備**。 一般情況下,我們需要備份的資料分為以下幾種: - 表資料 - 二進位制日誌、InnoDB 事務日誌 - 程式碼(儲存過程、儲存函式、觸發器、事件排程器) - 伺服器配置檔案 下面是幾種常用的備份工具: - mysqldump:邏輯備份工具,適用於所有的儲存引擎,支援溫備、完全備份、部分備份、對於 InnoDB 儲存引擎支援熱備。 - cp、tar 等歸檔複製工具:物理備份工具,適用於所有的儲存引擎、冷備、完全備份、部分備份。 - lvm2 snapshot:藉助檔案系統管理工具進行備份。 - mysqlhotcopy:名不副實的一個工具,僅支援 MyISAM 儲存引擎。 - xtrabackup:一款由 percona 提供的非常強大的 InnoDB/XtraDB 熱備工具,支援完全備份、增量備份。 # MySQL熱備份及恢復 熱備份是在資料庫處於執行狀態時直接備份,不影響現有業務的正常進行。熱備份又細分為邏輯備份和裸檔案備份, ## 邏輯備份 邏輯備份的最大優點就是對於各種儲存引擎,都可以用同樣的方法來備份。而冷備份則不同,不同的儲存引擎的備份方法也各不相同。因此,對於不同儲存引擎混合的資料庫,用邏輯備份會更簡單一些。 邏輯備份可以說是最簡單,也是目前中小型系統最常用的備份方法。邏輯備份主要有以下幾種方法: ### mysqldump mysqldump 是 MySQL 自帶的邏輯備份工具。它的備份原理是通過協議連線到 MySQL 資料庫,將需要備份的資料查詢出來,然後將查詢出的資料轉換成對應的 INSERT 語句。當我們需要還原恢復這些資料時,只要執行這些 INSERT 語句,就能將對應的資料還原。所以有的資料也將這種備份方式稱為 INSERT 備份。 恢復資料時可以使用 `mysql -u