第三,文件系統(tǒng)的大小寫敏感性影響到你如何命名和引用數據庫和表名。如果文件系統(tǒng)是大小寫敏感的(如Unix),兩個名字my_tbl和MY_TBL是不同的表。如果文件系統(tǒng)不是大小寫敏感的(如Windows),這兩個名字指的是相同的表。如果你用一個Unix服務器開發(fā)數據庫,并且如果你有可能轉移到Windows,你應該記住這一點。
2.5 MySQL狀態(tài)文件
除了數據庫目錄,MySQL數據目錄還包含很多狀態(tài)文件,這些文件總結在下表中。大多數文件的缺省名從服務器主機名生成,在下表中表示為HOSTNAME。
表 MySQL狀態(tài)文件
文件類型 缺省名 文件內容
進程ID HOSTNAME.pid 服務器進程的ID
出錯日志 HOSTNAME.err 啟動和關閉事件和出錯情況
一般日志 HOSTNAME.log 連接/斷開事件和查詢信息
更新日志 HOSTNAME.nnn 修改表結構級內容的所有查詢文本
當服務器啟動時,它將其進程ID寫入進程ID(PID)文件中,而在它關閉時,刪除該文件。PID文件是允許服務器本身被其他進程找到的工具。例如,如果你運行mysql.server,在系統(tǒng)關閉時,關閉MySQL服務器的腳本檢查PID文件以決定它需要向哪個進程發(fā)出一個終止信號。
出錯日志由safe_mysqld創(chuàng)建,作為服務器標準出錯輸出的重定向,它包含任何邪到stderr的消息。這意味著只有你通過調用safe_mysqld啟動服務器,出錯文件才存在(無論如何,它是一個啟動服務器的最好方法,因為如果它由于出錯而退出,safe_mysqld將重啟服務器。)。
一般日志和更新日志是可選的。你可以只開啟你需要的日志類型,用--log和--log-update服務器選項。
一般日志提供服務器操作的一般信息:誰從哪里連接服務器和他們發(fā)出什么查詢。更新日志提供查詢信息,但只有修改數據庫內容的查詢。更新日志內容被寫成SQL語句,可以將它們提供給mysql客戶程序來執(zhí)行。如果你遇上崩潰,并且必須倒回備份文件,更新日志就很有用,因為你能重復執(zhí)行自崩潰時的更新,通過將更新日志反饋給服務器,這允許你將數據庫恢復到崩潰發(fā)生時的狀態(tài)。
下面是一個簡單的例子,信息出現在一般日志中,它是一個創(chuàng)建一個在數據庫test中表,插入一行,然后刪除表的會話:
990509 7:37:09 492 Connect Paul@localhost on test
492 Query show databases
492 Query show tables
492 Field List tbl_1
492 Field List tbl_2
...
990509 7:34:22 492 Query CREATE TABLE my_tbl (val INT)
990509 7:34:34 492 Query INSERT INTO my_tbl values (1)
990509 7:34:38 492 Query DROP TABLE my_tbl
990509 7:34:40 492 Quit
一般日志包含日期和時間、服務器進程ID、事件類型和事件信息欄目。
同一個會話出現在更新日志中看上去像這樣:
use test;
CREATE TABLE my_tbl (val int);
INSERT INTO my_tbl VALUES(1);
DROP TABLE my_tbl;
對更新日志,用--log-long-format選項獲得一個擴展形式的日志,擴展日志提供有關誰何時發(fā)出每一條查詢,這使用更多的磁盤空間,但如果你想知道誰在做什么,而不用將更新日志對照一般日志的內容找到連接事件。
對上面的會話,擴展更新日志產生這樣的信息:
# Time: 990507 7:32:42
# User@Host: paul [paul] @ localhost []
use test;
CREATE TABLE my_tbl (val int);
# User@Host: paul [paul] @ localhost []
INSERT INTO my_tbl VALUES(1);
# Time: 990507 7:32:43
# User@Host: paul [paul] @ localhost []
DROP TABLE my_tbl;
保證你的日志文件安全并且不讓任意用戶讀取是個好主意。一般日志和更新日志都能包含諸如口令等的敏感信息,因為它們包含查詢文本。如:
990509 7:23:31 4 Query UPDATE user SET Password=PASSWORD("secret")
WHERE user="root"
對于檢查和設置數據目錄的權限,請見《MySQL安全性指南》。使數據目錄安性的指令包含下列命令:
% chmod 700 DATADIR
以擁有數據目錄的Unix用戶運行此命令。確保服務器也以此用戶運行,否則該命令不僅將其它人拒之門外,它也阻止服務器訪問你的數據庫。
狀態(tài)文件出現在數據目錄的頂級目錄,就象數據庫目錄,所以你可能擔心這些文件名是否與數據庫名沖突或出錯(如在服務器執(zhí)行SHOW DATABASES語句時)。答案是不。狀態(tài)和日志文件信息存儲在文件中,而數據庫是目錄,所以可執(zhí)行程序能用一個簡單的stat()調用區(qū)分它們。如果你看一下數據目錄,你可以區(qū)分狀態(tài)文件和數據庫目錄,用ls -l并檢查模式的第一個字符是一個"_"還是一個"d"。
你也可以簡單地看一下名字,所有狀態(tài)文件名包含一個點("."),而數據庫目錄沒有(.在數據庫名中是無效字符)。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |