MySQL的備份的一些策略和方法的總結

2021-08-11 14:38:57 字數 4499 閱讀 2016

1.一般使用的是mysqldump來進行備份,每次dump的資料是1000條,並且在這個過程中會進行鎖表。

(這種方式是邏輯備份,即直接將資料庫中的資料導成sql語句進行備份的過程)

主要的使用方法:

(1).不帶引數的進行備份:

1

備份test資料庫中的所有表資料和表結構

2 mysqldump -uroot -ppassword test >/tmp/

test.sql34

備份test資料庫中的某個表資料和表結構

5 mysqldump -uroot -ppassword test student >/tmp/test_student.sql

(2).使用-b引數進行備份:(在sql檔案中自動建立原有的資料庫名和連線資料庫)

1

備份test資料庫中的所有表資料和表結構

23 使用-

b會自動的建立資料庫並且使用資料庫

45 mysqldump -uroot -ppassword -b test >/tmp/test.sql

(3).使用-b引數進行多個資料庫的備份:

1  mysqldump --

user root --password=myrootpassword -b db_test db_second db_third > db_test.sql

(4).使用gzip進行壓縮資料檔案進行備份:(使用管道符將資料傳給gzip然後進行壓縮資料成gz的包)

1 mysqldump --

user root --password=myrootpassword -b db_test db_second db_third |gzip > db_test.sql.gz

(5).使用shell進行分庫備份:

1 mysql -uroot -ppasswd  -e "show databases;" |grep -eiv "database

|information|performance"|sed -r '

s#^([a-za-z_0-9]*$)#mysql -uroot -ppasswd --events -b \1 |gzip> /opt/\1.sql.gz#g

'|bash

上面的命令是將mysql中需要的庫進行了分庫的備份,這種是在遇到比較多的庫的時候,我們可以進行分庫的備份。

分庫的意義何在:

有時乙個企業的資料庫中會有多個庫,例如(bbs,www,blog),但是出問題的時候很可能往往是乙個庫,那如果我們將所有庫的資料儲存到乙個檔案中去,那麼將來恢復資料的時候,可能會帶來很大的麻煩,所以我們一般將庫進行分庫備份。

有的時候我們也需要將某個庫中的多個表進行分別程式設計,思想也是和上面的分庫備份一致的。

(6).備份mysql資料庫的表結構(不包含資料)

1 mysqldump -uroot -ppassword  -

d test

23 引數 -d 的作用就是備份資料庫的表結構。

(7).備份mysql的資料庫中的資料(不包含表結構)

1 mysqldump -uroot -ppassword  -

t test

23 引數 -t 的作用就是備份資料庫的表資料(不包含表結構)。

(8).備份的時候切割binlog日誌:(進行增量備份的時候可以用到)

1mysqldump -uroot -ppassword  -t  -b -

f test

2

3引數 -f 的作用就是備份資料庫的時候,將binlog日誌進行重新重新整理。

(9).備份的時候會記錄指定檔案的位置以及mysqlbinglog的檔名稱:

1  mysqldump -uroot -ppassword  -t  -b -f --

master-data test

23 引數 --

master-data=1 的作用就是備份資料庫的時候,將binlog日誌進行重新重新整理。

mysqldump的一些關鍵引數總結:

1、-b:表示的是指定多個庫,增加了建庫語句和use資料庫的語句。

2、--compact:去掉注釋,適合除錯輸出,不適合在生產環境使用。

3、-a: 表示的是本分所有的庫。

4、-f:重新整理binlog日誌,方便進行增量的恢復。

5、--master-data:增加binlog日誌檔名及其對應的位置點。

6、-x,--lock-all-tables :在備份的時候進行鎖表,保持資料的一致性。

7、-d:只備份表的結構。

8、--single-transaction  適合innodb資料庫的備份。

innodb表在備份的時候,通常啟用選項--single-transaction 來保證備份的一致性,實際上他的工作原理是設定本次備份的會話級別為:repeattable read ,以確保本次會話dump時,不會看到其他的會話提交了資料。

對於不同的引擎,表的備份資料:

myisam:

1

mysqldump -uroot -ppassword --flush-privileges -a -b --master-data=2 -x --flush-logs --triggers --routines --events --hex-blob |gzip > /opt/all.sql.gz

innodb:

1

