MySQL數(shù)據(jù)庫(kù)完全備份與增量備份詳解
定義
完全備份就是將數(shù)據(jù)庫(kù)中的數(shù)據(jù)及所有對(duì)象全部備份。
由于 MySQL 服務(wù)器中的數(shù)據(jù)文件是基于磁盤的文本文件,所以完全備份就是復(fù)制數(shù)據(jù)庫(kù)文件,是最簡(jiǎn)單也是最快速的方式。
但 MySQL 服務(wù)器的數(shù)據(jù)文件在服務(wù)器運(yùn)行期間,總是處于打開狀態(tài),為實(shí)現(xiàn)真正的完全備份,需要先停止 MySQL 數(shù)據(jù)庫(kù)服務(wù)器。
為了保障數(shù)據(jù)的完整性,在停止 MySQL 服務(wù)器之前,需要先執(zhí)行 flush tables 語(yǔ)句將所有數(shù)據(jù)寫入到數(shù)據(jù)文件中。對(duì)于該方法同學(xué)們只需了解,因?yàn)閷⑸a(chǎn)環(huán)境下的數(shù)據(jù)庫(kù)停下來(lái)做備份是不可取的。
使用 mysqldump 命令實(shí)現(xiàn)對(duì)表、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行備份:
mysqldump [-h主機(jī)名] –u用戶名 –p密碼 --lock-all-tables --database [tables] > 文件名
-h 主機(jī)名,可省略,表示本地服務(wù)器,--lock-all-tables 對(duì)要備份的數(shù)據(jù)庫(kù)的所有表施加讀鎖(在這個(gè)過(guò)程中,數(shù)據(jù)庫(kù)嚴(yán)格處于 read only 狀態(tài)),--database 后面可以加上需要備份的表,沒有指定表名,則表示備份整個(gè)數(shù)據(jù)庫(kù)。
完全備份與恢復(fù)演示
準(zhǔn)備一張 student 表,將該表建在 world 數(shù)據(jù)庫(kù)中。
建表:
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; 語(yǔ)句將所有數(shù)據(jù)寫入到數(shù)據(jù)文件中:
FLUSH TABLES;
退出 mysql 環(huán)境,使用 mysqldump 命令對(duì)數(shù)據(jù)庫(kù) world 進(jìn)行完全備份:
mysqldump -u root -p --lock-all-tables --databases world > /tmp/world.sql
進(jìn)入 /tmp 目錄下,查看備份文件:
cd /tmp ls
現(xiàn)在,我們對(duì) world 這個(gè)庫(kù)已經(jīng)做了完全備份,不怕其數(shù)據(jù)丟失。
模擬 world 數(shù)據(jù)庫(kù)中的 student 表丟失:
DROP TABLE student;
確認(rèn)表被刪除
SHOW TABLES;

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

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

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

