MySQL數(shù)據(jù)庫完全備份與增量備份詳解
定義
完全備份就是將數(shù)據(jù)庫中的數(shù)據(jù)及所有對象全部備份。
由于 MySQL 服務(wù)器中的數(shù)據(jù)文件是基于磁盤的文本文件,所以完全備份就是復(fù)制數(shù)據(jù)庫文件,是最簡單也是最快速的方式。
但 MySQL 服務(wù)器的數(shù)據(jù)文件在服務(wù)器運行期間,總是處于打開狀態(tài),為實現(xiàn)真正的完全備份,需要先停止 MySQL 數(shù)據(jù)庫服務(wù)器。
為了保障數(shù)據(jù)的完整性,在停止 MySQL 服務(wù)器之前,需要先執(zhí)行 flush tables 語句將所有數(shù)據(jù)寫入到數(shù)據(jù)文件中。對于該方法同學(xué)們只需了解,因為將生產(chǎn)環(huán)境下的數(shù)據(jù)庫停下來做備份是不可取的。
使用 mysqldump 命令實現(xiàn)對表、數(shù)據(jù)庫、數(shù)據(jù)庫系統(tǒng)進行備份:
mysqldump [-h主機名] –u用戶名 –p密碼 --lock-all-tables --database [tables] > 文件名
-h 主機名,可省略,表示本地服務(wù)器,--lock-all-tables 對要備份的數(shù)據(jù)庫的所有表施加讀鎖(在這個過程中,數(shù)據(jù)庫嚴(yán)格處于 read only 狀態(tài)),--database 后面可以加上需要備份的表,沒有指定表名,則表示備份整個數(shù)據(jù)庫。
完全備份與恢復(fù)演示
準(zhǔn)備一張 student 表,將該表建在 world 數(shù)據(jù)庫中。
建表:
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)
);插入數(shù)據(jù):
INSERT INTO student(stuId, stuName, stuAge) VALUES(1, 'zhangsan', 18), (2, 'lisi', 19),(3, 'wangwu', 18);

使用 flush tables; 語句將所有數(shù)據(jù)寫入到數(shù)據(jù)文件中:
FLUSH TABLES;
退出 mysql 環(huán)境,使用 mysqldump 命令對數(shù)據(jù)庫 world 進行完全備份:
mysqldump -u root -p --lock-all-tables --databases world > /tmp/world.sql
進入 /tmp 目錄下,查看備份文件:
cd /tmp ls
現(xiàn)在,我們對 world 這個庫已經(jīng)做了完全備份,不怕其數(shù)據(jù)丟失。
模擬 world 數(shù)據(jù)庫中的 student 表丟失:
DROP TABLE student;
確認表被刪除
SHOW TABLES;

使用 mysql 命令恢復(fù)數(shù)據(jù)庫:
mysql -uroot -p < /tmp/world.sql
進入 mysql 環(huán)境,查看恢復(fù)結(jié)果:
SHOW TABLES;
輸出結(jié)果:

驗證表中數(shù)據(jù):
SELECT * FROM student;

增量備份是對上次完全備份或增量備份以來改變了的數(shù)據(jù)進行備份,依賴二進制日志文件,需要開啟數(shù)據(jù)庫的 binlog 日志。先對數(shù)據(jù)庫進行一次全量備份,備份同時將 binlog 日志刷新,在這次備份之后的所有操作都會記錄在新增的 binlog 日志當(dāng)中,我們只需要對增加的 binlog 進行備份,就實現(xiàn)了對不斷增加內(nèi)容的數(shù)據(jù)庫的完美備份了。當(dāng)數(shù)據(jù)庫出現(xiàn)異常的時候,我們可以先恢復(fù)最近一次的全量備份,接著將增量備份的文件一個一個按順序恢復(fù)即可實現(xiàn)數(shù)據(jù)庫恢復(fù)。
到此這篇關(guān)于MySQL數(shù)據(jù)庫完全備份與增量備份詳解的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)庫備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql遞歸函數(shù)with?recursive的用法舉例
在實際開發(fā)的過程中,我們會遇到一些數(shù)據(jù)是層級關(guān)系的、要展示數(shù)據(jù)子父級關(guān)系的時候,下面這篇文章主要給大家介紹了關(guān)于mysql遞歸函數(shù)with?recursive的用法舉例,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08
一次docker登錄mysql報錯問題的實戰(zhàn)記錄
這篇文章主要給大家介紹了一次docker登錄mysql報錯問題的實戰(zhàn)記錄,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用docker具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-01-01
insert...on?duplicate?key?update語法詳解
本文主要介紹了insert...on?duplicate?key?update語法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
MySQL字符串索引更合理的創(chuàng)建規(guī)則討論
這篇文章主要給大家介紹了關(guān)于MySQL字符串索引更合理的創(chuàng)建規(guī)則,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

