掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在MySQL數(shù)據(jù)庫(kù)管理過(guò)程中,由于各種原因可能會(huì)導(dǎo)致數(shù)據(jù)的丟失或者損壞,這就需要我們學(xué)會(huì)和掌握恢復(fù)數(shù)據(jù)的方法。MySQL數(shù)據(jù)庫(kù)提供了多種恢復(fù)數(shù)據(jù)的方式,本篇文章將針對(duì)這些恢復(fù)數(shù)據(jù)的方式進(jìn)行講解。

1. 通過(guò)備份來(lái)恢復(fù)數(shù)據(jù)
在生產(chǎn)環(huán)境中,管理員通常會(huì)定期進(jìn)行數(shù)據(jù)庫(kù)備份,以便在數(shù)據(jù)丟失或者損壞時(shí)可以快速恢復(fù)到之前的狀態(tài)。備份可以通過(guò)命令行或者圖形化工具來(lái)執(zhí)行,下面介紹兩種備份的方法。
1.1 命令行備份
使用mysqldump命令行工具進(jìn)行備份。假設(shè)我們要備份一個(gè)名為test的數(shù)據(jù)庫(kù),在命令行中輸入以下命令:
“`
$ mysqldump -u root -p test > test_backup.sql
“`
此命令將把test的數(shù)據(jù)庫(kù)備份到test_backup.sql文件中?;謴?fù)備份可以使用以下命令:
“`
$ mysql -u root -p test
“`
此命令將備份文件中的數(shù)據(jù)恢復(fù)到test數(shù)據(jù)庫(kù)中。
1.2 圖形化備份
圖形化工具通常包括導(dǎo)出、備份等功能,下面以phpMyAdmin為例進(jìn)行備份。在數(shù)據(jù)庫(kù)列表中選定相應(yīng)的數(shù)據(jù)庫(kù),選擇導(dǎo)出選項(xiàng),選擇所要導(dǎo)出的表格并設(shè)定導(dǎo)出方式為.sql,最后點(diǎn)擊開(kāi)始即可備份數(shù)據(jù)庫(kù)。導(dǎo)入相似,進(jìn)入導(dǎo)入頁(yè)面后選擇已備份的.sql文件即可開(kāi)始還原數(shù)據(jù)。
2. 利用二進(jìn)制日志進(jìn)行數(shù)據(jù)恢復(fù)
MySQL提供了二進(jìn)制日志(binlog)來(lái)記錄所有對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行的更改,管理員可以利用這個(gè)日志記錄來(lái)恢復(fù)數(shù)據(jù)。下面介紹利用二進(jìn)制日志進(jìn)行數(shù)據(jù)恢復(fù)的方法。
2.1 開(kāi)啟二進(jìn)制日志
在MySQL數(shù)據(jù)庫(kù)配置文件my.cnf中添加以下配置:
“`
log-bin=mysql-bin
“`
保存并關(guān)閉文件后,重啟MySQL服務(wù)即可。
2.2 恢復(fù)數(shù)據(jù)
假設(shè)我們的數(shù)據(jù)庫(kù)中發(fā)生了一些意外的更改導(dǎo)致了數(shù)據(jù)丟失,我們可以通過(guò)以下步驟進(jìn)行數(shù)據(jù)恢復(fù):
1. 查看二進(jìn)制日志文件
查看二進(jìn)制日志文件名,在命令行中輸入以下命令:
“`
$ ls /var/log/mysql/
“`
2. 使用mysqlbinlog查看日志文件內(nèi)容
在命令行中輸入以下命令:
“`
$ mysqlbinlog /var/log/mysql/mysql-bin.000001
“`
此命令將顯示二進(jìn)制日志文件的內(nèi)容。管理員可以手動(dòng)查找到操作前的狀態(tài)并執(zhí)行其相反的操作來(lái)恢復(fù)數(shù)據(jù)。
3. 把找到的還原日志文件應(yīng)用到服務(wù)器
在命令行中輸入以下命令:
“`
$ mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p
“`
此命令將把找到的還原日志文件應(yīng)用到服務(wù)器上,將會(huì)還原指定時(shí)間點(diǎn)之前的狀態(tài)。
3. 利用本地備份進(jìn)行數(shù)據(jù)恢復(fù)
當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)不可恢復(fù)的錯(cuò)誤時(shí),我們可以嘗試?yán)帽镜貍浞菸募M(jìn)行數(shù)據(jù)恢復(fù)。下面介紹利用本地備份進(jìn)行數(shù)據(jù)恢復(fù)的方法。
3.1 使用mysqldump備份數(shù)據(jù)
執(zhí)行以下命令備份對(duì)應(yīng)數(shù)據(jù)庫(kù):
“`
$ mysqldump -u root -p test > test_backup.sql
“`
備份成功后,將test_backup.sql文件保存到本地。
3.2 清空數(shù)據(jù)表
在恢復(fù)數(shù)據(jù)前,需要將數(shù)據(jù)庫(kù)中數(shù)據(jù)表清空,執(zhí)行以下命令:
“`
$ mysql -u root -p
mysql> USE test;
mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> TRUNCATE table1, table2, table3;
mysql> SET FOREIGN_KEY_CHECKS=1;
mysql> quit;
“`
3.3 恢復(fù)數(shù)據(jù)
進(jìn)入恢復(fù)命令行模式后,將備份文件恢復(fù)到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,執(zhí)行以下命令:
“`
$ mysql -u root -p test
“`
以上即為本文介紹的,希望對(duì)大家在MySQL數(shù)據(jù)恢復(fù)過(guò)程中有所幫助。同時(shí)也提醒各位管理員,一定要及時(shí)備份數(shù)據(jù)以便在數(shù)據(jù)丟失或者損壞時(shí)可以快速恢復(fù)。
相關(guān)問(wèn)題拓展閱讀:
使用直接拷貝的方法備份時(shí),尤其要注意表沒(méi)有被使用,應(yīng)該對(duì)表進(jìn)行讀鎖定或停止MySQL服務(wù)。備份一個(gè)表,需要三個(gè)文件:
對(duì)于MyISAM表:
tbl_name.frm 表的描述文件
tbl_name.MYD 表的數(shù)據(jù)文件
tbl_name.MYI 表的索引文件
對(duì)于ISAM表:
tbl_name.frm 表的描述文件
tbl_name.ISD 表的數(shù)據(jù)文件
tbl_name.I 表的索引文件
對(duì)于MyISAM表,你可以從運(yùn)行在不同硬件系統(tǒng)的服務(wù)器之間復(fù)制文件,例如,SUN服務(wù)器和INTEL PC機(jī)之間。
當(dāng) 然,這只是備份一個(gè)數(shù)據(jù)表,在很多情況下我們需要備份完整的數(shù)據(jù)庫(kù),這個(gè)時(shí)候同樣可以直接復(fù)制數(shù)據(jù)庫(kù)文件夾即可完成備份;若想再省點(diǎn)兒事,把整個(gè)數(shù)據(jù)庫(kù)目 錄“data”復(fù)制也可以,但是在還原數(shù)據(jù)時(shí)要注意,只能一個(gè)一個(gè)地還原數(shù)據(jù)庫(kù),因?yàn)樵撃夸浵掠衜ysql運(yùn)行時(shí)的配置文件,若正在運(yùn)行的mysql配置 信息遭到還原破壞,整個(gè)mysql服務(wù)就會(huì)無(wú)法啟動(dòng)。
SELECT INTO OUTFILE和MYSQLDUMP備份數(shù)據(jù):
MySQLdump工具可以把整個(gè)數(shù)據(jù)庫(kù)裝載到一個(gè)單獨(dú)的文本文件中。這個(gè)文件包含所有重建數(shù)據(jù)庫(kù)和表的SQL命令。這個(gè)命令取得所有的模式 (Schema)并且將其轉(zhuǎn)換成DDL語(yǔ)法(CREATE語(yǔ)句,即數(shù)據(jù)庫(kù)定義語(yǔ)句),還取得所有的數(shù)據(jù),并且為這些數(shù)據(jù)創(chuàng)建INSERT語(yǔ)句。所有的東西 都被包含到了一個(gè)文本文件中。這個(gè)文本文件可以用一個(gè)簡(jiǎn)單的批處理和一個(gè)合適SQL語(yǔ)句導(dǎo)回到MySQL中。這個(gè)工具令人難以置信地簡(jiǎn)單而快速。
有3種方式來(lái)調(diào)用mysqldump
選擇一個(gè)數(shù)據(jù)庫(kù)或一個(gè)數(shù)據(jù)表備份猛亂汪到一個(gè)文件:
/bin> mysqldump db_name > filename.txt
選擇多個(gè)數(shù)據(jù)庫(kù)備份到一個(gè)文件:
/bin> mysqldump –database DB1 > filename.txt
所有數(shù)據(jù)庫(kù)備份到一個(gè)文件:
/bin> mysqldump –all–database > filename.txt
Option選擇:
–help,-?
顯示幫助消息并退出。
–add-drop-table
這個(gè)選項(xiàng)將會(huì)在每一個(gè)表的前面加上DROP TABLE IF EXISTS語(yǔ)句,這樣可以保證導(dǎo)回MySQL數(shù)據(jù)庫(kù)的時(shí)候不會(huì)出錯(cuò),因?yàn)槊看螌?dǎo)回的時(shí)候,都會(huì)首先檢查表是否存在,存在就刪除
–add-locks
這個(gè)選項(xiàng)會(huì)在INSERT語(yǔ)句中捆上一個(gè)LOCK TABLE和UNLOCK TABLE語(yǔ)句。這就防止在這些記錄被再次導(dǎo)入數(shù)據(jù)庫(kù)時(shí)其他用戶對(duì)表進(jìn)行的操作
-c or –complete_insert
這個(gè)選項(xiàng)使得MySQLdump命令給每一個(gè)產(chǎn)生INSERT語(yǔ)句加上陪信列(field)的名字。當(dāng)把數(shù)據(jù)導(dǎo)出導(dǎo)另外一個(gè)數(shù)據(jù)庫(kù)時(shí)這個(gè)選項(xiàng)很有用。
–delayed-insert 在INSERT命令中加入DELAY選項(xiàng)
-F or –flush-logs 使用這個(gè)選項(xiàng),在執(zhí)行導(dǎo)出之前將會(huì)刷新MySQL服務(wù)器的log.
-f or –force 使用這個(gè)選項(xiàng),即使有錯(cuò)誤發(fā)生,仍然繼續(xù)導(dǎo)出
–full 這個(gè)選項(xiàng)把附加信息也加到CREATE TABLE的語(yǔ)句中
-l or –lock-tables 使用這個(gè)選項(xiàng),導(dǎo)出表的時(shí)候服務(wù)器將會(huì)給表加鎖。
-t or –no-create- info
這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建CREATE TABLE語(yǔ)句,這個(gè)選項(xiàng)在您只需要數(shù)據(jù)而不需要DDL(數(shù)據(jù)庫(kù)定義語(yǔ)句)時(shí)很方便。
-d or –no-data 這個(gè)選項(xiàng)使的MySQLdump命令不創(chuàng)建INSERT語(yǔ)枝仔句。
在您只需要DDL語(yǔ)句時(shí),可以使用這個(gè)選項(xiàng)。
–opt 此選項(xiàng)將打開(kāi)所有會(huì)提高文件導(dǎo)出速度和創(chuàng)造一個(gè)可以更快導(dǎo)入的文件的選項(xiàng)。
-q or –quick 這個(gè)選項(xiàng)使得MySQL不會(huì)把整個(gè)導(dǎo)出的內(nèi)容讀入內(nèi)存再執(zhí)行導(dǎo)出,而是在讀到的時(shí)候就寫(xiě)入導(dǎo)文件中。
-T path or –tab = path
這 個(gè)選項(xiàng)將會(huì)將數(shù)據(jù)庫(kù)中每一個(gè)表創(chuàng)建兩個(gè)文件,一個(gè)文件包含DDL語(yǔ)句或者表創(chuàng)建語(yǔ)句,另一個(gè)文件包含數(shù)據(jù)。DDL文件被命名為 table_name.sql,數(shù)據(jù)文件被命名為table_name.txt。該參數(shù)的path為存放目錄,而且該目錄必須已經(jīng)存在。 如:/bin>mysqldump –uroot –p –tab=d:\\ mydata
-w “WHERE Clause” or –where = “Where clause ” 篩選將要放到導(dǎo)出文件的數(shù)據(jù)。
下面來(lái)看幾組mysqldump命令案例:
將數(shù)據(jù)庫(kù)mydata的內(nèi)容備份到mydata.txt文件中:
/bin>MySQLdump –uroot -p mydata > d:\\mydata.txt
將mydata數(shù)據(jù)庫(kù)中的users表的內(nèi)容備份到d:\\users.txt:
/bin>MySQLdump –uroot -p mydata users > d:\\users.txt
將mydata數(shù)據(jù)庫(kù)中的users表username值為“feihu”的數(shù)據(jù)備份到d:\\users.txt:
/bin>MySQLdump –uroot -p –where=”username=’feihu’” mydata users > d:\\users.txt;
將mydata數(shù)據(jù)庫(kù)以及內(nèi)部表的創(chuàng)建結(jié)構(gòu)(DDL)備份到d:\\users.txt:
/bin>MySQLdump –uroot –p -d mydata > d:\\mydata.txt
將mydata和mydata2數(shù)據(jù)庫(kù)同時(shí)備份到d:\\users.txt:
/bin> MySQLdump –uroot –p -d mydata mydata2 > d:\\mydata.txt
將所有數(shù)據(jù)備份到一個(gè)數(shù)據(jù)庫(kù),命令怎么寫(xiě)呢???
schema: 模式The set of statements, expressed in data definition language, that completely describe the structure of a data base.(一組以數(shù)據(jù)定義語(yǔ)言來(lái)表達(dá)的語(yǔ)句集,該語(yǔ)句集完整地描述了數(shù)據(jù)庫(kù)的結(jié)構(gòu)。)
當(dāng)需要將還原備份數(shù)據(jù)時(shí),使用如下語(yǔ)句:
/bin>mysql –uroot –p mydata source d:\mydata.txt;
LOAD DATA INFILE和MYSQLIMPORT恢復(fù)數(shù)據(jù)
關(guān)于load data infile語(yǔ)句的使用已經(jīng)在別一節(jié)講述過(guò)了,詳細(xì)請(qǐng)參考“使用LOAD DATA和INSERT語(yǔ)句導(dǎo)入Mysql數(shù)據(jù)”。如果你僅僅恢復(fù)數(shù)據(jù), mysqlimport完全是與LOAD DATA 語(yǔ)句對(duì)應(yīng)的,讀者可以任意選擇一個(gè)去實(shí)現(xiàn)。
MySQLimport位于MySQL/bin目錄中,是MySQL的一個(gè)載入(或者說(shuō)導(dǎo)入)數(shù)據(jù)的一個(gè)非常有效的工具。這是一個(gè)命令行工具。有兩個(gè)參數(shù) 以及大量的選項(xiàng)可供選擇。這個(gè)工具把一個(gè)文本文件(textfile)導(dǎo)入到你指定的數(shù)據(jù)庫(kù)和表中。比方說(shuō)我們要從文件users.txt中把數(shù)據(jù)導(dǎo)入到 數(shù)據(jù)庫(kù)mydata中的表users中:
/bin>mysqlimport –uroot –p mydata d:\users.txt
注意:這里users.txt是我們要導(dǎo)入數(shù)據(jù)的文本文件,而mydata是我們要操作的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中的表名是users,這里文本文件的數(shù)據(jù)格式必須與users表中的記錄格式一致,否則MySQLimport命令將會(huì)出錯(cuò)。
其中表的名字是導(dǎo)入文件的之一個(gè)句號(hào)(.)前面文件字符串,另外一個(gè)例子:MySQLimport mydata users.2023.10.txt; 那么我們將把文件中的內(nèi)容導(dǎo)入到數(shù)據(jù)庫(kù)mydata 中的users表中。
上面的例子中,都只用到兩個(gè)參數(shù),并沒(méi)有用到更多的選項(xiàng),下面介紹MySQLimport的選項(xiàng)
-d or –delete 新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息
-f or –force 不管是否遇到錯(cuò)誤,MySQLimport將強(qiáng)制繼續(xù)插入數(shù)據(jù)
-i or –ignore MySQLimport跳過(guò)或者忽略那些有相同唯一關(guān)鍵字的行, 導(dǎo)入文件中的數(shù)據(jù)將被忽略。
-l or -lock-tables 數(shù)據(jù)入之前鎖住表,這樣就防止了,你在更新數(shù)據(jù)庫(kù)時(shí),用戶的查詢和更新受到影響。
-r or -replace 這個(gè)選項(xiàng)與-i選項(xiàng)的作用相反;此選項(xiàng)將替代表中有相同唯一關(guān)鍵字的記錄。
–fields-enclosed-by= char 指定文本文件中數(shù)據(jù)的記錄時(shí)以什么括起的, 很多情況下數(shù)據(jù)以雙引號(hào)括起。 默認(rèn)的情況下數(shù)據(jù)是沒(méi)有被字符括起的。
–fields-terminated-by=char 指定各個(gè)數(shù)據(jù)的值之間的分隔符,在句號(hào)分隔的文件中,分隔符是句號(hào)。您可以用此選項(xiàng)指定數(shù)據(jù)之間的分隔符。默認(rèn)的分隔符是跳格符(Tab)
–lines-terminated-by=str 此選項(xiàng)指定文本文件中行與行之間數(shù)據(jù)的分隔字符串或者字符。 默認(rèn)的情況下MySQLimport以newline為行分隔符。您可以選擇用一個(gè)字符串來(lái)替代一個(gè)單個(gè)的字符:一個(gè)新行或者一個(gè)回車(chē)。
MySQLimport命令常用的選項(xiàng)還有-v 顯示版本(version),-p 提示輸入密碼(password)等。
如果,我們要導(dǎo)入一個(gè)文件(Orders.txt)中行的記錄格式是這樣的:
“1”, “ORD89876”, “1 Dozen Roses”, “”
我們的任務(wù)是要把這個(gè)文件里面的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)mydata中的表格Orders中,我們使用這個(gè)命令:
/Bin>MySQLimport -uroot–prl –fields-enclosed-by=” –fields-terminated-by=, mydata Orders.txt
比如我們要插入一些數(shù)據(jù),使用包含下面文本的文件(文件名為New_Data.sql,當(dāng)然我們也可以取名為New_Data.txt及任何其他的合法名字,并不一定要以后綴sql結(jié)尾):
USE mydata; INSERT INTO Orders (Orders_ID, username) VALUES(1, “Block”); INSERT INTO Orders (Orders_ID, username) VALUES(2, “Newton”); INSERT INTO Orders (Orders_ID, username) VALUES(3, “Simmons”);
注意上面的這些句子的語(yǔ)法都必須是正確的,并且每個(gè)句子以分號(hào)結(jié)束。上面的USE命令選擇數(shù)據(jù)庫(kù),INSERT命令插入數(shù)據(jù)。
然后運(yùn)行下面的命令:
/bin>mysql –uroot –p mydata
接著按提示輸入密碼,如果上面的文件中的語(yǔ)句沒(méi)有錯(cuò)誤,那么這些數(shù)據(jù)就被導(dǎo)入到了數(shù)據(jù)庫(kù)中。
方法一:如果使用的是虛擬主機(jī),可以用使用phpmyadmin來(lái)備份數(shù)據(jù)庫(kù)。
1)登陸phpmyadmin。登陸后左邊會(huì)出現(xiàn)數(shù)據(jù)庫(kù)列表,單擊要備份的數(shù)據(jù)庫(kù),如圖。
2)在彈出的頁(yè)面中,右側(cè)上部單擊“導(dǎo)出”按鈕,一般保持默認(rèn)選項(xiàng),最下面“另存為文件”,選擇“ZIP壓縮”,最后單擊執(zhí)行按鈕,如圖
3)彈出保存文件后,保存文件即可,如圖。
方法二:如果數(shù)據(jù)庫(kù)可以使用外部鏈接??梢允褂肧QLyogEnt來(lái)備份。
1)打開(kāi)SQLyogEnt,并登陸mysql服務(wù)器,前面的文章已經(jīng)講過(guò),如果還不明白的可以看這里《MySql管理利器SQLyogEnt初識(shí)(php建立數(shù)據(jù)庫(kù))》。
2)在左邊數(shù)據(jù)庫(kù)菜單選擇要備份的書(shū)庫(kù),然后右擊它。在彈出的菜談昌陵單中,選擇Backup Database as sql dump,如圖。
3)在彈出的對(duì)話框中,“export to file”即時(shí)備份數(shù)據(jù)迅型庫(kù)文件含戚要保存的位置,其他保持默認(rèn)選項(xiàng),單擊“Export”按鈕,開(kāi)始備份。如圖。
如果數(shù)據(jù)庫(kù)是存放在和程序一臺(tái)服務(wù)器的時(shí)候,及數(shù)據(jù)庫(kù)地址為localhost的時(shí)候,備份mysql數(shù)據(jù)庫(kù)一般采用之一種方法,如果mysql數(shù)據(jù)庫(kù)可以外部登錄,就可以使用第二種方式。如果是獨(dú)立服務(wù)器,可以直接復(fù)制數(shù)據(jù)庫(kù)源文件即可,這里就不詳細(xì)講解了。
方法:
方法一:如果使用的是虛擬主機(jī),可以用使用phpmyadmin來(lái)備份數(shù)據(jù)庫(kù)。
1)登陸phpmyadmin。登陸后左邊會(huì)出現(xiàn)數(shù)據(jù)庫(kù)列表,單擊要備份的數(shù)據(jù)庫(kù)。
2)在彈出的頁(yè)面中,右側(cè)上部單擊“導(dǎo)出”按鈕,一般保持默認(rèn)選桐辯項(xiàng),最下面“另存斗輪耐為文件”,選擇“ZIP壓縮”,最后單擊執(zhí)行按鈕。
3)彈出保存文件后,保存文件即可。
方法二:如果數(shù)據(jù)庫(kù)可以使用外部鏈接??梢允褂肧QLyogEnt來(lái)備份。
1)打開(kāi)SQLyogEnt,并登陸mysql服務(wù)器。
2)在左邊數(shù)據(jù)庫(kù)菜單選擇要備份的書(shū)庫(kù),然后右擊它。在彈出的菜單中,選擇Backup Database as sql dump。
3)在彈出的對(duì)話框中,“export to file”即時(shí)備份數(shù)據(jù)庫(kù)文件要保存的位置,其他保持默認(rèn)選項(xiàng),單擊“Export”按鈕,開(kāi)始備空春份。
注意事項(xiàng)
一、 使用mysql相關(guān)命令進(jìn)行簡(jiǎn)單的本地備份
1 mysqlldump命令
mysqldump 是采用SQL級(jí)別的備份機(jī)制,它將數(shù)據(jù)表導(dǎo)成 SQL 腳本文件,在不同的 MySQL 版本之間升級(jí)時(shí)相對(duì)比較合適,這也是最常用的備份方法。
使用 mysqldump進(jìn)行備份非常簡(jiǎn)單,如果要備份數(shù)據(jù)庫(kù)” db_backup ”,使用命令:
#mysqldump –u -p phpbb_db_backup > /usr/backups/mysql/db_backup.sql
還可以使用gzip命令對(duì)備份文件進(jìn)行壓縮:
#mysqldump db_backup | gzip > /usr/backups/mysql/ db_backup.sql.gz (備份后生成的sql不含建宏中庫(kù)語(yǔ)句!)
只備份一些頻繁更新的數(shù)據(jù)庫(kù)表:
## mysqldump sample_db articles comments links > /usr/backups/mysql/sample_db.art_comm_lin..sql
上面的命令會(huì)備份articles, comments, 和links 三個(gè)表。
恢復(fù)數(shù)據(jù)使用命令:
#mysql –u -p db_backup /mnt/backup_share/ db_backup.sql
自動(dòng)完成網(wǎng)絡(luò)備份的方法:
Linux 服務(wù)器上的程序每天都在更新 MySQL 數(shù)據(jù)庫(kù),于是就想起寫(xiě)一個(gè) shell 腳本,結(jié)合 crontab,定時(shí)備份數(shù)據(jù)庫(kù)。建立一個(gè)shell腳本:sample_db_backup.sh
# At the very end the $(date +%F) 自動(dòng)添加備份日期
mysqldump -u -p -h sample_db > /mnt/backup_share/sample_db.$(date +%F)
#un-mount the filesystem
umount /mnt/backup_share
# mount \u2023o soft 192.168.1.4:/archive /mnt/backup_share
說(shuō)明:mount NFS服務(wù)器的一個(gè)重要參數(shù):hard (硬) mount或soft(軟)mount。
硬掛載: NFS客戶機(jī)會(huì)不斷的嘗試與NFS服務(wù)器的連接(在后臺(tái),一般不會(huì)給出任何提示信息),直到掛載上為止。
軟掛載:會(huì)在前臺(tái)嘗試與NFS服務(wù)器的連接,是默認(rèn)的連接方式。當(dāng)收到錯(cuò)誤信息后終止mount嘗試,并給出相關(guān)信息。
對(duì)于到底是使用硬掛載還是軟掛載的問(wèn)題,這主要取決于你訪問(wèn)什么信息有關(guān)。例如你是想察看NFS服務(wù)器的視頻文件時(shí),你絕對(duì)不會(huì)希望由于一些意外的情況(如網(wǎng)絡(luò)速度一下子變的很慢)而使系統(tǒng)輸出大量的錯(cuò)誤信息,如果此時(shí)你用的是硬掛載方式的話,系統(tǒng)就會(huì)等待,直到能夠重新與NFS 服務(wù)器建立連接傳輸信息。另外如果是非關(guān)鍵數(shù)據(jù)的話也可以使用軟掛載方式,如FTP一些數(shù)據(jù)等,這樣在遠(yuǎn)程機(jī)器暫時(shí)連接不上或關(guān)閉時(shí)就不會(huì)掛起你的會(huì)話過(guò)程。
下面建立腳本文件權(quán)限:chmod +x ./sample_db_backup.sh
然后使用將此腳本加到 /etc/crontab 定時(shí)任務(wù)中:
01 5 * * 0 mysql /home/mysql/ sample_db_backup.sh
好了,每周日凌晨 5:01 系統(tǒng)就會(huì)自動(dòng)運(yùn)行 sample_db_backup.sh 文件通過(guò)網(wǎng)絡(luò)備份 MySQL 數(shù)據(jù)庫(kù)了。
三、實(shí)時(shí)恢復(fù)M y S Q L數(shù)據(jù)方法
在對(duì)MySQL數(shù)據(jù)和表格結(jié)構(gòu)進(jìn)行備份時(shí),mysqldump是一個(gè)非常有用的工具。然而,通常情況下,一般一天只備份一次,或者在一個(gè)特定的間隔備份一次。如果在剛備份完成的一段時(shí)間以內(nèi)數(shù)據(jù)丟失,那么這些數(shù)據(jù)很有可能無(wú)法恢復(fù)。有什么方法可以對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)性地保護(hù)呢?事實(shí)上,現(xiàn)在有幾種方法都可以實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的實(shí)時(shí)保護(hù)。這里介紹其中一種,即使用二進(jìn)制日志進(jìn)行數(shù)據(jù)恢復(fù)。
1 設(shè)置二進(jìn)制日志方法
要想從二進(jìn)制日志恢復(fù)數(shù)據(jù),你需要知道當(dāng)前二進(jìn)制日志文件的路徑和文件名。一般可以從選項(xiàng)文件(即my.cnf or my.ini,取決于你的系統(tǒng))中找到路徑。如果未包含在選項(xiàng)文件中,當(dāng)服務(wù)器啟動(dòng)時(shí),可以在命令行中以選項(xiàng)的形式給出。啟用二進(jìn)制日志的選項(xiàng)為– log-bin。要想確定當(dāng)前的二進(jìn)制日志文件的文件名,輸入下面的MySQL語(yǔ)句:
# SHOW BINLOG EVENTS \G
2 最簡(jiǎn)單的數(shù)據(jù)恢復(fù)
每天備份和運(yùn)行二進(jìn)制日志的確是一個(gè)在MySQL服務(wù)器中恢復(fù)數(shù)據(jù)的不錯(cuò)方法。比如,可以每天在深夜使用mysqldump對(duì)數(shù)據(jù)進(jìn)行備份,如果某天在數(shù)據(jù)備份完成后的一段時(shí)間里,由于某種原因數(shù)據(jù)丟失,可以使用以下方法來(lái)對(duì)其進(jìn)行恢復(fù)。首先,停止MySQL服務(wù)器,然后使用以下命令重新啟動(dòng)MySQL服務(wù)器。該命令將保證是惟一可以訪問(wèn)該數(shù)據(jù)庫(kù)服務(wù)器的人:
# /etc/init.d/mysqld stop
Stopping MySQL:
# mysqld –socket=/tmp/mysql_restore.sock –skip-networking
這里, 一socket選項(xiàng)將為U n i x 系統(tǒng)命名一個(gè)不同的Socket文件。一旦服務(wù)器處于獨(dú)占控制之下,就可以放心地對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,而不用擔(dān)心在進(jìn)行數(shù)據(jù)恢復(fù)的過(guò)程中有用戶嘗試訪問(wèn)數(shù)據(jù)庫(kù)而導(dǎo)致更多的麻煩。進(jìn)行恢復(fù)的之一個(gè)步驟是恢復(fù)晚上備份好的dump文件:
#mysql -u root -pmypwd –socket=/tmp/mysql_restore.sock /tmp/mysql_restore.sql
該命令將在/tmp目錄創(chuàng)建小的文本文件,將顯示執(zhí)行了錯(cuò)誤的SQL語(yǔ)句時(shí)的SQL語(yǔ)句。你可以用vi或者gedit文本編輯器打開(kāi)該文件,尋找你不要想重復(fù)的語(yǔ)句。如果二進(jìn)制日志中的位置號(hào)用于停止和繼續(xù)恢復(fù)操作,應(yīng)進(jìn)行注釋。用log_pos加一個(gè)數(shù)字來(lái)標(biāo)記位置。使用位置號(hào)恢復(fù)了以前的備份文件后,你應(yīng)從命令行輸入下面內(nèi)容:
mysqlbinlog –stop-position=”368312″ /var/log/mysql/bin.123456
| mysql -u root -pmypwd
mysqlbinlog –start-position=”368315″ /var/log/mysql/bin.123456
| mysql -u root -pmypwd
上面的第1行將恢復(fù)到停止位置為止的所有事務(wù)。下一行將恢復(fù)從給定的起始位置直到二進(jìn)制日志結(jié)束的所有事務(wù)。因?yàn)閙ysqlbinlog的輸出包括每個(gè)SQL語(yǔ)句記錄之前的SET TIMESTAMP語(yǔ)句,恢復(fù)的數(shù)據(jù)和相關(guān)MySQL日志將反應(yīng)事務(wù)執(zhí)行的原時(shí)間。
關(guān)于mysql 恢復(fù)數(shù)據(jù)庫(kù)語(yǔ)句的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽(yáng)、重慶、貴陽(yáng)機(jī)房服務(wù)器托管租用。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流