本文主要給大家介紹使用MySQLdump恢復(fù)備份方法,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下主題內(nèi)容吧。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)叢臺免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
mysql是邏輯備份工具:基于mysql客戶端協(xié)議,可以遠(yuǎn)程實(shí)現(xiàn),遠(yuǎn)程備份,要考慮到磁盤I/O,建議同一庫中不用使用多個(gè)引擎的原因之一是備份工具支持度不一樣
完全備份、部分備份;
InnoDB:熱備或溫備;
MyISAM:溫備;
二次封裝工具:
mydumper:perl腳本,實(shí)現(xiàn)模擬并行備份的效果,占用云服務(wù)器的IO
phpMyAdmin
備份機(jī)制是備份時(shí)先創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表,最后在通過insert into插入所有數(shù)據(jù)
mysqldump備份機(jī)制:先創(chuàng)建一個(gè)庫,然后在創(chuàng)建相關(guān)表,最后往表里插入數(shù)據(jù)
庫:create database
表:create table
數(shù)據(jù):insert into,使用一個(gè)insert into語句就可以把表的數(shù)據(jù)都插入,完成恢復(fù)。每一張表都要先create table,然后insert into進(jìn)行恢復(fù)
執(zhí)行myslqdump會把所有的內(nèi)容都現(xiàn)在在屏幕上,然后在一步步操作,顯示的結(jié)果里面可以看到具體的操作,如果要恢復(fù),需要將這些顯示結(jié)果重定向到一個(gè)文件,利用新生成的文件進(jìn)行恢復(fù)
mysqldump用法,有三個(gè),如下:
方法一:
mysqldump [OPTIONS] database [tables] # 備份單庫,可以只備份其中的一部分表(部分備份);
方法二:
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] # 備份多庫;,建議用這個(gè)方式實(shí)現(xiàn),即使備份單個(gè)庫,因?yàn)椴挥米约簞?chuàng)建庫
例子:
[root@CentOS7E ~]#mysqldump -u root -pPass123456 -h 192.168.1.71 --databases sunny
執(zhí)行語句后,會把sunny這個(gè)數(shù)據(jù)庫的內(nèi)容都打印到屏幕上,此時(shí)沒有重定向到相關(guān)文件,不能用于恢復(fù),但是可以查看使用mysqldump命令過程執(zhí)行的操作。
方法三:
mysqldump [OPTIONS] --all-databases [OPTIONS] # 備份所有庫;也是自己創(chuàng)建庫
注意,執(zhí)行備份時(shí),要添加選項(xiàng),將對應(yīng)的表鎖住,防止時(shí)間點(diǎn)不一致,不能用于還原數(shù)據(jù)
MyISAM存儲引擎:支持溫備,備份時(shí)要鎖定表;
-x, --lock-all-tables:鎖定所有庫的所有表,讀鎖;鎖定范圍大。
-l, --lock-tables:鎖定指定庫所有表;備份哪個(gè)表的時(shí)候就只鎖定對應(yīng)的表
InnoDB存儲引擎:支持溫備和熱備;
可以使用-x或者-l來實(shí)現(xiàn)溫備
--single-transaction:創(chuàng)建一個(gè)事務(wù),基于此快照執(zhí)行備份,實(shí)現(xiàn)熱備;但是問題是如果備份時(shí)的一些事物沒有被commit或者回滾,導(dǎo)致恢復(fù)數(shù)據(jù)有問題,所以恢復(fù)的時(shí)候還要執(zhí)行崩潰的恢復(fù),因此還要借助崩潰后的恢復(fù)操作,實(shí)現(xiàn)數(shù)據(jù)的完整。
其它選項(xiàng):
-R, --routines:備份指定庫的存儲過程和存儲函數(shù);
--triggers:備份指定庫的觸發(fā)器;
-E, --events:
例子
利用mysql實(shí)現(xiàn)數(shù)據(jù)備份和還原
熱備,添加相關(guān)的選項(xiàng),并重定向到文件/root/sunny.sql
[root@CentOS7E sunny]#mysqldump -u root -pPass123456 -h 192.168.1.71 --single-transaction -R --triggers -E --databases sunny > /root/sunny.sql
例子:利用重定向,將生成的文件恢復(fù)到本地的mysql庫里,如果本地已經(jīng)有數(shù)據(jù)庫,就不會創(chuàng)建重名的數(shù)據(jù)庫,直接新建表,將數(shù)據(jù)導(dǎo)入新建的表里。
注意,恢復(fù)前,將恢復(fù)的本地云服務(wù)器的二進(jìn)制日志關(guān)閉,否則,新導(dǎo)入的數(shù)據(jù)會被記錄到二進(jìn)制日志中,但是這部分日志是恢復(fù)的文件,不需要進(jìn)行再次記錄
關(guān)閉二進(jìn)制日志功能如下
MariaDB [sunny]> set @@session.sql_log_bin=off;
恢復(fù)數(shù)據(jù)庫
[root@CentOS7E ~]#mysql -uroot -pPass1234
恢復(fù)備份的時(shí)候,還有一小部分是沒有備份到備份文件中的,因此,需要用二進(jìn)制文件來重放進(jìn)行恢復(fù),因此做全量備份的時(shí)候,要結(jié)合選項(xiàng)--master-data和--flush-logs
--master-data[=#]
1:記錄為CHANGE MASTER TO語句,此語句不被注釋;
2:記錄為CHANGE MASTER TO語句,此語句被注釋;一般是設(shè)置為2
--flush-logs:鎖定表完成后,即進(jìn)行二進(jìn)制表的日志刷新操作;驅(qū)動(dòng)云服務(wù)器日志滾動(dòng)
例子:
[root@CentOS7E ~]#mysqldump -u root -pPass1234 -h 192.168.1.71 --single-transaction -R --triggers -E --databases sunny --master-data=2 --flush-logs > /root/sunny-$(date +%F-%H-%M-%S).sql
[root@CentOS7E ~]#less sunny-2018-01-15-13-10-17.sql
查看新生成的備份文件,有如下的關(guān)鍵的注釋信息如下,
恢復(fù)的時(shí)候可以從master-log.000005這個(gè)文件的第245字節(jié)開始恢復(fù),因?yàn)樯洗蝹浞輹r(shí)有CHANGE MASTER TO=2,上次有滾動(dòng),恢復(fù)的時(shí)候只要把245之后的內(nèi)容拿來重放就可以
-- CHANGE MASTER TO MASTER_LOG_FILE='master-log.000005', MASTER_LOG_POS=245;
假設(shè)此時(shí)在云服務(wù)器71上的sunny數(shù)據(jù)庫進(jìn)行操作,則新生成的日志將記錄到二進(jìn)制日志master-log.000005,假設(shè)71上操作如下
MariaDB [sunny]> delete from students where id=1000;
MariaDB [sunny]> delete from students where id=1002;
MariaDB [sunny]> insert into students(id,name,age,gender) values (1050,"new005",18,"M");
此時(shí),在71的master-log.000005會記錄這些新生成的日志,查看如下
[root@CentOS7A mysql]#mysqlbinlog /mydata/log/master-log.000005
恢復(fù)到75這臺剛才導(dǎo)入全量備份的mysql云服務(wù)器上
恢復(fù)操作如下
首先,將master-log.000005這個(gè)文件進(jìn)行重定向恢復(fù),然后拷貝到75上進(jìn)行重放
重定向,mysqlbinlog這個(gè)工具讀取數(shù)據(jù)后會轉(zhuǎn)換成sql語句,注意,這里-j 245可以不指定,因?yàn)?45字節(jié)前沒有有效內(nèi)容,如果是245之后開始的,注意要添加-j選項(xiàng)
[root@CentOS7A mysql]#mysqlbinlog -j 245 /mydata/log/master-log.000005 >/tmp/binlog005.sql
拷貝數(shù)據(jù)
[root@CentOS7A mysql]#scp /tmp/binlog005.sql 192.168.1.75:/root/
在75上將binlog005.sql重新導(dǎo)入數(shù)據(jù)庫
[root@CentOS7E ~]#mysql -uroot -pPass123456 < binlog005.sql
注意,將來用mysqldump做備份的時(shí)候,建議把二進(jìn)制文件也拷貝一份出來,用于異常備份,將來備份的時(shí)候,用mysqlbinlog命令讀出來生成mysql語句的文件,然后再進(jìn)行二進(jìn)制文件的恢復(fù)。不過mysqldump恢復(fù)效率低,建議使用xtrabackup這個(gè)工具來實(shí)現(xiàn)
看完以上關(guān)于使用Mysqldump恢復(fù)備份方法,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業(yè)知識信息 ,可以持續(xù)關(guān)注我們的行業(yè)資訊欄目的。