PHP學(xué)習(xí)mysql課件 高級篇第2/2頁
更新時(shí)間:2008年06月15日 13:09:25 作者:
MySQL數(shù)據(jù)庫管理
數(shù)據(jù)庫的啟動與關(guān)閉,安全、訪問控制和權(quán)限,數(shù)據(jù)庫的備份與恢復(fù),導(dǎo)入和導(dǎo)出記錄
授予用戶特定的權(quán)限:
使用grant語句添加一個(gè)可以從本地機(jī)連接的MySQL服務(wù)器的用戶user1,并且只授予其針對sales數(shù)據(jù)庫中employee表的select和insert權(quán)限。
mysql> grant select,insert on sales.employee to user1@localhost identified by ‘user1pass';
說明:使用:# mysql –u user1 –puser1pass 登錄數(shù)據(jù)庫以后可以做如下操作:
mysql> use sales; //打開sales數(shù)據(jù)庫
mysql> show tables; //只能看到employee表
mysql> select * from employee; //可進(jìn)行查看操作
mysql> insert into employee ……. //可進(jìn)行插入操作。
撤銷用戶權(quán)限:
語法:REVOKE priv_type[(column_list)][,priv_type[(column_list)]…]
ON {*.* | * | db_name.* | db_name.tbl_name | db_name}
FROM user_name [,user_name…]
例如:撤消用戶user1針對sales數(shù)據(jù)庫中employee表的insert權(quán)限:
mysql> revoke insert on sales.employee from user1@localhost;
//返回如下信息,表明權(quán)限撤銷成功。
Query OK, 0 row in set affected (0.00 sec)
```````````````````````````````````````````````````````````````````````````````````````````
權(quán)限更改何時(shí)生效
當(dāng)mysqld啟動時(shí),所有的授權(quán)表內(nèi)容被讀進(jìn)存儲器并且從那點(diǎn)生效。
用GRANT、REVOKE或SET PASSWORD對授權(quán)表施行的修改會立即被服務(wù)器注意到。
如果你手工地修改授權(quán)表(使用INSERT、UPDATE等等),你應(yīng)該執(zhí)行一個(gè)FLUSH PRIVILEGES語句或運(yùn)行mysqladmin flush-privileges告訴服務(wù)器再裝載授權(quán)表,否則你的改變將不生效,除非你重啟服務(wù)器。
權(quán)限更改的影響
當(dāng)服務(wù)器注意到授權(quán)表被改變了時(shí),現(xiàn)存的客戶連接有如下影響:
表和列權(quán)限在客戶的下一次請求時(shí)生效。
數(shù)據(jù)庫權(quán)限改變在下一個(gè)USE db_name命令生效。
全局權(quán)限的改變和口令改變在下一次客戶連接時(shí)生效。
數(shù)據(jù)庫的備份與恢復(fù)
1、數(shù)據(jù)庫的備份:
A、用mysqldump備份數(shù)據(jù)庫:
語法: mysqldump [OPTIONS] database [table]
實(shí)例:
將數(shù)據(jù)庫sales備份成sales_bak030630.sql文件。
# mysqldump –u root –p --opt sales > sales_bak030630.sql
//返回如下信息,表明備份成功
-rw-r--r-- 1 root root 2296 Jun 29 23:30 sales_bak030630.sql
B、用直接拷貝的方法備份數(shù)據(jù)庫:
不用mysqldump 來備份數(shù)據(jù)庫或表的另一種方法是直接拷貝表文件。通??衫孟馽p、tar 或cpio 這樣的實(shí)用程序來進(jìn)行。當(dāng)使用直接拷貝備份( direct-copy backup)方法時(shí),必須確保沒有使用這些表。如果在拷貝一個(gè)表的同時(shí)服務(wù)器正在修改它,則拷貝無效。
確??截愅暾缘淖詈梅椒ㄊ顷P(guān)閉服務(wù)器,拷貝文件,然后重新啟動服務(wù)器。
2、數(shù)據(jù)庫的恢復(fù):
數(shù)據(jù)庫系統(tǒng)出現(xiàn)崩潰時(shí),應(yīng)該使用最近的一次備份對數(shù)據(jù)庫進(jìn)行恢復(fù),如果啟用了更新日志,還需要重新執(zhí)行更新日志中最近一次備份之后對數(shù)據(jù)庫進(jìn)行修改的任何查詢,以盡可能將數(shù)據(jù)恢復(fù)到崩潰時(shí)刻所處的狀態(tài)。
# mysql –u root –p sales < sales_bak030630.sql
優(yōu)化表
在大多數(shù)情況下,優(yōu)化表的做法很值得。當(dāng)一個(gè)表被多次修改,那它的結(jié)構(gòu)將很快變得支離破碎,其結(jié)果是導(dǎo)致性能的下降。這個(gè)時(shí)候可以使用OPTIMIZE TABLE 命令來刷新,清理出空間。
mysql>OPTIMIZE TABLE tablename;
導(dǎo)入和導(dǎo)出記錄
INSERT語句不是向表中插入記錄的唯一方法,MySQL還允許使用LOAD DATA INFILE 命令一次性插入多條記錄。這個(gè)命令可以從文本文件讀出原始數(shù)據(jù)(該文件可以放置在連接服務(wù)器上或者客戶端),在列和行界定符號的基礎(chǔ)上進(jìn)行分析,然后自動產(chǎn)生INSERT 語句來向一個(gè)表寫數(shù)據(jù)。
導(dǎo)入數(shù)據(jù)
默認(rèn)情況下,MySQL認(rèn)為數(shù)據(jù)文件是在服務(wù)器上,在LOAD DATA INFILE 語句中指定位置。
如果想要使用客戶機(jī)上的數(shù)據(jù),可以在語句中添加LOCAl關(guān)鍵字,告訴MySQL在客戶機(jī)的文件系統(tǒng)上查找文件。
mysql>LOAD DATA LOCAL INFILE ‘c:\\data.txt'
INTO TABLE user
FIELDS TERMINATED BY ‘,' LINES TERMINATED BY ‘\n';
最好在此之前加上如下命令
mysql>LOAD DATA LOW_PRIORITY INFILE ‘data.txt' INTO TABLE user;
當(dāng)然還有IGNORE REPLACE等關(guān)鍵字。
導(dǎo)出數(shù)據(jù)
如果不指定一個(gè)FIELDS子句,缺省值與這樣寫的相同:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
如果不指定一個(gè)LINES子句,缺省值與這樣寫的相同:
LINES TERMINATED BY '\n'
換句話說,缺省值導(dǎo)致讀取輸入時(shí),LOAD DATA INFILE表現(xiàn)如下:
在換行符處尋找行邊界
在定位符處將行分成字段
不要期望字段由任何引號字符封裝
將由“\”開頭的定位符、換行符或“\”解釋成字段值的部分字面字符
導(dǎo)出數(shù)據(jù)
相反,缺省值導(dǎo)致在寫入輸出時(shí),SELECT ... INTO OUTFILE表現(xiàn)如下:
在字段之間寫定位符
不用任何引號字符封裝字段
使用“\”轉(zhuǎn)義出現(xiàn)在字段中的定位符、換行符或“\”字符
在行尾處寫換行符
注意,為了寫入FIELDS ESCAPED BY '\\',對作為一條單個(gè)的反斜線被讀取的值,你必須指定2條反斜線值。
