淺談MySQL數(shù)據(jù)庫的備份與恢復(fù)
一、MySQL 常見的備份方式
1. 直接拷貝數(shù)據(jù)庫文件(物理拷貝)
2. 使用 mysqldump 工具備份
3. 使用 mysqlhotcopy 工具備份
4. 使用 mysql 的主從同步復(fù)制,實現(xiàn)數(shù)據(jù)實時同步備份
二、MySQL 物理數(shù)據(jù)文件結(jié)構(gòu)介紹
1. 日志文件
錯誤日志 err log
二進(jìn)制日志 binary log
更新日志 update log
查詢?nèi)罩?query log
慢查詢?nèi)罩?slow query log
innodb 的 redo 日志
2. 數(shù)據(jù)文件
>>>對于 myisam 來說:
表結(jié)構(gòu)信息:.frm
數(shù)據(jù)信息:.myd
數(shù)據(jù)索引信息;.myi
>>>對于 Innodb 來說:
獨享表空間:.ibd
共享表空間:.ibdata
3. 系統(tǒng)文件
配置文件:my.cnf
進(jìn)程文件:xxx.pid
socket文件:xxx.sock
4. replication 文件
master.info:存儲在 slave 端目錄下,關(guān)于 master 和 slave 相關(guān)信息
relay log:存儲 I/O 進(jìn)程從 master 讀取的 bin-log 信息,然后由 slave 端的 SQL 線程從該 binary log 中讀取解析過的日志信息,轉(zhuǎn)化成 slave 所能執(zhí)行的 query 語句
index:則是存放 binary log 的路徑,也就是目錄文件
三、使用 mysqldump 備份與恢復(fù)
1. 備份原理
mysqldump 備份原理比較簡單,先查出需要備份的表結(jié)構(gòu),在文本文件中生成一個 create 語句;然后將表中的所有數(shù)據(jù)記錄轉(zhuǎn)換成一條 insert 語句;通過這些語句就能夠創(chuàng)建表并插入數(shù)據(jù)。
2. 備份一個數(shù)據(jù)庫
基本語法:
>>> mysqldump -u username -p dbname table1 table2 ... > BackupName.sql
實例說明:
mysqldump -u root -p test person > /tmp/backup.sql
3. 備份多個數(shù)據(jù)庫
基本語法:
mysqldump -u username -p --databases dbname2 dbname2 > BackupName.sql
實例說明:
mysqldump -u root -p --databases test mysql > /tmp/backup.sql
4. 備份所有數(shù)據(jù)庫
基本語法:
mysqldump -u username -p -all-databases > BackupName.sql
實例說明:
mysqldump -u -root -p -all-databases > /tmp/all.sql
5. 數(shù)據(jù)恢復(fù)
基本語法:
mysql -u root -p [dbname] < backup.sql
實例說明:
mysql -u root -p < /tmp/backup.sql
四、直接復(fù)制數(shù)據(jù)庫目錄
MySQL 有一種非常簡單的備份方法,就是將 MySQL 中的數(shù)據(jù)庫文件直接復(fù)制出來。這是最簡單,速度最快的方法。不過在此之前,要先將服務(wù)器停止,這樣才可以保證在復(fù)制期間數(shù)據(jù)庫的數(shù)據(jù)不會發(fā)生變化。如果在復(fù)制數(shù)據(jù)庫的過程中還有數(shù)據(jù)寫入,就會造成數(shù)據(jù)不一致。這種情況在開發(fā)環(huán)境可以,但是在生產(chǎn)環(huán)境中很難允許備份服務(wù)器。
注意:這種方法不適用于 InnoDB 存儲引擎的表,而對于 MyISAM 存儲引擎的表很方便。同時,還原時 MySQL 的版本最好相同。
相關(guān)文章
生產(chǎn)庫自動化MySQL5.6安裝部署詳細(xì)教程
自動化運(yùn)維是一個DBA應(yīng)該掌握的技術(shù),其中,自動化安裝數(shù)據(jù)庫是一項基本的技能,這篇文章主要介紹了生產(chǎn)庫自動化MySQL5.6安裝部署詳細(xì)教程,需要的朋友可以參考下2016-09-09mysql實現(xiàn)多表關(guān)聯(lián)統(tǒng)計(子查詢統(tǒng)計)示例
這篇文章主要介紹了mysql實現(xiàn)多表關(guān)聯(lián)統(tǒng)計(子查詢統(tǒng)計),結(jié)合具體案例形式分析了mysql多表關(guān)聯(lián)統(tǒng)計的原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-10-10MySQL通過DQL實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的基本查詢
這篇文章給大家介紹了MySQL如何通過DQL進(jìn)行數(shù)據(jù)庫數(shù)據(jù)的基本查詢,文中通過代碼示例和圖文結(jié)合介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01MySQL延遲關(guān)聯(lián)性能優(yōu)化方法
這篇文章主要介紹了MySQL延遲關(guān)聯(lián)性能優(yōu)化方法,本文講解了延遲關(guān)聯(lián)的背景、延遲關(guān)聯(lián)的分析、延遲關(guān)聯(lián)的解決等內(nèi)容,需要的朋友可以參考下2015-05-05詳解MySQL的數(shù)據(jù)行和行溢出機(jī)制
在前面的文章中,白日夢曾不止一次的提及到:InnoDB從磁盤中讀取數(shù)據(jù)的最小單位是數(shù)據(jù)頁。 而你想得到的id = xxx的數(shù)據(jù),就是這個數(shù)據(jù)頁眾多行中的一行。 這篇文章我們就一起來看一下數(shù)據(jù)行設(shè)計的多么巧妙。2020-11-11