主頁 > 知識庫 > Mysql實現(xiàn)企業(yè)級日志管理、備份與恢復(fù)的實戰(zhàn)教程

Mysql實現(xiàn)企業(yè)級日志管理、備份與恢復(fù)的實戰(zhàn)教程

熱門標(biāo)簽:呼叫中心市場需求 Linux服務(wù)器 網(wǎng)站排名優(yōu)化 地方門戶網(wǎng)站 百度競價排名 AI電銷 鐵路電話系統(tǒng) 服務(wù)外包

背景

隨著業(yè)務(wù)的發(fā)展,公司業(yè)務(wù)和規(guī)模不斷擴大,網(wǎng)站積累了大量的用戶信息和數(shù)據(jù),對于一家互聯(lián)網(wǎng)公司來說,用戶和業(yè)務(wù)數(shù)據(jù)是根基。一旦公司的數(shù)據(jù)錯亂或者丟失,對于互聯(lián)網(wǎng)公司而言就等于說是滅頂之災(zāi),為防止系統(tǒng)出現(xiàn)操作失誤或系統(tǒng)故障導(dǎo)致數(shù)據(jù)丟失,公司要求加強用戶數(shù)據(jù)的可靠性,要求全面加強數(shù)據(jù)層面?zhèn)浞荩⒛茉诠收习l(fā)生時第一時間恢復(fù)。

數(shù)據(jù)備份形式

文件備份:

通過Linux的備份命令把文件統(tǒng)一打個包存起來,可存在本地和遠程服務(wù)器,等到要恢復(fù)時,再用這些文件恢復(fù)到指定位置。

數(shù)據(jù)庫數(shù)據(jù)備份:

在一些對數(shù)據(jù)可靠性要求很高的行業(yè)如銀行、證券、電信等,如果發(fā)生意外停機或數(shù)據(jù)丟失其損失會十分慘重。為此數(shù)據(jù)庫管理員應(yīng)針對具體的業(yè)務(wù)要求制定詳細的數(shù)據(jù)庫備份與災(zāi)難恢復(fù)策略,并通過模擬故障對每

種可能的情況進行嚴(yán)格測試,只有這樣才能保證數(shù)據(jù)的高可用性。數(shù)據(jù)庫的備份是一個長期的過程,而恢復(fù)只在發(fā)生事故后進行,恢復(fù)可以看作是備份的逆過程,恢復(fù)的程度的好壞很大程度上依賴于備份的情況。此外,

數(shù)據(jù)庫管理員在恢復(fù)時采取的步驟正確與否也直接影響最終的恢復(fù)結(jié)果。

數(shù)據(jù)備份類型

按業(yè)務(wù)劃分: 可分為完全備份、增量備份、差異備份

1、完全備份:就是對整個數(shù)據(jù)庫的數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)進行備份

優(yōu)點:直觀,容易被人理解

缺點:1.備份的數(shù)據(jù)有大量的數(shù)據(jù)都是重復(fù)的,占用了大量的空間,增加成本

2.備份的數(shù)據(jù)量大,所需時間較長

(Full Backup) 所謂全備份就是對整個數(shù)據(jù)庫的數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)進行備份。這種備份方式的好處就是很直觀,容易被人理解。而且當(dāng)發(fā)生數(shù)據(jù)丟失的災(zāi)難時,只要用災(zāi)難之前的備份文件,就可以恢復(fù)丟失的數(shù)據(jù)。

然而它也有不足之處:首先由于每天都對系統(tǒng)進行完全備份,因此在備份數(shù)據(jù)中有大量是重復(fù)的。這些重復(fù)的數(shù)據(jù)占用了大量的空間,這對用戶來說就意味著增加成本;其次,由于需要備份的數(shù)據(jù)量相當(dāng)大,因此備份所需時間較長。對于那些業(yè)務(wù)繁忙,備份窗口時間有限的單位來說,選擇這種備份策略無疑是不明智的。

2、增量備份(Incremental Backup):每次備份的數(shù)據(jù)只是相當(dāng)于上次備份后增加和修改過的數(shù)據(jù)。

優(yōu)點:沒有重復(fù)備份的數(shù)據(jù),節(jié)省空間

缺點:恢復(fù)數(shù)據(jù)比較麻煩,其中任何一個備份數(shù)據(jù)出了問題都會導(dǎo)致數(shù)據(jù)丟失

