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