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!

推薦閱讀: