首頁 > 軟體

MySQL資料庫完全備份與增量備份詳解

2022-08-10 14:04:26

定義

完全備份就是將資料庫中的資料及所有物件全部備份。

由於 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資料庫備份內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com