MySQL數據庫完全備份與增量備份詳解
定義
完全備份就是將數據庫中的數據及所有對象全部備份。
由於 MySQL 服務器中的數據文件是基於磁盤的文本文件,所以完全備份就是復制數據庫文件,是最簡單也是最快速的方式。
但 MySQL 服務器的數據文件在服務器運行期間,總是處於打開狀態,為實現真正的完全備份,需要先停止 MySQL 數據庫服務器。
為瞭保障數據的完整性,在停止 MySQL 服務器之前,需要先執行 flush tables 語句將所有數據寫入到數據文件中。對於該方法同學們隻需瞭解,因為將生產環境下的數據庫停下來做備份是不可取的。
使用 mysqldump 命令實現對表、數據庫、數據庫系統進行備份:
mysqldump [-h主機名] –u用戶名 –p密碼 --lock-all-tables --database [tables] > 文件名
-h 主機名,可省略,表示本地服務器,–lock-all-tables 對要備份的數據庫的所有表施加讀鎖(在這個過程中,數據庫嚴格處於 read only 狀態),–database 後面可以加上需要備份的表,沒有指定表名,則表示備份整個數據庫。
完全備份與恢復演示
準備一張 student 表,將該表建在 world 數據庫中。
建表:
CREATE DATABASE world; USE world; CREATE TABLE student( stuId INT(10) NOT NULL, stuName VARCHAR(10) NOT NULL, stuAge INT(10) NOT NULL, PRIMARY KEY(stuId) );
插入數據:
INSERT INTO student(stuId, stuName, stuAge) VALUES(1, 'zhangsan', 18), (2, 'lisi', 19),(3, 'wangwu', 18);
使用 flush tables;
語句將所有數據寫入到數據文件中:
FLUSH TABLES;
退出 mysql 環境,使用 mysqldump 命令對數據庫 world 進行完全備份:
mysqldump -u root -p --lock-all-tables --databases world > /tmp/world.sql
進入 /tmp 目錄下,查看備份文件:
cd /tmp ls
現在,我們對 world 這個庫已經做瞭完全備份,不怕其數據丟失。
模擬 world 數據庫中的 student 表丟失:
DROP TABLE student;
確認表被刪除
SHOW TABLES;
使用 mysql 命令恢復數據庫:
mysql -uroot -p < /tmp/world.sql
進入 mysql 環境,查看恢復結果:
SHOW TABLES;
輸出結果:
驗證表中數據:
SELECT * FROM student;
增量備份是對上次完全備份或增量備份以來改變瞭的數據進行備份,依賴二進制日志文件,需要開啟數據庫的 binlog 日志。先對數據庫進行一次全量備份,備份同時將 binlog 日志刷新,在這次備份之後的所有操作都會記錄在新增的 binlog 日志當中,我們隻需要對增加的 binlog 進行備份,就實現瞭對不斷增加內容的數據庫的完美備份瞭。當數據庫出現異常的時候,我們可以先恢復最近一次的全量備份,接著將增量備份的文件一個一個按順序恢復即可實現數據庫恢復。
到此這篇關於MySQL數據庫完全備份與增量備份詳解的文章就介紹到這瞭,更多相關MySQL數據庫備份內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- MySQL數據備份之mysqldump的使用方法
- MySQL之權限以及設計數據庫案例講解
- mysql主從同步原理及應用場景示例詳解
- 一篇文章搞懂MySQL加鎖機制
- MySQL基礎快速入門知識總結(附思維導圖)