就是每次備份的數(shù)據(jù)只是相當(dāng)于上一次備份后增加的和修改過的數(shù)據(jù)。這種備份的優(yōu)點很明顯:沒有重復(fù)的備份數(shù)據(jù),即節(jié)省空間,又縮短了備份時間。但它的缺點在于當(dāng)發(fā)生災(zāi)難時,恢復(fù)數(shù)據(jù)比較麻煩。舉例來說,如

果系統(tǒng)在星期四的早晨發(fā)生故障,丟失大批數(shù)據(jù),那么現(xiàn)在就需要將系統(tǒng)恢復(fù)到星期三晚上的狀態(tài)。

這時管理員需要首先找出星期一的那份完全備份數(shù)據(jù)進行系統(tǒng)恢復(fù),然后再找出星期二的數(shù)據(jù)來恢復(fù)星期二的數(shù)據(jù),然后在找出星期三的數(shù)據(jù)來恢復(fù)星期三的數(shù)據(jù)。 很明顯這比第一種策略要麻煩得多。另外這種備份可靠

性也差。在這種備份下,各備份數(shù)據(jù)間的關(guān)系就象鏈子一樣,一環(huán)套一環(huán),其中任何一個備份數(shù)據(jù)出了問題都會導(dǎo)致整條鏈子脫節(jié)。

3、差異備份(Differential Backup):每次備份的數(shù)據(jù)相當(dāng)于上一次全備份之后新增加和修改過的數(shù)據(jù)。

就是每次備份的數(shù)據(jù)是相對于上一次全備份之后新增加的和修改過的數(shù)據(jù)。管理員先在星期一進行一次系統(tǒng)完全備份;然后在接下來的幾天里,管理員再將當(dāng)天 所有與星期一不同的數(shù)據(jù)(新的或經(jīng)改動的)備份到磁帶上。舉例來說,在星期一,網(wǎng)絡(luò)管理員按慣例進行系統(tǒng)完全備份;在星期二,假設(shè)系統(tǒng)內(nèi)只多了一個資產(chǎn)清 單,于是管理員只需將這份資產(chǎn)清單一并備份下來即可;在星期三,系統(tǒng)內(nèi)又多了一份產(chǎn)品目錄,于是管理員

不僅要將這份目錄,還要連同星期二的那份資產(chǎn)清單一 并備份下來。

如果在星期四系統(tǒng)內(nèi)有多了一張工資表,那么星期四需要備份的內(nèi)容就是:工資表+產(chǎn)品目錄+資產(chǎn)清單。 由此可以看出,全備份所需時間最長,但恢復(fù)時間最短,操作最方便,當(dāng)系統(tǒng)中數(shù)據(jù)量不大時,采用全備份最可靠;差異備份可避免另外兩種策略缺陷,但不同備份類型可以存在一定組合不同備份類型可以存在一定組合不同備份類型可以存在一定組合不同備份類型可以存在一定組合。

不同備份類型組合應(yīng)用的示例

完全備份和差異備份

在星期一進行完全備份,在星期二至星期五進行差異備份。如果在星期五數(shù)據(jù)被破壞了,則你只需要還原星期一完全的備份和星期四的差異備份。這種策略備份數(shù)據(jù)需要較多的時間,但還原數(shù)據(jù)使用較少的時間。

完全備份和增量備份

在星期一進行完全備份,在星期二至星期五進行增量備份。如果在星期五數(shù)據(jù)被破壞了,則你需要還原星期一正常的備份和從星期二至星期五的所有增量備份。這種策略備份數(shù)據(jù)需要較少的時間,但還原數(shù)據(jù)使用較多的時間。

按方式劃分:可分為熱備、溫備、冷備

熱備份(Hot Backup)是指在數(shù)據(jù)庫運行中直接備份,對正在運行的數(shù)據(jù)庫沒有任何影響。

冷備份(Cold Backup)是指在數(shù)據(jù)庫停止的情況下進行備份,這種備份最為簡單,一般只需要拷貝相關(guān)的數(shù)據(jù)庫物理文件即可。

