本篇內容主要講解“如何進(jìn)行管理”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“MySQL如何進(jìn)行管理”吧!
對于內容驅動(dòng)的網(wǎng)站,設計好壞的關(guān)鍵是。在這個(gè)教程中,我們已經(jīng)使用了MySQL關(guān)系型數據庫管理系統(RDBMS)建立了我們的數據庫。對于網(wǎng)站的開(kāi)發(fā)者來(lái)說(shuō),MySQL是一個(gè)較受歡迎的選擇,這不僅是因為它對于任何平臺上的非商業(yè)應用都是免費的,而且也因為它的架設和使用非常的簡(jiǎn)單。正如我們在第一章中所看到的那樣,根據正確的指導,一個(gè)新的用戶(hù)可以在不超過(guò)30分鐘的時(shí)間內架設好一個(gè)MySQL服務(wù),并將其運行起來(lái)(對于一個(gè)有經(jīng)驗的用戶(hù)甚至只要10分鐘!)。
如果你想做的僅僅是架設一個(gè)MySQL服務(wù)環(huán)境,以用來(lái)做一些例子和練習,那么我們在第一章安裝時(shí)所使用的初始化設置對你已經(jīng)足夠了。但是,如果你是想建立一個(gè)真正的用于Web站點(diǎn)的數據庫--也許這個(gè)站點(diǎn)對于你的公司很重要--那么你還需要學(xué)習一些有關(guān)MySQL的知識。
對于作為基于Internet的企業(yè)的一部分的商業(yè)事務(wù)來(lái)說(shuō),數據的備份是很重要的。不幸的是,因為備份的工作對于一個(gè)管理員來(lái)說(shuō)往往是不太感興趣的,人們總是無(wú)法認清它的重要性,于是這方面的工作對于一個(gè)應用程序往往不能做得"足夠好"。如果直到現在你還不明白"我們是不是需要備份我們的數據庫",或者是你認為"數據庫會(huì )和其它東西一起被備份",那么你得好好看看這一章的內容了。我們將會(huì )說(shuō)明為什么普通的文件備份方案對于許多MySQL服務(wù)是遠遠不夠的,然后我們會(huì )介紹備份和恢復一個(gè)MySQL數據庫的"正確的方法"。
在第一章中,我們設置了一個(gè)MySQL服務(wù)并通過(guò)一個(gè)有口令的'root'來(lái)連接這個(gè)數據庫。MySQL的'root'用戶(hù)(順便提一下,不要與Unix的'root'用戶(hù)混淆)對于所有的庫和表都有讀/寫(xiě)的權限。在許多情況下,我們需要建立其它的只能訪(fǎng)問(wèn)某些數據庫和數據表的用戶(hù),我們還需要對這種訪(fǎng)問(wèn)進(jìn)行限制(例如,對指定的表只能直接只讀訪(fǎng)問(wèn))。在這一章中,我們將學(xué)習如果使用兩個(gè)新的MySQL的命令:GRANT和REVOKE來(lái)完成這些工作。
在一些情況下,例如由于電源的問(wèn)題,MySQL數據庫可能被損壞。這樣的損壞并不總是意味著(zhù)必須使用備份來(lái)恢復。我們將會(huì )學(xué)習到如果利用MySQL數據庫的檢查和修復功能來(lái)解決簡(jiǎn)單的數據庫損壞。
為什么標準的備份是不夠的
和Web一樣,絕大多數的MySQL服務(wù)器也必須不間斷地在線(xiàn)。這使得MySQL數據庫的備份顯得很重要。因為MySQL服務(wù)使用cache和緩沖區來(lái)提高對存儲在磁盤(pán)上的數據庫文件更新的效率,所以文件的內容和當前數據庫的內容可能并不完全一致。而標準的備份程序僅僅包括對系統和數據文件的拷貝,這種對MySQL數據文件的備份并不能完全滿(mǎn)足我們的需要,因為它們不能保證拷貝的文件可以在系統崩潰時(shí)的確能夠正常地使用。
此外,因為許多的數據庫必須整天地接受信息,標準的備份只能提供數據庫數據的"瞬間的"映象。如果MySQL數據庫文件被損壞,或是變得不可用,在最后一次備份之后添加的信息將會(huì )被丟失。在許多情況下,例如對于一個(gè)電子商務(wù)網(wǎng)站的處理用戶(hù)訂單的數據庫,這樣的丟失是不可容忍的。
MySQL中的工具可以對數據進(jìn)行實(shí)時(shí)的備份,而在備份進(jìn)行時(shí),不會(huì )影響服務(wù)的效率。不幸的是,這需要你
為你的MySQL數據配置一個(gè)特殊的備份系統。而完全與你已制定的其它數據備份方案無(wú)關(guān)。然而,和任何一個(gè)好的備份系統一樣,在你真正用到它的時(shí)候,你會(huì )發(fā)現現在的麻煩是值得的。
在這一章中,我們提供的指導是用于一個(gè)運行Linux或其它基于Unix的操作系統的計算機上的。如果你使用的是Windows,方法也基本上一樣,只是其中的有些命令必須改動(dòng)。
使用mysqldump進(jìn)行數據庫備份
除了mysqld以外,MySQL服務(wù)器以及mysql(MySQL的客戶(hù)端),在安裝時(shí)還會(huì )產(chǎn)生很多有用的程序。例如,在前面,我們已經(jīng)看到的mysqladmin,就是負責控制和搜集有關(guān)正在運行的MySQL服務(wù)的信息的程序。
mysqldump是另一個(gè)這樣的程序。當它運行時(shí),它會(huì )連接到一個(gè)MySQL服務(wù)(就和mysql程序和PHP語(yǔ)言所做的一樣)并下載指定的數據庫的全部?jì)热?。然后它?huì )輸出一系列的SQL的CREATE
TABLE命令和INSERT命令,在一個(gè)空的MySQL數據庫中運行這些命令,就可以建立與當初的數據庫內容完全一樣的一個(gè)MySQL數據庫。
通過(guò)重定向mysqldump的輸出到一個(gè)文件,你可以存儲一個(gè)數據庫的"鏡像"以作為備份。下面的命令是用一個(gè)口令為mypass的root用戶(hù)連接到一個(gè)運行在myhost上的MySQL服務(wù),并將名為dbname的數據庫的備份存儲到dbname_backup.sql文件中:
%
mysqldump -h myhost -u root -pmypass dbname >
dbname_backup.sql
要恢復這樣的一個(gè)數據庫,只需要運行下面的命令:
% mysqladmin -h
myhost -u root -pmypass create dbname
% mysql -h myhost -u root -pmypass
dbname <
dbname_backup.sql
第一個(gè)命令使用mysqladmin程序建立一個(gè)數據庫。第二個(gè)命令連接到MySQL服務(wù)并使用通常的mysql程序,并將剛才得到的備份文件作為其中執行的命令。
通過(guò)這種方法,我們可以使用mysqldump建立我們數據庫的備份。因為mysqldump通過(guò)與MySQL服務(wù)的連接產(chǎn)生這個(gè)備份,這肯定要比直接訪(fǎng)問(wèn)MySQL數據目錄下的數據庫文件來(lái)得更為安全,因為這樣的備份可以確保是數據庫的一個(gè)有效的拷貝,而不僅僅是數據庫文件的拷貝。
剩下來(lái)的問(wèn)題就是如何解決這個(gè)"鏡像"與一個(gè)不斷更新的數據庫之間的同步。要做到這一點(diǎn),你需要命令服務(wù)保持一個(gè)變更日志。
利用變更日志進(jìn)行增量備份
正如我們前面提到的,在很多情況下,我們使用的MySQL數據庫會(huì )造成數據的丟失--甚至有的時(shí)候會(huì )丟失很重要的數據。在這樣的情況下,我們必須找到一種方法保持我們使用上面介紹的方法用mysqldump制作的備份與當前數據庫之間的同步。而解決方案就是讓MySQL服務(wù)維持一個(gè)更新日志。一個(gè)更新日志是一個(gè)關(guān)于所有數據庫接受到的可能改變數據庫內容的查詢(xún)的記錄。這將包括INSERT、UPDATE和CREATE
TABLE語(yǔ)句,但是不包括SELECT語(yǔ)句。
通常的想法是維持一個(gè)變更日志,這樣當數據庫崩潰時(shí),你的恢復過(guò)程應該是這樣的:首先使用備份(使用mysqldump命令產(chǎn)生),然后使用備份之后的變量日志。
你也可以使用變更日志撤消錯誤操作。例如,如果一個(gè)合作者告訴你他錯誤地使用了一個(gè)DROP
TABLE命令,你可以對變更日志進(jìn)行編輯以刪除這個(gè)命令,然后使用備份和修改過(guò)的變更日志進(jìn)行恢復。通過(guò)這種方法,你甚至可以保持這次意外事故之后其它表的變化。作為預防措施,你也許還要收回你的合作者的
DROP權限(在下一部分你將看到該怎么做)。
告訴MySQL服務(wù)器維持一個(gè)變更日志是非常簡(jiǎn)單的,你只需要在服務(wù)的命令行中增加一個(gè)選項:
%
safe-mysqld
--log-update=update
上面的命令啟動(dòng)MySQL服務(wù),并告訴它在服務(wù)器的數據目錄下(如果你依照第一章中指導配置你的服務(wù)器的話(huà),這個(gè)目錄將是/usr/local/mysql/var)建立名為update.001、update.002……的文件。一個(gè)新的這樣的文件將在服務(wù)器每一次刷新它的日志文件時(shí)被建立(通常,這是指服務(wù)每一次重啟動(dòng)時(shí))。如果你想將你的變更日志存儲到另一個(gè)地方(通常這是一個(gè)好主意--如果包含你的數據目錄的磁盤(pán)出了問(wèn)題,你肯定不能指望它還能好好保存你的備份!),你可以指定變更日志的路徑。
但是,如果你的MySQL服務(wù)器是不間斷地工作的,在啟動(dòng)MySQL服務(wù)時(shí)你也許還需要一些系統配置。在這種情況下,增加一個(gè)命令行選擇可能變得很困難。建立變更日志的另一個(gè)簡(jiǎn)單的方法是在MySQL配置文件中增加相應的選項。
如果你還不清楚"什么是MySQL配置文件",不要擔心。事實(shí)上,在此之前,我們一直沒(méi)用到過(guò)這樣的配置文件。要建立這個(gè)文件,以我們在第一章中建立的MySQL用戶(hù)(如果你是完全根據指導做的,這應該是mysqlusr)登錄到Linux。使用你習慣的文本編輯器,在你的MySQL數據目錄下(除非你選擇了其它地方安裝MySQL,這應該是指/usr/local/mysql/var)建立一個(gè)名為my.cnf的文件。在這個(gè)文件中,輸入下面一行:
[mysqld]log-update=/usr/backups/mysql/update
當然,你可以自由地指定你的日志文件所寫(xiě)入的位置。保存這個(gè)文件并重啟你的MySQL服務(wù)。從現在開(kāi)始,MySQL服務(wù)運行的情況將和你在命令行中使用了--log-update選項一樣。
很明顯,對于一個(gè)服務(wù)來(lái)說(shuō),變更日志可能占用大量的空間。因為這個(gè)原因以及MySQL不能自動(dòng)地在建立新的日志文件刪除舊的日志文件,你需要自己管理你的變更日志文件。例如,下面的Unix
shell腳本,會(huì )刪除所有一星期以前更改的變更日志文件,然后通知MySQL刷新它的日志文件。
#! /bin/sh
find
/usr/backups/mysql/ -name "update.[0-9]*"
-type f -mtime +6 | xargs rm
-f
/usr/local/mysql/bin/mysqladmin -u root
-ppassword
flush-logs
如果當前的日志文件被刪除,最后一步(刷新日志文件)將建立一個(gè)新的變更日志,這意味著(zhù)MySQL服務(wù)一直在線(xiàn),而且在過(guò)去的一周中,沒(méi)有收到任何改變數據庫內容的查詢(xún)。
如果你是一個(gè)有經(jīng)驗的用戶(hù),使用"時(shí)鐘守護程序"設置一個(gè)腳本來(lái)定期(比方說(shuō),每周一次)執行數據庫的備份并刪除舊的變更日志應該是相當簡(jiǎn)單的。如果你還需要一點(diǎn)幫助,請教你當地的Unix權威。'MySQL'
by Paul
DuBois中的MySQL管理一章中對設置這樣的一個(gè)系統也有詳細的指南。
假定你已經(jīng)有了一個(gè)備份以及在此之后的變更日志的一個(gè)拷貝,恢復你的數據庫將是非常簡(jiǎn)單的。在建立一個(gè)空數據庫后應用我們在上一節中討論的方法導入備份,然后使用帶--one-database命令行選項的mysql命令導入變更日志。這會(huì )指示服務(wù)器僅僅運行變更日志中與我們想要恢復的數據庫(在這個(gè)例子中是指dbname)相關(guān)的查詢(xún):
%
mysql -u root -ppassword --one-database dbname < update.100
% mysql -u
root -ppassword --one-database dbname <
update.102
...
MySQL訪(fǎng)問(wèn)控制
在這個(gè)教程的早些時(shí)候,我們曾經(jīng)提到一個(gè)叫做mysql的數據庫,在每一個(gè)MySQL服務(wù)中都包含這個(gè)數據庫,它是用來(lái)保存用戶(hù)的相關(guān)信息、他們的口令以及他們的權限的。但是,在此之前,我們一直使用root用戶(hù)登錄到MySQL服務(wù),這個(gè)用戶(hù)可以訪(fǎng)問(wèn)所有的數據庫和數據表。
如果你的MySQL服務(wù)僅僅被通過(guò)PHP訪(fǎng)問(wèn),而用你對于將root用戶(hù)的口令告訴什么人很小心,那么root帳號可能已經(jīng)足夠了。但是,如果一個(gè)MySQL服務(wù)是被許多人共享的,(例如,一個(gè)Web主機希望對它的每一個(gè)用戶(hù)提供同一個(gè)MySQL服務(wù)),為不同的用戶(hù)設置相應的訪(fǎng)問(wèn)權限就顯得很重要了。
在MySQL參考手冊的第六章中詳細介紹了MySQL的訪(fǎng)問(wèn)控制系統。從原理上來(lái)說(shuō),用戶(hù)的訪(fǎng)問(wèn)是由mysql數據庫中的五個(gè)數據表來(lái)管理的:user、db、host、tables_priv和columns_priv。如果你想直接使用INSERT、UPDATE和DELETE語(yǔ)句來(lái)編輯這些表,我建議你先閱讀一下MySQL指南中的相關(guān)章節。而從3.22.11版本開(kāi)始,MySQL提供了簡(jiǎn)單的方法來(lái)管理用戶(hù)的訪(fǎng)問(wèn)。使用MySQL提供的非標準的命令GRANT和REVOKE,你可以建立用戶(hù)并賦予其相應的權限,而不必關(guān)心它在前面提到的五個(gè)表中的存儲形式。
使用GRANT
GRANT命令用來(lái)建立新用戶(hù),指定用戶(hù)口令并增加用戶(hù)權限。其格式如下:
mysql> GRANT
正如你看到的,因為Jessica的記錄的主機名最不具體,它的優(yōu)先級最低。當Jessica試圖從www.host.net連接時(shí),MySQL服務(wù)將他的連接匹配為一個(gè)匿名用戶(hù)記錄(空白的User值與任何人匹配)。因為這些匿名記錄不需要口令,而也許Jessica輸入了他的口令,MySQL將拒絕這個(gè)連接。即使Jessica沒(méi)有輸入口令,他可能也只被給予了匿名用戶(hù)的權限(非常有限),而不是他原來(lái)被賦予的權限。
解決這個(gè)問(wèn)題的方法是,要么你刪除匿名用戶(hù)的記錄(DELETE
FROM user WHERE
User=""),要么再為所有的可能從localhost連接的用戶(hù)指定兩條記錄(例如,相對于localhost以及相對于服務(wù)器的實(shí)際主機名):
因為要為每個(gè)用戶(hù)維護三個(gè)用戶(hù)記錄(以及相應的三套權限)會(huì )很麻煩,所以我們推薦你刪除匿名用戶(hù),除非你需要用他們來(lái)完成什么特殊的應用:
被鎖在外面?
就象把鑰匙丟失在車(chē)上一樣,在花費了一個(gè)小時(shí)安裝并調試好一個(gè)新的MySQL服務(wù)器之后忘記了口令的確是件麻煩事。幸運的是,如果你有訪(fǎng)問(wèn)MySQL運行的計算機的root權限,或者你能夠使用運行MySQL服務(wù)的用戶(hù)登錄(如果你按照第一章中的指導,這是指mysqlusr),那么不會(huì )出什么問(wèn)題。按照下面的步驟,你可以獲得服務(wù)的控制權。
首先,你必須關(guān)閉MySQL服務(wù)。因為通常使用的mysqladmin需要用到你忘了的口令,你只能通過(guò)殺掉服務(wù)的進(jìn)程來(lái)完成這項工作。使用ps命令或者看看服務(wù)的PID文件(在MySQL數據目錄下),確定MySQL服務(wù)的進(jìn)程的ID,然后使用下面的命令終止它:
%
kill
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站