mysqldump -uroot -ppassword --flush-privileges -a -b --master-data=2 --single-transaction --flush-logs --triggers --routines --events --hex-blob |gzip > /opt/all.sql.gz

推薦使用innodb的備份方式,備份資料。(--triggers 表示的是觸發器)

企業場景全量和增量的頻率是怎樣做的呢?

1)中小公司,全量一般是每天一次,業務流量低谷執行的是全備,備份時會鎖表。

2)單台資料庫,如和增量。使用rsync(配合定時任務頻率大點或者inotify,主從複製),把所有的binlog備份到遠端伺服器,盡量做主從複製。

3)大公司周備,每週六00點一次全量,下週日-下週六00點前都是增量。

優點:節省備份時間,減小備份壓力。缺點:增量的binlog檔案副本太多,還原會很麻煩

4)一主五從,會有乙個從庫做備份,延遲同步。

什麼情況下會用到備份呢?

1) 需要公升級資料庫或者是需要增加乙個從庫的時候。

2)主庫或者從庫宕機,需要資料的備份。

3)人為的ddl或者是dml的語句,導致主從庫的資料消失

4)跨機房的災備,需要備份資料到遠端程式。

什麼情況下才會用到增量恢復呢?

1)主或者從庫宕機(硬體損壞)是否需要增量恢復?

答:不需要增量恢復,主庫宕機,只需要把其中的乙個同步最快的從庫提公升為主庫即可。

主庫宕機,只要選擇更新最快的從庫,提公升為主庫即可

從庫宕機,直接不用就好了(一般都會陪lvs負載均衡),或者就正常修復即可

2)人為運算元據庫sql語句破壞主庫是否需要增量恢復?

在資料庫主庫內部命令列進行誤操作,會導致所有的資料庫(包括主從庫)的資料丟失,例如:在主庫執行了drop database test這樣的刪除語句,這時候所有的從庫也會執行這個drop語句,從而導致所有的資料庫上的資料庫的資料丟失,這樣的場景下面需要進行增量恢復的。

3)只有乙個主庫是否需要增量恢復呢?

如果公司只有乙個主庫的情況下,首先應該做定時的全量備份(每天一次)以及增量備份(每隔1-10分鐘對binlog日誌做切割然後被分到其他的伺服器上,或者本地其他硬碟中)或者寫到網路檔案系統中。

使用binlog進行增量備份以及檢視檔案資料的方法:

1 /data1/mysql/bin/mysqlbinlog -uroot -psina.com mysql-bin.000068 >bin.sql

23 我們也可以同時進行拆庫的分析,使用-d引數即可指定資料庫進行拆分

4 /data1/mysql/bin/mysqlbinlog -uroot -psina.com -d test mysql-bin.000068 > bin.sql

是可以導成sql語句進行檢視的。

增量恢復的前提:

1)人為的sql造成的誤操作。

2)需要全備和增量的資料。

3)恢復時建議對外停止更新。

4)恢復的時候,先恢復全量,再把增量日誌中有問題的sql語句刪除,然後恢復到資料庫。

增量恢復的核心思想:

1)流程制度的控制。如果不做,面臨服務和資料,魚和熊掌不可得。

2)延遲備份來解決,通過監控,加白名單的方式進行控制。

3)業務需求的容忍度,可量化的目標,根據需求選擇停庫或鎖表或者容忍丟失部分資料。

一些程式設計上的策略

這裡將向大家分享的是一些我對程式設計的思考總結,這些經驗在我畢生程式設計生涯中曾幫助我在無數的事情上作出正確的決定。這些程式設計策略有些是很顯然的,但實際程式設計中往往被人們忽略。下面的例子是用python寫的,但這些概念適用於任何程式語言。找出程式的主執行路徑 你的程式大部分時間都執行這些模組。首...

mysql一些命令 mysql常用的一些命令

一 授權登入 參考grant all privileges on cacti.to hnf localhost identified by hnf 2014 只給cacti這個資料庫授權 grant all on to root localhost identified by huningfei 只...

mysql的一些基本指令 mysql 一些常用指令

登陸 1 mysql u root p 登陸,輸入root密碼 退出登陸 mysql exit mysql 為所有ip授權 mysql grant all privileges on to root identified by 123456 with grant option 為單一ip授權 就是想...