溫備份(Warm Backup)備份同樣是在數(shù)據(jù)庫運行時進行,但是會對當(dāng)前數(shù)據(jù)庫的操作有所影響,例如加一個全局讀鎖以保證備份數(shù)據(jù)的一致性。(當(dāng)你備份數(shù)據(jù)庫中的一個表時,先把這個表鎖起來,不讓別人來增查刪改表中的數(shù)據(jù),這樣你在備份的時候,該表中的數(shù)據(jù)就不會發(fā)生變化,保證了備份數(shù)據(jù)的一致性)

物理備份:直接復(fù)制數(shù)據(jù)文件進行的備份(直接復(fù)制備份的數(shù)據(jù)文件是二進制格式的)

優(yōu)點:無需額外工具,直接copy即可,恢復(fù)直接復(fù)制備份文件即可

缺點:與存儲引擎有關(guān),跨平臺能力較弱

邏輯備份:從數(shù)據(jù)庫中"導(dǎo)出"數(shù)據(jù)另存而進行的備份(將sql語句給導(dǎo)出到一個文本中,比二進制格式的文件大)

優(yōu)點: 能使用編輯器處理,恢復(fù)簡單,能基于網(wǎng)絡(luò)恢復(fù),有助于避免數(shù)據(jù)損壞

缺點: 備份文件較大,備份較慢,無法保證浮點數(shù)的精度,使用邏輯備份數(shù)據(jù)恢復(fù)后,還需手動重建索引,十分消耗CPU資源

備份流程圖

Mysql日志介紹

MySQL日志:

主要包含:錯誤日志、查詢?nèi)罩?、慢查詢?nèi)罩?、事?wù)日志、二進制日志等;

日志是mysql數(shù)據(jù)庫的重要組成部分。日志文件中記錄著mysql數(shù)據(jù)庫運行期間發(fā)生的變化;也就是說用來記

錄mysql數(shù)據(jù)庫的客戶端連接狀況、SQL語句的執(zhí)行情況和錯誤信息等。當(dāng)數(shù)據(jù)庫遭到意外的損壞時,可以通

過日志查看文件出錯的原因,并且可以通過日志文件進行數(shù)據(jù)恢復(fù)。

Mysql錯誤日志

在mysql數(shù)據(jù)庫中,錯誤日志功能是默認(rèn)開啟的。并且,錯誤日志無法被禁止。默認(rèn)情況下,錯誤日志存儲在mysql數(shù)據(jù)庫的數(shù)據(jù)文件中。錯誤日志文件通常的名稱為hostname.err。其中,hostname表示服務(wù)器主機名。

錯誤日志信息可以自己進行配置的,錯誤日志所記錄的信息是可以通過logerror和log-warnings來定義的,其中l(wèi)og-err是定義是否啟用錯誤日志的功能和錯誤日志的存儲位置,log-warnings是定義是否將警告信息也定義至錯誤日志中。默認(rèn)情況下錯誤日志大概記錄以下幾個方面的信息:服務(wù)器啟動和關(guān)閉過程中的信息(未必是錯誤信息,如mysql如何啟動InnoDB的表空間文件的、如何初始化自己的存儲引擎的等等)、服務(wù)器運行過程中的錯誤信息、事件調(diào)度器運行一個事件時產(chǎn)生的信息、在從服務(wù)器上啟動服務(wù)器進程時產(chǎn)生的信息。

mysql -uroot -p

select globle variables like '%log%';

可以通過配置文件來修改log_error

vim /etc/my.cnf //如下圖:我將錯誤日志的路徑改為/var/log/mariadb/mariadb.err

log-error=/var/log/mariadb/mariadb.err

然后重啟數(shù)據(jù)庫服務(wù)連接數(shù)據(jù)庫查看全局日志,修改成功

查看錯誤日志的內(nèi)容

臨時修改:

Mysql錯誤日志中,log_error可以直接定義為文件路徑,也可以為ON|OFF;

log_warings只能使用1|0來定義開關(guān)啟動。

永久修改:

更改錯誤日志位置可以使用log_error來設(shè)置形式如下:

[root@stu18 data]# vim /etc/my.cnf

[mysqld]

Log_error=DIR/[filename]

解析:其中,DIR參數(shù)指定錯誤日志的路徑filename參數(shù)是錯誤日志的名稱,沒有指定該參數(shù)時默認(rèn)為主機名。修改配置文件重啟mysql服務(wù)器即可生效。

