新聞中心
數(shù)據(jù)庫備份加星號(hào):保護(hù)你的數(shù)據(jù)安全

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)潮陽免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
隨著信息技術(shù)的不斷發(fā)展,現(xiàn)代企業(yè)對(duì)于數(shù)據(jù)的重要性越來越強(qiáng)烈。數(shù)據(jù)庫作為企業(yè)的信息核心庫,存儲(chǔ)了大量的關(guān)鍵數(shù)據(jù),如銷售記錄、客戶管理、財(cái)務(wù)情況等。如果這些數(shù)據(jù)不慎泄露或丟失,會(huì)帶來不可估量的損失。因此,數(shù)據(jù)庫備份已成為每個(gè)企業(yè)必備的安全措施。本文將介紹數(shù)據(jù)庫備份加星號(hào)技術(shù),這種技術(shù)能有效保護(hù)你的數(shù)據(jù)安全。
什么是數(shù)據(jù)庫備份加星號(hào)技術(shù)?
數(shù)據(jù)庫備份加星號(hào)技術(shù)是指在進(jìn)行數(shù)據(jù)庫備份時(shí),將關(guān)鍵數(shù)據(jù)加入星號(hào),此時(shí)數(shù)據(jù)將被加密保存。由于備份數(shù)據(jù)是存儲(chǔ)在磁盤等可讀寫存儲(chǔ)設(shè)備上的,而磁盤等存儲(chǔ)設(shè)備在未進(jìn)行嚴(yán)格保護(hù)的情況下容易被竊取或損壞,密碼加密的備份數(shù)據(jù)不僅能保障數(shù)據(jù)不被未經(jīng)授權(quán)的人員查看,而且能保證數(shù)據(jù)的完整性。
如何實(shí)現(xiàn)數(shù)據(jù)庫備份加星號(hào)技術(shù)?
實(shí)現(xiàn)數(shù)據(jù)庫備份加星號(hào)技術(shù)的方法有很多種,如使用壓縮包、使用加密工具等。在這里,我們介紹一種使用壓縮包進(jìn)行數(shù)據(jù)庫備份加星號(hào)技術(shù)的方法。
選擇一款壓縮軟件,例如WinZip或7-Zip,然后安裝并打開軟件,選擇要備份的數(shù)據(jù)庫,右鍵點(diǎn)擊,選擇“添加到壓縮文件”或“壓縮文件”。在彈出的壓縮設(shè)置窗口中,選擇“加密”并設(shè)置好密碼和相應(yīng)的安全選項(xiàng),然后點(diǎn)擊“確定”。壓縮軟件就會(huì)自動(dòng)將數(shù)據(jù)庫備份并加密保存。
對(duì)于已經(jīng)存在的備份數(shù)據(jù),也可以通過壓縮軟件的加密功能對(duì)其進(jìn)行處理。
數(shù)據(jù)庫備份加星號(hào)技術(shù)的優(yōu)點(diǎn)
1. 數(shù)據(jù)安全性更高:備份數(shù)據(jù)加密后,即使備份數(shù)據(jù)被竊取,也無法查看其中的內(nèi)容,數(shù)據(jù)安全性大大提高。
2. 數(shù)據(jù)可用性更強(qiáng):備份數(shù)據(jù)加密后,即使備份數(shù)據(jù)丟失,也不用擔(dān)心數(shù)據(jù)泄露,企業(yè)的敏感數(shù)據(jù)得到更好的保護(hù)。
3. 執(zhí)行簡單方便:使用壓縮軟件對(duì)數(shù)據(jù)庫進(jìn)行備份加密非常簡單,只需幾個(gè)簡單的步驟,對(duì)于一般用戶而言,操作難度不大。
注意事項(xiàng)
在進(jìn)行數(shù)據(jù)庫備份加星號(hào)技術(shù)時(shí),需要注意以下幾點(diǎn):
1. 加密密碼選擇時(shí)應(yīng)注意不要過于簡單,以免密碼泄露。
2. 加密后的備份數(shù)據(jù)應(yīng)放置在相應(yīng)的安全位置,并進(jìn)行相關(guān)的訪問權(quán)限設(shè)置。
3. 定期備份且保留多個(gè)備份,以防一次備份出現(xiàn)問題導(dǎo)致數(shù)據(jù)丟失。
結(jié)語
數(shù)據(jù)庫備份加星號(hào)技術(shù)是一種較為簡單但較為有效的數(shù)據(jù)保護(hù)方法。企業(yè)在使用該技術(shù)時(shí),需要注意密碼安全、訪問權(quán)限設(shè)置、備份環(huán)節(jié)等細(xì)節(jié),以確保備份數(shù)據(jù)的安全性、可用性。在日常管理中,企業(yè)還應(yīng)定期進(jìn)行備份、更新備份策略,以便更好地保護(hù)企業(yè)的敏感數(shù)據(jù)。
相關(guān)問題拓展閱讀:
- mysql數(shù)據(jù)庫備份
- mysql數(shù)據(jù)庫備份問題
mysql數(shù)據(jù)庫備份
dump
在數(shù)據(jù)庫表丟失或損壞的情況下,備份你的數(shù)據(jù)庫是很重要的。如果發(fā)生系統(tǒng)崩潰,你肯定想能夠?qū)⒛愕谋肀M可能丟失最少的數(shù)據(jù)恢復(fù)到崩潰發(fā)生時(shí)的狀態(tài)。有時(shí),正是MySQL管理員造成破壞。管理員已經(jīng)知道表以破壞,用諸如vi或Emacs等編輯器試圖直接編輯它們,這對(duì)表絕對(duì)不是件好事!
備份數(shù)據(jù)庫兩個(gè)主要方法是用mysqldump程序或直接拷貝數(shù)據(jù)庫文件(如用cp、cpio或tar等)。每種方法都有其優(yōu)缺點(diǎn):
? mysqldump與MySQL服務(wù)器協(xié)同操作。直接拷貝方法在服務(wù)器外部進(jìn)行,并且你必須采取措施保證沒有客戶正在修改你將拷貝的表。如果你想用文件系統(tǒng)備份來備份數(shù)據(jù)庫,也會(huì)發(fā)生同樣的問題:如果數(shù)據(jù)庫表在文件系統(tǒng)備份過程中被修改,進(jìn)入備份的表文件主語不一致的狀態(tài),而對(duì)以后的恢復(fù)表將失去意義。文件系統(tǒng)備份與直接拷貝文件的區(qū)別是對(duì)后者你完全控制了備份過程,這樣你能采取措施確保服務(wù)器讓表不受干擾。
? mysqldump比直接拷貝要慢些。
? mysqldump生成能夠移植到其它機(jī)器的文本文件,甚至那些有不同硬件結(jié)構(gòu)的機(jī)器上。直接拷貝文件不能移植到其它機(jī)器上,除非你正在拷貝的表使用MyISAM存儲(chǔ)格式。ISAM表只能在相似的硬件結(jié)構(gòu)的機(jī)器上拷貝。在MySQL 3.23中引入的MyISAM表存儲(chǔ)格式解決了該問題,因?yàn)樵摳袷绞菣C(jī)器無關(guān)的,所以直接拷貝文件可以移植到具有不同硬件結(jié)構(gòu)的機(jī)器上。只要滿足兩個(gè)條件:另一臺(tái)機(jī)器必須也運(yùn)行MySQL 3.23或以后版本,而且文件必須以MyISAM格式表示,而不是ISAM格式。
不管你使用哪種備份方法,如果你需要恢復(fù)數(shù)據(jù)庫,有幾個(gè)原則應(yīng)該遵守,以確保更好的結(jié)果:
? 定期實(shí)施備份。建立一個(gè)計(jì)劃并嚴(yán)格遵守。
? 讓服務(wù)器執(zhí)行更新日志。當(dāng)你在崩潰后需要恢復(fù)數(shù)據(jù)時(shí),更新日志將幫助你。在你用備份文件恢復(fù)數(shù)據(jù)到備份時(shí)的狀態(tài)后,你可以通過運(yùn)行更新日志中的查詢?cè)俅芜\(yùn)用備份后面的修改,這將數(shù)據(jù)庫中的表恢復(fù)到崩潰發(fā)生時(shí)的狀態(tài)。
? 以文件系統(tǒng)備份的術(shù)語講,數(shù)據(jù)做物庫備份文件代表完全傾倒(full dump),而更新日志代表漸進(jìn)傾倒(incremental dump)。
? 使用一種統(tǒng)一的和易理解的備份文件命名機(jī)制。象backup1、buckup2等不是特別有意義。當(dāng)實(shí)施你的恢復(fù)時(shí),你將浪費(fèi)時(shí)間找出文件里是什么東西。你可能發(fā)覺用數(shù)據(jù)庫名和日期純核液構(gòu)成備份文件名會(huì)很有用。例如:
? %mysqldump samp_db >/usr/archives/mysql/samp_db.
? %mysqldump menagerie >/usr/archives/mysql/menagerie.
? 你可能想在生成備份后壓縮它們。備份一般都很大!你也需要讓你的備份文件有過期期限以避免它們填滿你的磁盤,就象你讓你的日志文件過期那樣。
? 用文件系統(tǒng)備份備份你的備份文件。如果遇上了一個(gè)徹底崩潰,不僅清除了你的數(shù)據(jù)目錄,也清除了包含你的數(shù)據(jù)庫備份的磁盤驅(qū)動(dòng)器,你將真正遇上了麻煩。也要備份你的更新日志。
? 將你的備份文件放在不同于用于你的數(shù)據(jù)庫的文件系統(tǒng)上。這將降低由于生成備份而填滿包含數(shù)據(jù)目錄的文件系統(tǒng)的可能性。
用于創(chuàng)建備份的技術(shù)同樣對(duì)拷貝數(shù)據(jù)庫到另一臺(tái)機(jī)器有用。氏裂最常見地,一個(gè)數(shù)據(jù)庫被轉(zhuǎn)移到了運(yùn)行在另一臺(tái)主機(jī)上的服務(wù)器,但是你也可以將數(shù)據(jù)轉(zhuǎn)移到同一臺(tái)主機(jī)上的另一個(gè)服務(wù)器。
1 使用mysqldump備份和拷貝數(shù)據(jù)庫
當(dāng)你使用mysqldumo程序產(chǎn)生數(shù)據(jù)庫備份文件時(shí),缺省地,文件內(nèi)容包含創(chuàng)建正在傾倒的表的CREATE語句和包含表中行數(shù)據(jù)的INSERT語句。換句話說,mysqldump產(chǎn)生的輸出可在以后用作mysql的輸入來重建數(shù)據(jù)庫。
你可以將整個(gè)數(shù)據(jù)庫傾倒進(jìn)一個(gè)單獨(dú)的文本文件中,如下:
%mysqldump samp_db >/usr/archives/mysql/samp_db.
輸出文件的開頭看起來象這樣:
# MySQL Dump 6.0# # Host: localhost Database: samp_db## Server version 3.23.2-alpha-log## Table structure for table ‘a(chǎn)bsence’#CREATE TABLE absence( student_id int(10) unsigned DEFAULT ‘0’ NOT NULL, date date DEFAULT ” NOT NULL, PRIMARY KEY (student_id,date));## Dumping data for table ‘a(chǎn)bsence’#INSERT INTO absence VALUES (3,”);INSERT INTO absence VALUES (5,”);INSERT INTO absence VALUES (10,”);……
文件剩下的部分有更多的INSERT和CREATE TABLE語句組成。
如果你想壓縮備份,使用類似如下的命令:
%mysqldump samp_db | gzip >/usr/archives/mysql/samp_db..gz
如果你要一個(gè)龐大的數(shù)據(jù)庫,輸出文件也將很龐大,可能難于管理。如果你愿意,你可以在mysqldump命令行的數(shù)據(jù)庫名后列出單獨(dú)的表名來傾到它們的內(nèi)容,這將傾倒文件分成較小、更易于管理的文件。下例顯示如何將samp_db數(shù)據(jù)庫的一些表傾到進(jìn)分開的文件中:
%mysqldump samp_db student score event absence >grapbook.sql
%mysqldump samp_db member president >hist-league.sql
如果你生成準(zhǔn)備用于定期刷新另一個(gè)數(shù)據(jù)庫內(nèi)容的備份文件,你可能想用–add-drop-table選項(xiàng)。這告訴服務(wù)器將DROP TABLE IF EXISTS語句寫入備份文件,然后,當(dāng)你取出備份文件并把它裝載進(jìn)第二個(gè)數(shù)據(jù)庫時(shí),如果表已經(jīng)存在,你不會(huì)得到一個(gè)錯(cuò)誤。
如果你倒出一個(gè)數(shù)據(jù)庫以便能把數(shù)據(jù)庫轉(zhuǎn)移到另一個(gè)服務(wù)器,你甚至不必創(chuàng)建備份文件。要保證數(shù)據(jù)庫存在于另一臺(tái)主機(jī),然后用管道傾倒數(shù)據(jù)庫,這樣mysql能直接讀取mysqldump的輸出。例如:你想從主機(jī)pit-viper.snake.net拷貝數(shù)據(jù)庫samp_db到boa.snake.net,可以這樣很容易做到:
%mysqladmin -h boa.snake.net create samp_db
%mysqldump samp_db | mysql -h boa.snake.net samp_db
以后,如果你想再次刷新boa.snake.net上的數(shù)據(jù)庫,跳過mysqladmin命令,但要對(duì)mysqldump加上–add-drop-table以避免的得到表已存在的錯(cuò)誤:
%mysqldump –add-drop-table samp_db | mysql -h boa.snake.net samp_db
mysqldump其它有用的選項(xiàng)包括:
? –flush-logs和–lock-tables組合將對(duì)你的數(shù)據(jù)庫檢查點(diǎn)有幫助。–lock-tables鎖定你正在傾倒的所有表,而–flush-logs關(guān)閉并重新打開更新日志文件,新的更新日志將只包括從備份點(diǎn)起的修改數(shù)據(jù)庫的查詢。這將設(shè)置你的更新日志檢查點(diǎn)位備份時(shí)間。(然而如果你有需要執(zhí)行個(gè)更新的客戶,鎖定所有表對(duì)備份期間的客戶訪問不是件好事。)
? 如果你使用–flush-logs設(shè)置檢查點(diǎn)到備份時(shí),有可能更好是傾倒整個(gè)數(shù)據(jù)庫。如果你傾倒單獨(dú)的文件,較難將更新日志檢查點(diǎn)與備份文件同步。在恢復(fù)期間,你通常按數(shù)據(jù)庫為基礎(chǔ)提取更新日志內(nèi)容,對(duì)單個(gè)表沒有提取更新的選擇,所以你必須自己提取它們。
? 缺省地,mysqldump在寫入前將一個(gè)表的整個(gè)內(nèi)容讀進(jìn)內(nèi)存。這通常確實(shí)不必要,并且實(shí)際上如果你有一個(gè)大表,幾乎是失敗的。你可用–quick選項(xiàng)告訴mysqldump只要它檢索出一行就寫出每一行。為了進(jìn)一步優(yōu)化傾倒過程,使用–opt而不是–quick。–opt選項(xiàng)打開其它選項(xiàng),加速數(shù)據(jù)的傾倒和把它們讀回。
? 用–opt實(shí)施備份可能是最常用的方法,因?yàn)閭浞菟俣壬系膬?yōu)勢(shì)。然而,要警告你,–opt選項(xiàng)確實(shí)有代價(jià),–opt優(yōu)化的是你的備份過程,不是其他客戶對(duì)數(shù)據(jù)庫的訪問。–opt選項(xiàng)通過一次鎖定所有表阻止任何人更新你正在傾倒的任何表。你可在一般數(shù)據(jù)庫訪問上很容易看到其效果。當(dāng)你的數(shù)據(jù)庫一般非常頻繁地使用,只是一天一次地調(diào)節(jié)備份。
? 一個(gè)具有–opt的相反效果的選項(xiàng)是–dedayed。該選項(xiàng)使得mysqldump寫出INSERT DELAYED語句而不是INSERT語句。如果你將數(shù)據(jù)文件裝入另一個(gè)數(shù)據(jù)庫并且你想是這個(gè)操作對(duì)可能出現(xiàn)在該數(shù)據(jù)庫中的查詢的影響最小,–delayed對(duì)此很有幫助。
? –compress選項(xiàng)在你拷貝數(shù)據(jù)庫到另一臺(tái)機(jī)器上時(shí)很有幫助,因?yàn)樗鼫p少網(wǎng)絡(luò)傳輸字節(jié)的數(shù)量。下面有一個(gè)例子,注意到–compress對(duì)與遠(yuǎn)端主機(jī)上的服務(wù)器通信的程序才給出,而不是對(duì)與本地主機(jī)連接的程序:
%mysqldump –opt samp_db | mysql –compress -h boa.snake.net samp_db
? mysqldump有很多選項(xiàng),詳見《MySQL參考手冊(cè)》。
2 使用直接拷貝數(shù)據(jù)庫的備份和拷貝方法
另一種不涉及mysqldump備份數(shù)據(jù)庫和表的方式是直接拷貝數(shù)據(jù)庫表文件。典型地,這用諸如cp、tar或cpio實(shí)用程序。本文的例子使用cp。
當(dāng)你使用一種直接備份方法時(shí),你必須保證表不在被使用。如果服務(wù)器在你則正在拷貝一個(gè)表時(shí)改變它,拷貝就失去意義。
保證你的拷貝完整性的更好方法是關(guān)閉服務(wù)器,拷貝文件,然后重啟服務(wù)器。如果你不想關(guān)閉服務(wù)器,要在執(zhí)行表檢查的同時(shí)鎖定服務(wù)器。如果服務(wù)器在運(yùn)行,相同的制約也適用于拷貝文件,而且你應(yīng)該使用相同的鎖定協(xié)議讓服務(wù)器“安靜下來”。
假設(shè)服務(wù)器關(guān)閉或你已經(jīng)鎖定了你想拷貝的表,下列顯示如何將整個(gè)samp_db數(shù)據(jù)庫備份到一個(gè)備份目錄(DATADIR表示服務(wù)器的數(shù)據(jù)目錄):
%cdDATADIR%cp -r samp_db /usr/archive/mysql
單個(gè)表可以如下備份:
%cdDATADIR/samp_db%cp member.* /usr/archive/mysql/samp_db%cp score.* /usr/archive/mysql/samp_db ….
當(dāng)你完成了備份時(shí),你可以重啟服務(wù)器(如果關(guān)閉了它)或釋放加在表上的鎖定(如果你讓服務(wù)器運(yùn)行)。
要用直接拷貝文件把一個(gè)數(shù)據(jù)庫從一臺(tái)機(jī)器拷貝到另一臺(tái)機(jī)器上,只是將文件拷貝到另一臺(tái)服務(wù)器主機(jī)的適當(dāng)數(shù)據(jù)目錄下即可。要確保文件是MyIA格式或兩臺(tái)機(jī)器有相同的硬件結(jié)構(gòu),否則你的數(shù)據(jù)庫在另一臺(tái)主機(jī)上有奇怪的內(nèi)容。你也應(yīng)該保證在另一臺(tái)機(jī)器上的服務(wù)器在你正在安裝數(shù)據(jù)庫表時(shí)不訪問它們。
3 復(fù)制數(shù)據(jù)庫(Replicating Database)
復(fù)制(Replication)類似于拷貝數(shù)據(jù)庫到另一臺(tái)服務(wù)器上,但它的確切含義是實(shí)時(shí)地保證兩個(gè)數(shù)據(jù)庫的完全同步。這個(gè)功能將在3.23版中出現(xiàn),而且還不很成熟,因此本文不作詳細(xì)介紹。
4 用備份恢復(fù)數(shù)據(jù)
數(shù)據(jù)庫損壞的發(fā)生有很多原因,程度也不同。如果你走運(yùn),你可能僅損壞一兩個(gè)表(如掉電),如果你倒霉,你可能必須替換整個(gè)數(shù)據(jù)目錄(如磁盤損壞)。在某些情況下也需要恢復(fù),比如用戶錯(cuò)誤地刪除了數(shù)據(jù)庫或表。不管這些倒霉事件的原因,你將需要實(shí)施某種恢復(fù)。
如果表損壞但沒丟失,嘗試用myisamchk或isamchk修復(fù)它們,如果這樣的損壞可有修復(fù)程序修復(fù),你可能根本不需要使用備份文件。關(guān)于表修復(fù)的過程,見《數(shù)據(jù)庫維護(hù)與修復(fù)》。
恢復(fù)過程涉及兩種信息源:你的備份文件和個(gè)更新日志。備份文件將表恢復(fù)到實(shí)施備份時(shí)的狀態(tài),然而一般表在備份與發(fā)生問題之間的時(shí)間內(nèi)已經(jīng)被修改,更新日志包含了用于進(jìn)行這些修改的查詢。你可以使用日志文件作為mysql的輸入來重復(fù)查詢。這已正是為什么要啟用更新日志的原因。
恢復(fù)過程視你必須恢復(fù)的信息多少而不同。實(shí)際上,恢復(fù)整個(gè)數(shù)據(jù)庫比單個(gè)表跟容易,因?yàn)閷?duì)于數(shù)據(jù)庫運(yùn)用更新日志比單個(gè)表容易。
4.1 恢復(fù)整個(gè)數(shù)據(jù)庫
首先,如果你想恢復(fù)的數(shù)據(jù)庫是包含授權(quán)表的mysql數(shù)據(jù)庫,你需要用–skip-grant-table選項(xiàng)運(yùn)行服務(wù)器。否則,它會(huì)抱怨不能找到授權(quán)表。在你已經(jīng)恢復(fù)表后,執(zhí)行mysqladmin flush-privileges告訴服務(wù)器裝載授權(quán)標(biāo)并使用它們。
? 將數(shù)據(jù)庫目錄內(nèi)容拷貝到其它某個(gè)地方,如果你在以后需要它們。
? 用最新的備份文件重裝數(shù)據(jù)庫。如果你用mysqldump產(chǎn)生的文件,將它作為mysql的輸入。如果你用直接從數(shù)據(jù)庫拷貝來的文件,將它們直接拷回?cái)?shù)據(jù)庫目錄,然而,此時(shí)你需要在拷貝文件之前關(guān)閉數(shù)據(jù)庫,然后重啟它。
使用更新日志重復(fù)做備份以后的修改數(shù)據(jù)庫表的查詢。對(duì)于任何可適用的更新日志,將它們作為mysql的輸入。指定–one-database選項(xiàng)使得mysql只執(zhí)行你有興趣恢復(fù)的數(shù)據(jù)庫的查詢。如果你知道你需要運(yùn)用所有更新日志文件,你可以在包含日志的目錄下使用這條命令:
% ls -t -r -1 update.* | xargs cat | mysql –one-databasedb_name
ls命令生成更新日志文件的一個(gè)單列列表,根據(jù)服務(wù)器產(chǎn)生它們的次序排序(主意:如果你修改任何一個(gè)文件,你將改變排序次序,這導(dǎo)致更新日志一錯(cuò)誤的次序被運(yùn)用。)
很可能你會(huì)是運(yùn)用某幾個(gè)更新日志。例如,自從你備份以來產(chǎn)生的更新日志被命名為update.392、update.393等等,你可以這樣重新運(yùn)行:
%mysql –one-database db_name query(“SHOW CREATE TABLE $table”);
$create = $db->fetch_row($createtable);
$tabledump .= $create.”;\n\n”;
return $tabledump;
}
/****** 備份數(shù)據(jù)庫結(jié)構(gòu)和所有數(shù)據(jù) ******/
/*
函數(shù)名稱:data2sql()
函數(shù)功能:把表的結(jié)構(gòu)和數(shù)據(jù)轉(zhuǎn)換成為SQL
函數(shù)參數(shù):$table: 要進(jìn)行提取的表名
返 回 值:返回提取后的結(jié)果,SQL
函數(shù)作者:heiyeluren
*/
function data2sql($table)
{
global $db;
$tabledump = “DROP TABLE IF EXISTS $table;\n”;
$createtable = $db->query(“SHOW CREATE TABLE $table”);
$create = $db->fetch_row($createtable);
$tabledump .= $create.”;\n\n”;
$rows = $db->query(“SELECT * FROM $table”);
$numfields = $db->num_fields($rows);
$numrows = $db->num_rows($rows);
while ($row = $db->fetch_row($rows))
{
$comma = “”;
$tabledump .= “INSERT INTO $table VALUES(“;
for($i = 0; $i Host\n”.
“# 數(shù)據(jù)庫:$db->Database\n”.
“# 備份編號(hào): “. create_sess_id() .”\n”. // 這里有一個(gè)生成session id的函數(shù)
“# 備份時(shí)間: “.time_to_date(”,6).”\n”. // 這里就是獲取當(dāng)前時(shí)間的函數(shù)
“#\n”.
“# 管理員:$admin ($admin_email)\n”. // 管理員的用戶名和郵箱地址
“# $copyright\n”.
“#-\n\n\n”.
$sqldump;
// 保存到本地
if($saveto == “l(fā)ocal”)
{
ob_end_clean();
header(‘Content-Encoding: none’);
header(‘Content-Type: ‘.(strpos($HTTP_SERVER_VARS, ‘MSIE’) ? ‘a(chǎn)pplication/octetstream’ : ‘a(chǎn)pplication/octet-stream’));
header(‘Content-Disposition: ‘.(strpos($HTTP_SERVER_VARS, ‘MSIE’) ? ‘inline; ‘ : ‘a(chǎn)ttachment; ‘).’filename=”‘.$local_filename);
header(‘Content-Length: ‘.strlen($sqldump));
header(‘Pragma: no-cache’);
header(‘Expires: 0’);
echo $sqldump;
}
// 保存到本地結(jié)束
// 保存在服務(wù)器
if($saveto == “server”)
{
if($filename != “”)
{
@$fp = fopen($filename, “w+”);
if ($fp)
{
@flock($fp, 3);
if(@!fwrite($fp, $sqldump))
{
@fclose($fp);
exit_msg(“數(shù)據(jù)文件無法保存到服務(wù)器,請(qǐng)檢查目錄屬性你是否有寫的權(quán)限。”);
}
else
{
exit_msg(“數(shù)據(jù)成功備份至服務(wù)器 $filename 中?!?;
}
}
else
{
exit_msg(“無法打開你指定的目錄”. $filename .”,請(qǐng)確定該目錄是否存在,或者是否有相應(yīng)權(quán)限”);
}
}
else
{
exit_msg(“您沒有輸入備份文件名,請(qǐng)返回修改?!?;
}
}
// 保存到服務(wù)器結(jié)束
}
else
{
exit_msg(“數(shù)據(jù)表沒有任何內(nèi)容”);
}
/* 備份數(shù)據(jù)庫結(jié)束 */
數(shù)據(jù)庫陪沒斗備份不蘆磨是一兩句編程語句就可以搞定的。。。
建議你還是看看mysql的幫助手冊(cè)吧,里面察余很詳細(xì)啊。
mysql數(shù)據(jù)庫備份問題
MyISAM 表是保存成文件的形式,因此相對(duì)比較容易備份,上面提到的幾種方法都可以使用。Innodb 所有的表都保存在同一個(gè)數(shù)據(jù)文件 ibdata1 中(也可能是多個(gè)文件,或者是獨(dú)立的表空間文件),相對(duì)來說比較不好備份,免費(fèi)的方案可以是拷貝數(shù)據(jù)文件、備份 binlog,或者用 mysqldump。1. 使用直接拷貝數(shù)據(jù)庫備份 典型的如cp、tar或cpio實(shí)用程序當(dāng)你使用直接備份方法時(shí),必須保證表不在被使用。如果服務(wù)器在你正在拷貝一個(gè)表時(shí)改變它,拷貝就失去意義。保證你的拷貝完整性的更好方法是關(guān)閉服務(wù)器,拷貝文件,然后重啟服務(wù)器。 如果你不想關(guān)閉服務(wù)器,要在執(zhí)行表檢查的同時(shí)鎖定服務(wù)器。如果服務(wù)器在運(yùn)行,相同的制約也適用于拷貝文件,應(yīng)該使用相同的鎖定協(xié)議讓服務(wù)器“安靜下來”。當(dāng)你完成了MySQL數(shù)據(jù)庫備份時(shí),需要重啟服務(wù)器(如果關(guān)閉了它)或釋放加在表上的鎖定(如果你讓服務(wù)器運(yùn)行)。 要用直接拷貝文件把一個(gè)數(shù)據(jù)庫從一臺(tái)機(jī)器拷貝到另一臺(tái)機(jī)器上,只是將文件拷貝到另一臺(tái)服務(wù)器主機(jī)的適當(dāng)數(shù)據(jù)目錄下即可。要確保文件是MyIA格式或兩臺(tái)機(jī)器有相同的硬件結(jié)構(gòu),否則你的數(shù)據(jù)庫在另一臺(tái)主機(jī)上有奇怪的內(nèi)容。你也應(yīng)該保證在另一臺(tái)機(jī)器上的服務(wù)器在你正在安裝數(shù)據(jù)庫表時(shí)不訪問它們。2. 使用mysqldump數(shù)據(jù)庫備份mysqldump 是采用SQL級(jí)別的備份機(jī)制,它將數(shù)據(jù)表導(dǎo)成 SQL 腳本文件,在不同的 MySQL 版本之間升級(jí)時(shí)相對(duì)比較合適,這也是最常用的備份方法。mysqldump程序備份數(shù)據(jù)庫較慢,但它生成的文本文件便于移植。mysqldump 的一些主要參數(shù):1)–compatible=name它告訴 mysqldump,導(dǎo)出的數(shù)據(jù)將和哪種數(shù)據(jù)庫或哪個(gè)舊版本的 MySQL 服務(wù)器相兼容。值可以為 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用幾個(gè)值,用逗號(hào)將它們隔開。當(dāng)然了,它并不保證能完全兼容,而是盡量兼容。2)–complete-insert,-c導(dǎo)出的數(shù)據(jù)采用包含字段名的完整 INSERT 方式,冊(cè)敬慶也就是把所有的值都寫在一行。這么做能提高插入效率,但是可能會(huì)受到 max_allowed_packet 參數(shù)的影響而導(dǎo)致插入失敗。因此,需要謹(jǐn)慎使用該參數(shù),至少我不推薦。3)–default-character-set=charset指定導(dǎo)出數(shù)據(jù)時(shí)采用何種字符集,如果數(shù)據(jù)表不是采州握用默認(rèn)的 latin1 字符集的話,那么導(dǎo)出時(shí)必須指定該選項(xiàng),否則再次導(dǎo)入數(shù)據(jù)后將產(chǎn)生亂碼問題。4)–disable-keys告訴mysqldump 在 INSERT 語句的開頭和結(jié)尾增加 ; 和 ; 語句,這能大大提高插入語句的速度,因?yàn)樗窃诓迦胪晁袛?shù)據(jù)后才重建索引的。該選項(xiàng)只適合 MyISAM 表。5)–extended-insert = true|false默認(rèn)情況下,mysqldump 開啟 –complete-insert 模式,因此不想用它的的話,就使用本選項(xiàng),設(shè)定它的值為 false 即可。6)–hex-blob使用十六進(jìn)制格式導(dǎo)出二進(jìn)制字符串字段。如果有二進(jìn)制數(shù)據(jù)就必須使用本選項(xiàng)。影響到的稿陸字段類型有 BINARY、VARBINARY、BLOB。7)–lock-all-tables,-x在開始導(dǎo)出之前,提交請(qǐng)求鎖定所有數(shù)據(jù)庫中的所有表,以保證數(shù)據(jù)的一致性。這是一個(gè)全局讀鎖,并且自動(dòng)關(guān)閉 –single-transaction 和 –lock-tables 選項(xiàng)。8)–lock-tables它和–lock-all-tables 類似,不過是鎖定當(dāng)前導(dǎo)出的數(shù)據(jù)表,而不是一下子鎖定全部庫下的表。本選項(xiàng)只適用于 MyISAM 表,如果是 Innodb 表可以用 –single-transaction 選項(xiàng)。9)–no-create-info,-t只導(dǎo)出數(shù)據(jù),而不添加 CREATE TABLE 語句。10)–no-data,-d不導(dǎo)出任何數(shù)據(jù),只導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)。11)–opt這只是一個(gè)快捷選項(xiàng),等同于同時(shí)添加 –add-drop-tables –add-locking –create-option –disable-keys –extended-insert –lock-tables –quick –set-charset 選項(xiàng)。本選項(xiàng)能讓 mysqldump 很快的導(dǎo)出數(shù)據(jù),并且導(dǎo)出的數(shù)據(jù)能很快導(dǎo)回。該選項(xiàng)默認(rèn)開啟,但可以用 –skip-opt 禁用。注意,如果運(yùn)行 mysqldump 沒有指定 –quick 或 –opt 選項(xiàng),則會(huì)將整個(gè)結(jié)果集放在內(nèi)存中。如果導(dǎo)出大數(shù)據(jù)庫的話可能會(huì)出現(xiàn)問題。12)–quick,-q該選項(xiàng)在導(dǎo)出大表時(shí)很有用,它強(qiáng)制 mysqldump 從服務(wù)器查詢?nèi)〉糜涗浿苯虞敵龆皇侨〉盟杏涗浐髮⑺鼈兙彺娴絻?nèi)存中。13)–routines,-R導(dǎo)出存儲(chǔ)過程以及自定義函數(shù)。14)–single-transaction該選項(xiàng)在導(dǎo)出數(shù)據(jù)之前提交一個(gè) BEGIN SQL語句,BEGIN 不會(huì)阻塞任何應(yīng)用程序且能保證導(dǎo)出時(shí)數(shù)據(jù)庫的一致性狀態(tài)。它只適用于事務(wù)表,例如 InnoDB 和 BDB。本選項(xiàng)和 –lock-tables 選項(xiàng)是互斥的,因?yàn)?LOCK TABLES 會(huì)使任何掛起的事務(wù)隱含提交。要想導(dǎo)出大表的話,應(yīng)結(jié)合使用 –quick 選項(xiàng)。–triggers同時(shí)導(dǎo)出觸發(fā)器。該選項(xiàng)默認(rèn)啟用,用 –skip-triggers 禁用它。備份:使用mysqldump備份數(shù)據(jù)庫其實(shí)就是把數(shù)據(jù)庫轉(zhuǎn)儲(chǔ)成一系列CREATE TABLE和INSERT語句,通過這些語句我們就可重新生成數(shù)據(jù)庫。使用mysqldump的方法如下:% mysqldump –opt testdb | gzip > /data/backup/testdb.bak#–opt選項(xiàng)會(huì)對(duì)轉(zhuǎn)儲(chǔ)過程進(jìn)行優(yōu)化,生成的備份文件會(huì)小一點(diǎn),后的管道操作會(huì)進(jìn)行數(shù)據(jù)壓縮% mysqldump –opt testdb mytable1,mytable2 | gzip > /data/backup/testdb_mytable.bak#可在數(shù)據(jù)庫后接數(shù)據(jù)表名,只導(dǎo)出指定的數(shù)據(jù)表,多個(gè)數(shù)據(jù)表可用逗號(hào)分隔–opt選項(xiàng)還可激活–add-drop-table選項(xiàng),它將會(huì)在備份文件的每條CREATE TABLE前加上一條DROP TABLE IF EXISTS語句。這可方便進(jìn)行數(shù)據(jù)表的更新,而不會(huì)發(fā)生“數(shù)據(jù)表已存在”的錯(cuò)誤。用mysqldump命令還可直接把數(shù)據(jù)庫轉(zhuǎn)移到另外一臺(tái)服務(wù)器上,不用生成備份文件。重復(fù)執(zhí)行可定期更新遠(yuǎn)程數(shù)據(jù)庫。% mysqladmin -h remote_host create testdb% mysqldump –opt testdb | mysql -h remote_host testdb另外還可通過ssh遠(yuǎn)程調(diào)用服務(wù)器上的程序,如:% ssh remote_host mysqladmin create testdb% mysqldump –opt testdb | ssh remote_host mysql testdb 通過直接拷貝系統(tǒng)文件的方式備份數(shù)據(jù)庫,在備份時(shí),要確保沒有人對(duì)數(shù)據(jù)庫進(jìn)行修改操作。要做到這點(diǎn),更好關(guān)閉服務(wù)器。如果不能關(guān)閉的,要以只讀方試鎖定有關(guān)數(shù)據(jù)表。下面是一些示例:% cp -r db /backup/db #備份db數(shù)據(jù)庫到/backup/db目錄% cp table_name.* /backup/db #只備份table_name數(shù)據(jù)表% scp -r db remotehot:/usr/local/mysql/data #用scp把數(shù)據(jù)庫直接拷貝到遠(yuǎn)程服務(wù)器,在把數(shù)據(jù)庫直接拷貝到遠(yuǎn)程主機(jī)時(shí),應(yīng)注意兩臺(tái)機(jī)器必須有同樣的硬件結(jié)構(gòu),或者將拷貝的數(shù)據(jù)表全部是可移植數(shù)據(jù)表類型。或者/usr/local/mysql/bin/mysqldump -uroot -proot \–default-character-set=utf8 –opt –extended-insert=false \–triggers -R –hex-blob -x testdb > testdb.sql使用以下 SQL 來備份 Innodb 表:/usr/local/mysql/bin/mysqldump -uroot -proot \–default-character-set=utf8 –opt –extended-insert=false \–triggers -R –hex-blob –single-transaction testdb > testdb.sql另外,如果想要實(shí)現(xiàn)在線備份,還可以使用 –master-data 參數(shù)來實(shí)現(xiàn),如下:/usr/local/mysql/bin/mysqldump -uroot -proot \–default-character-set=utf8 –opt –master-data=1 \–single-transaction –flush-logs testdb > testdb.sql它只是在一開始的瞬間請(qǐng)求鎖表,然后就刷新binlog了,而后在導(dǎo)出的文件中加入CHANGE MASTER 語句來指定當(dāng)前備份的binlog位置,如果要把這個(gè)文件恢復(fù)到slave里去,就可以采用這種方法來做。 還原:用mysqldump 備份出來的文件是一個(gè)可以直接倒入的 SQL 腳本,有兩種方法可以將數(shù)據(jù)導(dǎo)入。直接用 mysql 客戶端例如:/usr/local/mysql/bin/mysql -uroot -proot testdb LOCK TABLES tb1 READ,tb2 READ;mysql> BACKUP TABLE tb1,tb2 TO ‘backup/db’;mysql> UNLOCK TABLES;使用BACKUP TABLE語句備份的數(shù)據(jù)表可用RESTORE TABLE重新加載到服務(wù)器。注意,必須要有 FILE 權(quán)限才能執(zhí)行本SQL,并且目錄 /tmp/testdb/ 必須能被 mysqld 用戶可寫,導(dǎo)出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問題。SELECT INTO OUTFILE 則是把數(shù)據(jù)導(dǎo)出來成為普通的文本文件,可以自定義字段間隔的方式,方便處理這些數(shù)據(jù)。例子:SELECT * INTO OUTFILE ‘/tmp/testdb/tbl_test.txt’ FROM tbl_test;注意,必須要有 FILE 權(quán)限才能執(zhí)行本SQL,并且文件 /tmp/testdb/tbl_test.txt 必須能被 mysqld 用戶可寫,導(dǎo)出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問題。還原:用BACKUP TABLE 方法備份出來的文件,可以運(yùn)行 RESTORE TABLE 語句來恢復(fù)數(shù)據(jù)表。例子:RESTORE TABLE FROM ‘/tmp/testdb/’;權(quán)限要求類似上面所述。用SELECT INTO OUTFILE 方法備份出來的文件,可以運(yùn)行 LOAD DATA INFILE 語句來恢復(fù)數(shù)據(jù)表。例子:LOAD DATA INFILE ‘/tmp/testdb/tbl_name.txt’ INTO TABLE tbl_name;權(quán)限要求類似上面所述。倒入數(shù)據(jù)之前,數(shù)據(jù)表要已經(jīng)存在才行。
Unknown database ‘hibernate_cache;’銷汪
數(shù)據(jù)庫名寫錯(cuò)了 提碧閉示不虧慧仔存在。。
關(guān)于數(shù)據(jù)庫文件備份出來帶星號(hào)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價(jià)格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動(dòng)、聯(lián)通等。
網(wǎng)站題目:數(shù)據(jù)庫備份加星號(hào):保護(hù)你的數(shù)據(jù)安全。(數(shù)據(jù)庫文件備份出來帶星號(hào))
鏈接分享:http://m.5511xx.com/article/codhsso.html


咨詢
建站咨詢
