新聞中心
如何實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù)
在數(shù)據(jù)庫(kù)表丟失或損壞的情況下 備份你的數(shù)據(jù)庫(kù)是很重要的 如果發(fā)生系統(tǒng)崩潰 你肯定想能夠?qū)⒛愕谋肀M可能丟失最少的數(shù)據(jù)恢復(fù)到崩潰發(fā)生時(shí)的狀態(tài) 有時(shí) 正是MySQL管理員造成破壞 管理員已經(jīng)知道表以破壞 用諸如vi或Emacs等編輯器試圖直接編輯它們 這對(duì)表絕對(duì)不是件好事!備份數(shù)據(jù)庫(kù)兩個(gè)主要方法是用mysqldump程序或直接拷貝數(shù)據(jù)庫(kù)文件(如用cp cpio或tar等) 每種方法都有其優(yōu)缺點(diǎn) mysqldump與MySQL服務(wù)器協(xié)同操作 直接拷貝方法在服務(wù)器外部進(jìn)行 并且你必須采取措施保證沒(méi)有客戶正在修改你將拷貝的表 如果你想用文件系統(tǒng)備份來(lái)備份數(shù)據(jù)庫(kù) 也會(huì)發(fā)生同樣的問(wèn)題 如果數(shù)據(jù)庫(kù)表在文件系統(tǒng)備份過(guò)程中被修改 進(jìn)入備份的表文件主語(yǔ)不一致的狀態(tài) 而對(duì)以后的恢復(fù)表將失去意義 文件系統(tǒng)備份與直接拷貝文件的區(qū)別是對(duì)后者你完全控制了備份過(guò)程 這樣你能采取措施確保服務(wù)器讓表不受干擾 mysqldump比直接拷貝要慢些 mysqldump生成能夠移植到其它機(jī)器的文本文件 甚至那些有不同硬件結(jié)構(gòu)的機(jī)器上 直接拷貝文件不能移植到其它機(jī)器上 除非你正在拷貝的表使用MyISAM存儲(chǔ)格式 ISAM表只能在相似的硬件結(jié)構(gòu)的機(jī)器上拷貝 在MySQL 中引入的MyISAM表存儲(chǔ)格式解決了該問(wèn)題 因?yàn)樵摳袷绞菣C(jī)器無(wú)關(guān)的 所以直接拷貝文件可以移植到具有不同硬件結(jié)構(gòu)的機(jī)器上 只要滿足兩個(gè)條件 另一臺(tái)機(jī)器必須也運(yùn)行MySQL 或以后版本 而且文件必須以MyISAM格式表示 而不是ISAM格式 不管你使用哪種備份方法 如果你需要恢復(fù)數(shù)據(jù)庫(kù) 有幾個(gè)原則應(yīng)該遵守 以確保最好的結(jié)果 定期實(shí)施備份 建立一個(gè)計(jì)劃并嚴(yán)格遵守 讓服務(wù)器執(zhí)行更新日志 當(dāng)你在崩潰后需要恢復(fù)數(shù)據(jù)時(shí) 更新日志將幫助你 在你用備份文件恢復(fù)數(shù)據(jù)到備份時(shí)的狀態(tài)后 你可以通過(guò)運(yùn)行更新日志中的查詢?cè)俅芜\(yùn)用備份后面的修改 這將數(shù)據(jù)庫(kù)中的表恢復(fù)到崩潰發(fā)生時(shí)的狀態(tài) 以文件系統(tǒng)備份的術(shù)語(yǔ)講 數(shù)據(jù)庫(kù)備份文件代表完全傾倒(full dump) 而更新日志代表漸進(jìn)傾倒(incremental dump) 使用一種統(tǒng)一的和易理解的備份文件命名機(jī)制 象backup buckup 等不是特別有意義 當(dāng)實(shí)施你的恢復(fù)時(shí) 你將浪費(fèi)時(shí)間找出文件里是什么東西 你可能發(fā)覺(jué)用數(shù)據(jù)庫(kù)名和日期構(gòu)成備份文件名會(huì)很有用 例如 %mysqldump samp_db /usr/archives/mysql/samp_db %mysqldump menagerie /usr/archives/mysql/menagerie 你可能想在生成備份后壓縮它們 備份一般都很大!你也需要讓你的備份文件有過(guò)期期限以避免它們填滿你的磁盤(pán) 就象你讓你的日志文件過(guò)期那樣 用文件系統(tǒng)備份備份你的備份文件 如果遇上了一個(gè)徹底崩潰 不僅清除了你的數(shù)據(jù)目錄 也清除了包含你的數(shù)據(jù)庫(kù)備份的磁盤(pán)驅(qū)動(dòng)器 你將真正遇上了麻煩 也要備份你的更新日志 將你的備份文件放在不同于用于你的數(shù)據(jù)庫(kù)的文件系統(tǒng)上 這將降低由于生成備份而填滿包含數(shù)據(jù)目錄的文件系統(tǒng)的可能性 用于創(chuàng)建備份的技術(shù)同樣對(duì)拷貝數(shù)據(jù)庫(kù)到另一臺(tái)機(jī)器有用 最常見(jiàn)地 一個(gè)數(shù)據(jù)庫(kù)被轉(zhuǎn)移到了運(yùn)行在另一臺(tái)主機(jī)上的服務(wù)器 但是你也可以將數(shù)據(jù)轉(zhuǎn)移到同一臺(tái)主機(jī)上的另一個(gè)服務(wù)器 使用mysqldump備份和拷貝數(shù)據(jù)庫(kù) 當(dāng)你使用mysqldumo程序產(chǎn)生數(shù)據(jù)庫(kù)備份文件時(shí) 缺省地 文件內(nèi)容包含創(chuàng)建正在傾倒的表的CREATE語(yǔ)句和包含表中行數(shù)據(jù)的INSERT語(yǔ)句 換句話說(shuō) mysqldump產(chǎn)生的輸出可在以后用作mysql的輸入來(lái)重建數(shù)據(jù)庫(kù) 你可以將整個(gè)數(shù)據(jù)庫(kù)傾倒進(jìn)一個(gè)單獨(dú)的文本文件中 如下 %mysqldump samp_db /usr/archives/mysql/samp_db 輸出文件的開(kāi)頭看起來(lái)象這樣 # MySQL Dump ## Host: localhost Database: samp_db# # Server version alpha log## Table structure for table absence #CREATE TABLE absence(student_id int( ) unsigned DEFAULT NOT NULL date date DEFAULT NOT NULL PRIMARY KEY (student_id date));## Dumping data for table absence #INSERT INTO absence VALUES ( );INSERT INTO absence VALUES ( );INSERT INTO absence VALUES ( ); 文件剩下的部分有更多的INSERT和CREATE TABLE語(yǔ)句組成 如果你想壓縮備份 使用類似如下的命令 %mysqldump samp_db | gzip /usr/archives/mysql/samp_db gz如果你要一個(gè)龐大的數(shù)據(jù)庫(kù) 輸出文件也將很龐大 可能難于管理 如果你愿意 你可以在mysqldump命令行的數(shù)據(jù)庫(kù)名后列出單獨(dú)的表名來(lái)傾到它們的內(nèi)容 這將傾倒文件分成較小 更易于管理的文件 下例顯示如何將samp_db數(shù)據(jù)庫(kù)的一些表傾到進(jìn)分開(kāi)的文件中 %mysqldump samp_db student score event absence grapbook sql%mysqldump samp_db member president hist league sql如果你生成準(zhǔn)備用于定期刷新另一個(gè)數(shù)據(jù)庫(kù)內(nèi)容的備份文件 你可能想用 add drop table選項(xiàng) 這告訴服務(wù)器將DROP TABLE IF EXISTS語(yǔ)句寫(xiě)入備份文件 然后 當(dāng)你取出備份文件并把它裝載進(jìn)第二個(gè)數(shù)據(jù)庫(kù)時(shí) 如果表已經(jīng)存在 你不會(huì)得到一個(gè)錯(cuò)誤 如果你倒出一個(gè)數(shù)據(jù)庫(kù)以便能把數(shù)據(jù)庫(kù)轉(zhuǎn)移到另一個(gè)服務(wù)器 你甚至不必創(chuàng)建備份文件 要保證數(shù)據(jù)庫(kù)存在于另一臺(tái)主機(jī) 然后用管道傾倒數(shù)據(jù)庫(kù) 這樣mysql能直接讀取mysqldump的輸出 例如 你想從主機(jī)拷貝數(shù)據(jù)庫(kù)samp_db到 可以這樣很容易做到 %mysqladmin h create samp_db%mysqldump samp_db | mysql h samp_db以后 如果你想再次刷新上的數(shù)據(jù)庫(kù) 跳過(guò)mysqladmin命令 但要對(duì)mysqldump加上 add drop table以避免的得到表已存在的錯(cuò)誤 %mysqldump add drop table samp_db | mysql h samp_dbmysqldump其它有用的選項(xiàng)包括 flush logs和 lock tables組合將對(duì)你的數(shù)據(jù)庫(kù)檢查點(diǎn)有幫助 lock tables鎖定你正在傾倒的所有表 而 flush logs關(guān)閉并重新打開(kāi)更新日志文件 新的更新日志將只包括從備份點(diǎn)起的修改數(shù)據(jù)庫(kù)的查詢 這將設(shè)置你的更新日志檢查點(diǎn)位備份時(shí)間 (然而如果你有需要執(zhí)行個(gè)更新的客戶 鎖定所有表對(duì)備份期間的客戶訪問(wèn)不是件好事 )如果你使用 flush logs設(shè)置檢查點(diǎn)到備份時(shí) 有可能最好是傾倒整個(gè)數(shù)據(jù)庫(kù) 如果你傾倒單獨(dú)的文件 較難將更新日志檢查點(diǎn)與備份文件同步 在恢復(fù)期間 你通常按數(shù)據(jù)庫(kù)為基礎(chǔ)提取更新日志內(nèi)容 對(duì)單個(gè)表沒(méi)有提取更新的選擇 所以你必須自己提取它們 缺省地 mysqldump在寫(xiě)入前將一個(gè)表的整個(gè)內(nèi)容讀進(jìn)內(nèi)存 這通常確實(shí)不必要 并且實(shí)際上如果你有一個(gè)大表 幾乎是失敗的 你可用 quick選項(xiàng)告訴mysqldump只要它檢索出一行就寫(xiě)出每一行 為了進(jìn)一步優(yōu)化傾倒過(guò)程 使用 opt而不是 quick opt選項(xiàng)打開(kāi)其它選項(xiàng) 加速數(shù)據(jù)的傾倒和把它們讀回 用 opt實(shí)施備份可能是最常用的方法 因?yàn)閭浞菟俣壬系膬?yōu)勢(shì) 然而 要警告你 opt選項(xiàng)確實(shí)有代價(jià) opt優(yōu)化的是你的備份過(guò)程 不是其他客戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn) opt選項(xiàng)通過(guò)一次鎖定所有表阻止任何人更新你正在傾倒的任何表 你可在一般數(shù)據(jù)庫(kù)訪問(wèn)上很容易看到其效果 當(dāng)你的數(shù)據(jù)庫(kù)一般非常頻繁地使用 只是一天一次地調(diào)節(jié)備份 一個(gè)具有 opt的相反效果的選項(xiàng)是 dedayed 該選項(xiàng)使得mysqldump寫(xiě)出INSERT DELAYED語(yǔ)句而不是INSERT語(yǔ)句 如果你將數(shù)據(jù)文件裝入另一個(gè)數(shù)據(jù)庫(kù)并且你想是這個(gè)操作對(duì)可能出現(xiàn)在該數(shù)據(jù)庫(kù)中的查詢的影響最小 delayed對(duì)此很有幫助 press選項(xiàng)在你拷貝數(shù)據(jù)庫(kù)到另一臺(tái)機(jī)器上時(shí)很有幫助 因?yàn)樗鼫p少網(wǎng)絡(luò)傳輸字節(jié)的數(shù)量 下面有一個(gè)例子 注意到 press對(duì)與遠(yuǎn)端主機(jī)上的服務(wù)器通信的程序才給出 而不是對(duì)與本地主機(jī)連接的程序 %mysqldump opt samp_db | mysql press h samp_dbmysqldump有很多選項(xiàng) 詳見(jiàn)《MySQL參考手冊(cè)》 使用直接拷貝數(shù)據(jù)庫(kù)的備份和拷貝方法 另一種不涉及mysqldump備份數(shù)據(jù)庫(kù)和表的方式是直接拷貝數(shù)據(jù)庫(kù)表文件 典型地 這用諸如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ù)器 安靜下來(lái) 假設(shè)服務(wù)器關(guān)閉或你已經(jīng)鎖定了你想拷貝的表 下列顯示如何將整個(gè)samp_db數(shù)據(jù)庫(kù)備份到一個(gè)備份目錄(DATADIR表示服務(wù)器的數(shù)據(jù)目錄) %cd DATADIR%cp r samp_db /usr/archive/mysql單個(gè)表可以如下備份 %cd DATADIR/samp_db%cp member * /usr/archive/mysql/samp_db%cp score * /usr/archive/mysql/samp_db 當(dāng)你完成了備份時(shí) 你可 lishixinzhi/Article/program/MySQL/201311/29384
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出阿爾山免費(fèi)做網(wǎng)站回饋大家。
MySQL如何備份與還原
使用MYSQL數(shù)據(jù)庫(kù)的朋友,對(duì)MySQL進(jìn)行備份和還原是比較重要的。重要的事簡(jiǎn)單做,今天介紹我們使用mysqldump和source命令來(lái)備份還原,分為Windows下和Linux下的MYSQL備份與還原操作。
一、Win32系統(tǒng)下MySQL的備份還原方法
備份:在“運(yùn)行”中輸入“cmd
”,利用“cd
/Program
Files/MySQL/MySQL
Server
5.0/bin”進(jìn)入bin文件夾,輸入“mysqldump
-u
用戶名
-p
databasename
exportfilename”導(dǎo)出數(shù)據(jù)庫(kù)到文件,如mysqldump
-u
root
-p
voicevoice.sql,然后輸入密碼即可開(kāi)始導(dǎo)出MYSQL數(shù)據(jù),實(shí)現(xiàn)備份操作。
還原:進(jìn)入MySQL
Command
Line
Client,輸入密碼,進(jìn)入到“mysql”,輸入命令"show
databases;",回車(chē),看看有些什么數(shù)據(jù)庫(kù);建立你要還原的數(shù)據(jù)庫(kù),輸入"create
database
voice;",回車(chē);切換到剛建立的數(shù)據(jù)庫(kù),輸入"use
voice;",回車(chē);導(dǎo)入數(shù)據(jù),輸入"source
voice.sql;",回車(chē),開(kāi)始導(dǎo)入,再次出現(xiàn)"mysql"并且沒(méi)有提示錯(cuò)誤即還原成功。
二、Linux下MySQL的備份與還原方法:
備份:[root@localhost
~]#
cd
/var/lib/mysql
(進(jìn)入到MySQL庫(kù)目錄,根據(jù)自己的MySQL的安裝情況調(diào)整目錄)
[root@localhost
mysql]#
mysqldump
-u
root
-p
voicevoice.sql,輸入密碼即可。
還原:有兩種方法可選:
第一種方法:[root@localhost
~]#
mysql
-u
root
-p
回車(chē),輸入密碼,進(jìn)入MySQL的控制臺(tái)"mysql",同1.2還原。
第二種方法:
[root@localhost
~]#
cd
/var/lib/mysql
(進(jìn)入到MySQL庫(kù)目錄,根據(jù)自己的MySQL的安裝情況調(diào)整目錄)
[root@localhost
mysql]#
mysql
-u
root
-p
voice
MySQL的備份與還原,非常規(guī)備份,全量備份,增量備份
1:官方百萬(wàn)級(jí)別的測(cè)試數(shù)據(jù)庫(kù):
官方測(cè)試數(shù)據(jù)庫(kù)github網(wǎng)址:
下載到目錄,解壓即可,運(yùn)行命令:
2:自己創(chuàng)建簡(jiǎn)單測(cè)試數(shù)據(jù)庫(kù):
快速隨機(jī)生成測(cè)試語(yǔ)言的網(wǎng)站:
選擇sql和想生成的字段,點(diǎn)擊生成Generate!生成即可。
在MySQL輸入生成的語(yǔ)句即可。
3:測(cè)試備份還原時(shí)用到的命令
刪庫(kù)跑路測(cè)試(先備份好)
還原后查詢庫(kù)的表數(shù)據(jù)是否完整。
采用復(fù)制整個(gè)數(shù)據(jù)存放目錄
1:查看數(shù)據(jù)庫(kù)數(shù)據(jù)存放位置
有兩種方法:
1):在數(shù)據(jù)庫(kù)中用命令 show variables like 'datadir'; 查看
2):在配置文件中查看,配置了 datadir 目錄的可查看。沒(méi)有配置的默認(rèn)為 /var/lib/mysql/ 位置
Linux中查看配置文件
2:復(fù)制目錄或者目錄下某個(gè)數(shù)據(jù)庫(kù)名
3:還原時(shí)直接復(fù)制文件夾到數(shù)據(jù)庫(kù)目錄即可
mysqldump又可叫做全量備份。
參數(shù) --databases 同 -B ,單獨(dú)一個(gè)庫(kù),也可省略。
1、備份命令mysqldump格式
格式:mysqldump -h主機(jī)名 -P端口 -u用戶名 -p密碼 database 數(shù)據(jù)庫(kù)名 文件名.sql
備份testDatabase數(shù)據(jù)庫(kù)
2、備份MySQL數(shù)據(jù)庫(kù)為帶刪除表的格式
備份MySQL數(shù)據(jù)庫(kù)為帶刪除表的格式,能夠讓該備份覆蓋已有數(shù)據(jù)庫(kù)而不需要手動(dòng)刪除原有數(shù)據(jù)庫(kù)。
3、直接將MySQL數(shù)據(jù)庫(kù)壓縮備份
備份并壓縮
4、備份MySQL數(shù)據(jù)庫(kù)某個(gè)(些)表
備份testDatabase中的myTable表,不需要用參數(shù) --databases 或者 -B
5、同時(shí)備份多個(gè)MySQL數(shù)據(jù)庫(kù)
同時(shí)備份testDatabase和 employees兩個(gè)庫(kù)
6、備份服務(wù)器上所有數(shù)據(jù)庫(kù)
參數(shù) --all-databases 同 -A
7、還原MySQL數(shù)據(jù)庫(kù)的命令
1) 不指定數(shù)據(jù)名還原,默認(rèn)生成原數(shù)據(jù)庫(kù)名稱,還原所有數(shù)據(jù)庫(kù)。
2) 指定數(shù)據(jù)名還原,還原指定單個(gè)數(shù)據(jù)庫(kù),需在數(shù)據(jù)庫(kù)種預(yù)先創(chuàng)建一個(gè)testDatabase名稱。
3) 還原壓縮的MySQL數(shù)據(jù)庫(kù)
4) 進(jìn)入數(shù)據(jù)庫(kù)用source導(dǎo)入
增量備份是針對(duì)于數(shù)據(jù)庫(kù)的bin-log日志進(jìn)行備份的,增量備份是在全量的基礎(chǔ)上進(jìn)行操作的。增量備份主要是靠mysql記錄的bin-log日志。
1:查看是否開(kāi)啟bin-log日志
進(jìn)入mysql輸入命令可查看。
顯示如下為開(kāi)啟狀態(tài),日志文件在/var/lib/mysql/以binlog.00001的格式保存。
如未開(kāi)啟,需要在配置文件種配置
2:查看目前使用的bin-log日志文件
進(jìn)入mysql查看命令。
顯示如下,目前使用的是binlog.000022文件,所有操作都記錄在此文件。
查看當(dāng)前testDatabase的表myTable數(shù)據(jù)如下,
3:刷新日志,使用新的日志文件(備份)
在命令端執(zhí)行命令
日志文件從 binlog.000022 變?yōu)?binlog.000023
這時(shí)相當(dāng)與已經(jīng)備份成功,備份文件即為上次的binlog.000022日志文件。
4:刪除數(shù)量,從日志還原數(shù)據(jù)
1) 刪除ABC行
查詢以及沒(méi)有ABC行列。
2) 恢復(fù)數(shù)據(jù)ABC行
退出mysql,在命令端用mysqlbinlog命令恢復(fù)到binlog.000022日志狀態(tài)。
進(jìn)入數(shù)據(jù)庫(kù)再次查看數(shù)據(jù),ABC已經(jīng)恢復(fù)。
增量備份完成。
mysql中備份和還原數(shù)據(jù)庫(kù)的語(yǔ)句什么啊
一、Mysql數(shù)據(jù)庫(kù)備份指令格式:
mysqldump -h主機(jī)名 -P端口 -u用戶名 -p密碼 (–database) 數(shù)據(jù)庫(kù)名 文件名.sql
注:直接cmd執(zhí)行該指令即可,不需要先mysql -u root -p鏈接數(shù)據(jù)庫(kù)
1、備份MySQL數(shù)據(jù)庫(kù)的命令
mysqldump -hhostname -uusername -ppassword databasename backupfile.sql
2、備份MySQL數(shù)據(jù)庫(kù)為帶刪除表的格式,能夠讓該備份覆蓋已有數(shù)據(jù)庫(kù)而不需要手動(dòng)刪除原有數(shù)據(jù)庫(kù)。
mysqldump -–add-drop-table -uusername -ppassword databasename backupfile.sql
二、數(shù)據(jù)庫(kù)還原有三種方式:source命令、mysql、gunzip命令
1、source 命令
進(jìn)入mysql數(shù)據(jù)庫(kù)控制臺(tái),
mysql -u root -p
mysqluse 數(shù)據(jù)庫(kù)
然后使用source命令,后面參數(shù)為腳本文件(如這里用到的.sql)
mysqlsource /home/work/db/bkdb.sql
2、mysql
mysql -hhostname -uusername -ppassword databasename backupfile.sql
3、gunzip
gunzip backupfile.sql.gz | mysql -uusername -ppassword databasename
名稱欄目:mysql怎么還原備份 mysql備份與恢復(fù)
文章分享:http://www.ef60e0e.cn/article/docecid.html