注意:在mysql5.5.7之前:數(shù)據(jù)庫管理員可以刪除很長時間之前的錯誤日志,以保證mysql服務(wù)器上的硬盤空間。mysql數(shù)據(jù)庫中,可以使用mysqladmin命令開啟新的錯誤日志。

mysqladmin命令的語法如下:

mysqladmin –u root –pflush-logs也可以使用登錄mysql數(shù)據(jù)庫中使用FLUSHLOGS語句來開啟新的錯誤日志。

Mysql查詢?nèi)罩?/span>

默認(rèn)情況下查詢?nèi)罩臼顷P(guān)閉的。由于查詢?nèi)罩緯涗浻脩舻乃胁僮?,其中還包含增刪查改等信息,在并發(fā)操作大的環(huán)境下會產(chǎn)生大量的信息從而導(dǎo)致不必要的磁盤IO,會影響mysql的性能的。如若不是為了調(diào)試數(shù)據(jù)庫的目的建議不要開啟查詢?nèi)罩尽?/p>

mysql

show global variables like '%log%';

Mysql慢查詢?nèi)罩?/span>

慢查詢?nèi)罩臼怯脕碛涗泩?zhí)行時間超過指定時間的查詢語句。通過慢查詢?nèi)罩荆梢圆檎页瞿男┎樵冋Z句的執(zhí)行效率很低(有些查詢語句的執(zhí)行時間比較長,要把這些查詢語句找出清除,來優(yōu)化服務(wù)器性能),以便進行優(yōu)化。強烈建議開啟,它對服務(wù)器性能的影響微乎其微,但是可以記錄mysql服務(wù)器上執(zhí)行了很長時間的查詢語句??梢詭椭覀兌ㄎ恍阅軉栴}的。

啟動和設(shè)置慢查詢?nèi)罩荆?/strong>

1、通過配置文件my.cnf中的log-slow-queries選項可以開啟慢查詢?nèi)罩荆?/span>

形式如下:

vim /etc/my.cnf

[mysqld]

slow-query-log = ON

slow-query-log-file = /var/log/mariadb/slow.log

long-query-time = 0.01

其中,DIR參數(shù)指定慢查詢?nèi)罩镜拇鎯β窂?;filename參數(shù)指定日志的文件名,生成日志文件的完成名稱為filename-slow.log。如果不指定存儲路徑,慢查詢?nèi)罩灸J(rèn)存儲到mysql數(shù)據(jù)庫的數(shù)據(jù)文件下,如果不指定文件名,默認(rèn)文件名為hostname-slow.log

2、通過登錄mysql服務(wù)器直接定義

方式如下:

首先要有全局權(quán)限;然后執(zhí)行mysql>set global slow_query_log=1;(臨時生效,sql語句執(zhí)行時間超過1s就被成為慢查詢?nèi)罩荆?/p>

時間默認(rèn)超過多少的稱為慢查詢?nèi)罩荆?/p>

一般都是通過long_query_time選項來設(shè)置這個時間值,時間以秒為單位,可以精確到微秒。如果查詢時間超過了這個時間值(默認(rèn)為10秒),這個查詢語句將被記錄到慢查詢?nèi)罩局?。查看服?wù)器默認(rèn)時間值方式如下:

注釋:其中這個慢查詢時間并不是只表示語句自身執(zhí)行超過10秒還包含由于其他資源被征用造成阻塞的查詢執(zhí)行時間或其他原因等都被記錄到慢查詢中。所以這個慢查的時長表示從查詢開始到查詢結(jié)束中間包含可能的任何原因所經(jīng)歷的所有時間。

查看慢查詢?nèi)罩緝?nèi)容

Mysql事務(wù)日志

事務(wù):事務(wù)就是一系列操作的集合,一系列操作之后需要提交,提交之后,這一系列操作才能被稱為事務(wù)。(要么操作都執(zhí)行,要么都不執(zhí)行)

事務(wù)日志(InnoDB特有的日志)可以幫助提高事務(wù)的效率。使用事務(wù)日志,存儲引擎在修改表的數(shù)據(jù)時只需要修改其內(nèi)存拷貝,再把改修改行為記錄到持久在硬盤上的事務(wù)日志中,而不用每次都將修改的數(shù)據(jù)本身持久到磁盤。事務(wù)日志采用追加的方式,因此寫日志的操作是磁盤上一小塊區(qū)域內(nèi)的順序I/O,而不像隨機I/O需要在磁盤的多個地方移動磁頭,所以采用事務(wù)日志的方式相對來說要快得多。事務(wù)日志持久以后,內(nèi)存中被修改的數(shù)據(jù)在后臺可以慢慢的刷回到磁盤。目前大多數(shù)的存儲引擎都是這樣實現(xiàn)的,我們通常稱之為預(yù)寫式日志,修改數(shù)據(jù)需要寫兩次磁盤。

mysql基于事務(wù)的操作,會直接把對應(yīng)內(nèi)存中的數(shù)據(jù)給改掉,改完之后,去查看,都已經(jīng)生效,但是并沒有網(wǎng)磁盤上去寫,他是先寫到事務(wù)日志里面,然后再定期的往磁盤上去刷(事務(wù)日志采用追加的方式,往磁盤上寫,是按照順序來寫的,大大提高了事務(wù)的效率)

如果數(shù)據(jù)的修改已經(jīng)記錄到事務(wù)日志并持久化,但數(shù)據(jù)本身還沒有寫回磁盤,此時系統(tǒng)崩潰,存儲引擎在重啟時能夠自動恢復(fù)這部分修改的數(shù)據(jù)。具有的恢復(fù)方式則視存儲引擎而定。

innodb引擎是支持事務(wù)的引擎

查看事務(wù)日志的定義

show global variables like '%log%';

Mysql二進制日志

二進制日志也叫作變更日志,主要用于記錄修改數(shù)據(jù)或有可能引起數(shù)據(jù)改變的mysql語句,并且記錄了語句發(fā)生時間、執(zhí)行時長、操作的數(shù)據(jù)等等。所以說通過二進制日志可以查詢mysql數(shù)據(jù)庫中進行了哪些變化。一般大小體積上限為1G

show global variables like '%log%';

sql_log_bin ={ON|OFF} #用于控制會話級別(連上mysql執(zhí)行一個操作語句,這就是會話級別的,比如說直接用一個文件導(dǎo)入mysql,這就不算會話級別的)二進制日志功能的開啟或關(guān)閉。默認(rèn)為ON,表示啟用記錄功能。用戶可以在會話級別修改此變量的值,但其必須具有SUPER權(quán)限。

binlog_cache_size =32768 #默認(rèn)值32768 Binlog Cache用于在打開了二進制日志(binlog)記錄功能的環(huán)境,是MySQL 用來提高binlog的記錄效率而設(shè)計的一個用于短時間內(nèi)臨時緩存binlog數(shù)據(jù)的內(nèi)存區(qū)域。一般來說,如果我們的數(shù)據(jù)庫中沒有什么大事務(wù),寫入也不是特別頻繁,2MB~4MB是一個合適的選擇。但是如果我們的數(shù)據(jù)庫大事務(wù)較多,寫入量比較大,可與適當(dāng)調(diào)高binlog_cache_size。同時,我們可以通過binlog_cache_use 以及binlog_cache_disk_use來分析設(shè)置的binlog_cache_size是否足夠,是否有大量的binlog_cache由于內(nèi)存大小不夠而使用臨時文件(binlog_cache_disk_use)來緩存了。

log_bin = mysql-bin #指定binlog的位置,默認(rèn)在數(shù)據(jù)目錄下。

binlog-format= {ROW|STATEMENT|MIXED} #指定二進制日志的類型,建議為MIXED。如果設(shè)定了二進制日志的格式,卻沒有啟用二進制日志,則MySQL啟動時會產(chǎn)生警告日志信息并記錄于錯誤日志中。

row:不記錄每條sql語句的上下文關(guān)系,而僅僅記錄每條數(shù)據(jù)被修改了

statement:每一條會修改數(shù)據(jù)的sql語句都會被記錄

mixed:表示前兩者混合

sync_binlog = 10 #設(shè)定多久同步一次二進制日志至磁盤文件中,0表示不同步,任何正數(shù)值都表示對二進制每多少次寫操作之后同步一次。當(dāng)autocommit的值為1時,每條語句的執(zhí)行都會引起二進制日志同步,否則,每個事務(wù)的提交會引起二進制日志同步

通過編輯my.cnf中的log-bin選項可以開啟二進制日志;形式如下:

其中,DIR參數(shù)指定二進制文件的存儲路徑;filename參數(shù)指定二級制文件的文件名,其形式為filename.number,number的形式為000001、000002等。每次重啟mysql服務(wù)或運行mysql> flush logs;都會生成一個新的二進制日志文件,這些日志文件的number會不斷地遞增。除了生成上述的文件外還會生成一個名為filename.index的文件。這個文件中存儲所有二進制日志文件的清單又稱為二進制文件的索引。

每重啟一次數(shù)據(jù)庫服務(wù),就會生成一個二進制日志文件

查看二進制日志:

二進制日志的定義方式為二進制格式;使用此格式可以存儲更多的信息,并且可以使寫入二進制日志的效率更高。但是不能直接使用查看命令打開并查看二進制日志。

小擴展:二進制日志的記錄位置,通常為上一個事件執(zhí)行結(jié)束時間的位置,每一個日志文件本身也有自己的元數(shù)據(jù)所以說對于當(dāng)前版本的mysql來說二進制的開始位置通常為107;

連接mysql,輸入幾條可以修改數(shù)據(jù)的sql語句,從而生成二進制日志

查看指定二進制日志信息

命令行下查看二進制日志:

由于無法使用cat等方式直接打開并查看二進制日志;所以必須使用mysqlbinlog命令。但是當(dāng)正在執(zhí)行mysql讀寫操作時建議不要使用此打開正在使用的二進制日志文件;若非要打開可flushlogs。mysqlbinlog命令的使用方式:

導(dǎo)出此數(shù)據(jù)庫的信息:

[root@stu18 data]#mysqlbinlog mysql-bin.000017 > /tmp/a.sql

導(dǎo)入此數(shù)據(jù)庫的信息:

[root@stu18 data]#mysql a.sql

刪除二進制日志信息:

二進制日志會記錄大量的信息(其中包含一些無用的信息)。如果很長時間不清理二進制日志,將會浪費很多的磁盤空間。但是,刪除之后可能導(dǎo)致數(shù)據(jù)庫崩潰時無法進行恢復(fù),所以若要刪除二進制日志首先將其和數(shù)據(jù)庫備份一份,其中也只能刪除備份前的二進制日志,新產(chǎn)生的日志信息不可刪(可以做即時點還原)。也不可在關(guān)閉mysql服務(wù)器之后直接刪除因為這樣可能會給數(shù)據(jù)庫帶來錯誤的。若非要刪除二進制日志需要做如下操作:導(dǎo)出備份數(shù)據(jù)庫和二進制日志文件進行壓縮歸檔存儲。刪除二進制文件的方法如下:

使用RESET MASTER語句可以刪除所有的二進制日志。該語句的形式如下:

mysql> reset master;

Query OK, 0 rowsaffected (0.17 sec)

mysql> show binary logs;

Mysql備份工具

mysqldump: 邏輯備份工具,適用于所有存儲引擎,可用于溫備,能實現(xiàn)完全備份,部分備份;對InnoDB存儲引擎

支持熱備;

cp, tar等文件系統(tǒng)工具:物理備份工具,適用于所有存儲引擎;用于冷備,能實現(xiàn)完全備份,部分備份;

lvm2的快照:幾乎熱備;借助于文件系統(tǒng)工具實現(xiàn)物理備份;

mysqlhotcopy: 幾乎冷備;僅適用于MyISAM存儲引擎;

Mysql備份方案①mysqldump+binlog: ( 推薦)

完全備份,通過備份二進制日志實現(xiàn)增量備份

②xtrabackup:

對InnoDB:熱備,支持完全備份和增量備份

對MyISAM:溫備,只支持完全備份

③lvm2快照+binlog:

幾乎熱備,物理備份

mysqldump+binlog命令的語法格式

mysqldump [OPTIONS] database [tables]:備份單個庫,或庫指定的一個或多個表

mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2DB3...]:備份一個或多個庫

mysqldump [OPTIONS] --all-databases [OPTIONS]:備份所有庫

其他選項

-x, --lock-all-tables:鎖定所有表

-l, --lock-tables:鎖定備份的表

--single-transaction:啟動一個大的單一事務(wù)實現(xiàn)備份

-C, --compress:壓縮傳輸

-E, --events:備份指定庫的事件調(diào)度器

-R, --routines:備份存儲過程和存儲函數(shù)

--triggers:備份觸發(fā)器

--master-data={0|1|2}

0:不記錄

1:記錄CHANGE MASTER TO語句;此語句未被注釋

2:記錄為注釋語句

-F,--flush-logs:鎖定表之后執(zhí)行flush logs命令

mysqldump+binlog備份與恢復(fù)1.修改mysql配置文件,開啟二進制日志

vim /etc/my.cnf

log-bin = master-log

然后重啟mysql

systemctl restart mariadb

在進入mysql查看是否生成二進制日志

2、準(zhǔn)備備份目錄

3、準(zhǔn)備備份數(shù)據(jù)庫及表

mysql

create database test;

use magedu;

create table m(id int,name char(20));

4、進行完整備份

mysqldump --all-databases --lock-all-tables --flush-log --master-data=2 > /backup/`date +%F_%T`-all.sql

5、向表中插入數(shù)據(jù)

mysql

use magedu;

show master status;

insert into m26 (id,name) values(1,'fuming'),(2,'zhangmeng');

6、進行增量備份,備份二進制日志

mysqlbinlog --start-position=245 --stop-position=479 /var/lib/mysql/master-log.000002 > /backup/binlog/binlog-`date +%F_%T`.sql

判斷position的start和stop

show master logs;

show binlog events in 'master-log.000002';

結(jié)束要包含commit提交。

7、繼續(xù)插入數(shù)據(jù),在沒備份的情況下刪除數(shù)據(jù)庫,模擬誤操作

8、數(shù)據(jù)恢復(fù),由于最后我們沒有備份就刪除了數(shù)據(jù)庫,所以我們首先需要保護最后的二進制日志,如果這些二進制丟了,那就真的恢復(fù)不了了,查看刪除操作之前的position值mysqlbinlog /var/lib/mysql/master-log.000002

9、將最后操作的二進制日志備份

mysqlbinlog --start-position=467 --stop-position=677 /var/lib/mysql/master-log.000002 > /backup/binlog/binlog-`date +%F_%T`.sql

ls /backup/binlog/

10.導(dǎo)入之前的所有備份

mysql /backup/2017-12-07_20\:20\:04-all.sql 導(dǎo)入完整備份

mysql /backup/binlog/binlog-2017-12-07_20\:45\:17.sql 導(dǎo)入增量備份

mysql /backup/binlog/binlog-2017-12-07_21\:05\:42.sql 導(dǎo)入刪掉數(shù)據(jù)庫之前的增量備份

11.查看數(shù)據(jù)庫及數(shù)據(jù)

xtrabackup

Xtrabackup是由percona提供的mysql數(shù)據(jù)庫備份工具,據(jù)官方介紹,是一款開源能夠?qū)nnodb和xtradb數(shù)據(jù)庫進行熱備的工具。

特點:

(1)備份過程快速、可靠

(2)備份過程不會打斷正在執(zhí)行的事務(wù)

(3)能夠基于壓縮等功能節(jié)約磁盤空間和流量

(4)自動實現(xiàn)備份檢驗

(5)還原速度快

實驗步驟:(1)xtrabackup的安裝

yum install percona-xtrabackup -y

(2)完全備份

innobackupex --user=root /backup

(3)添加數(shù)據(jù)

mysql -uroot

create database magedu;

use magedu

create table m26 (id int,name char(20));

insert into m26 values (007,'fuming'),(008,'zhangmeng')

(4)增量備份

innobackupex --incremental /backup/ --incremental-basedir=/backup/2017-11-16_16-53-4

(5)數(shù)據(jù)恢復(fù)準(zhǔn)備
1.執(zhí)行操作(完全備份):

innobackupex --apply-log --redo-only BASE-DIR(BASE-DIR是完全備份的目錄)

例如:innobackupex --apply-log --redo-only BASE-DIR --incrementaldir=/backup/2017-11-16_17-17-52/

2.接著執(zhí)行(增量):

innobackupex --apply-log --redo-only BASE-DIR --incrementaldir=INCREMENTAL-DIR-1(INCREMENTAL-DIR-1是增量備份的目錄)

例如:innobackupex --apply-log --redo-only /backup/2017-11-16_16-53-43 --incrementaldir=/backup/2017-11-16_17-17-52/

(6)恢復(fù)階段,還原數(shù)據(jù)

mv /var/lib/mysql /var/lib/mysql.bak 模擬刪除數(shù)據(jù)庫

mkdir /var/lib/mysql

cd /var/lib/mysql

innobackupex --copy-back /backup/2017-11-16_16-53-43 恢復(fù)完全備份

lvm2快照+binlog

做實驗之前我們先回顧一下lvm2-snapshot的知識

LVM快照簡單來說就是將所快照源分區(qū)一個時間點所有文件的元數(shù)據(jù)進行保存,如果源文件沒有改變,那么訪問快照卷的相應(yīng)文件則直接指向源分區(qū)的源文件,如果源文件發(fā)生改變,則快照卷中與之對應(yīng)的文件不會發(fā)生改變??煺站碇饕糜谳o助備份文件。

實驗步驟:

1、添加硬盤,并劃分磁盤類型為lvm類型

echo '- - -' > /sys/class/scsi_host/host2/scan

2.分區(qū)

t 8e 就是lvm

partx -a /dev/sdb 使內(nèi)核識別新磁盤

3.pvcreate /dev/sdb1 添加物理卷

4.vgcreate myvg /dev/sdb1 添加卷組

5.lvcreate -n mydata -L 5G myvg 添加邏輯卷

6、mkfs.ext4 /dev/mapper/myvg-mydata 格式化邏輯卷

7、掛載mount /dev/mapper/myvg-mydata /lvm_data 使用

8、修改Mysql配置,使得數(shù)據(jù)文件在邏輯卷上 datadir=/lvm_data

9、service mysqld restart 啟動Mysql服務(wù)

10、創(chuàng)建數(shù)據(jù)庫,進行操作

11、mysql> FLUSH TABLES WITH READ LOCK; #鎖定表

12、lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvgmydata

#創(chuàng)建快照卷 Logical volume "mydata-snap" created.

13、mysql> UNLOCK TABLES; #解鎖所有表

14、 mount /dev/myvg/mydata-snap /lvm_snap/ #掛載snap

15、tar cvf /tmp/mysqlback.tar ./* #打包物理備份

16、umount /lvm_snap/ #卸載snap

17、lvremove myvg mydata-snap #刪除snap

18、刪除mysql數(shù)據(jù) rm -rf /lvm_data/*

19、 解壓恢復(fù)刪除數(shù)據(jù) tar xvf /tmp/mysqlback.tar ./

20、驗證數(shù)據(jù)庫數(shù)據(jù)是否正確恢復(fù)

總結(jié)

備份方法

備份速度

回復(fù)速度

便捷性性

功能一般用于

Mysqldump

一般,可無視存儲引擎的差異

一般中小型數(shù)據(jù)量備份

Lvm2快照

支持幾乎熱備,速度快

一般中小型數(shù)據(jù)量備份

Xtrabackup

較快

較快

實現(xiàn)innodb熱備,對存儲引擎要求強大

較大規(guī)模的本分

cp

一般,靈活性低

很弱少量數(shù)據(jù)備份

好了,今天的內(nèi)容就到這里,我們下期再見。

以上這篇Mysql實現(xiàn)企業(yè)級日志管理、備份與恢復(fù)的實戰(zhàn)教程就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解mysql的備份與恢復(fù)
  • MySQL數(shù)據(jù)庫備份恢復(fù)實現(xiàn)代碼
  • mysql全量備份和快速恢復(fù)的方法整理
  • 從MySQL全庫備份中恢復(fù)某個庫和某張表的方法
  • C#實現(xiàn)MySQL命令行備份和恢復(fù)
  • Mysql觸發(fā)器在PHP項目中用來做信息備份、恢復(fù)和清空
  • Navicat for MySQL定時備份數(shù)據(jù)庫及數(shù)據(jù)恢復(fù)詳解
  • 淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))
  • 淺析MySQL 備份與恢復(fù)

標(biāo)簽:崇左 仙桃 銅川 蘭州 湖南 湘潭 衡水 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql實現(xiàn)企業(yè)級日志管理、備份與恢復(fù)的實戰(zhàn)教程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266