MySQL文件
日志文件
在服務器運行過程中,會產生各種各樣的日志,比如常規的查詢日志,錯誤日志、二進制日志、 redo 日志和 Undo 日志等,日志文件記錄了影響 MySQL 數據庫的各種類型活動。
常見的日志文件有:錯誤日志(error log)、慢查詢日志(slow query log)、查詢日志(query log)、二進制文件(bin log)。
錯誤日志
錯誤日志文件對 MySQL 的啟動、運行、關閉過程進行了記錄。遇到問題時,應該首先查看該文件以便定位問題。該文件不僅記錄了所有的錯誤信息,也記錄了一些警告信息或正確信息。
用戶可以通過下面命令來查看錯誤日志文件的位置
show variables liek 'log_error' \G;
當 MySQL 不能正常啟動時,第一個必須查找的文件應該就是錯誤日志文件,該文件記錄了錯誤信息。
慢查詢日志
慢查詢日志可以幫助定位可能存在問題的 SQL 語句,從而進行 SQL 語句層面的優化。
我們已經知道了慢查詢日志可以幫我們定位可能存在問題的SQL語句,從而進行SQL語句層面的優化。但是默認值是關閉的,需要我們手動開啟。
show variables like 'slow_query_log';
-- 開啟慢日志查看 0關閉 1開啟
set global slow_query_log = 1;
慢是廣義的概念,到底多慢算慢呢?MySQL中設定了一個閾值,將運行時間超過改值的所有SQL語句都記錄到慢查詢日志中。long_query_time
參數的值就是這個閾值。默認是10,代表是10秒。
show variables like 'long_query_time';
當然也可以設置
set global long_query_time = 0;
默認10秒,這里為了演示方便設置為0。
同時對于運行的SQL語句沒有使用索引,MySQL 數據庫也可以將這條SQL語句記錄到慢查詢日志文件。
-- 未使用索引是否記錄慢查詢日志參數 0關閉(默認) 1開啟
show variables like '%log_queries_not_using_indexes%';
記錄的慢查詢日志在哪里看呢?這里還有一個參數控制。
show variables like '%slow_query_log_file%';
windows
linux
查詢日志
查詢當前的通用日志文件是否開啟
show variables like '%general_log%';
-- 開啟通用日志查詢
set global general_log = on;
-- 關閉通用日志查詢
set global general_log = off;
查詢日志記錄了所有對MySQL數據庫請求的信息,無論這些請求是否得到了正確的執行。
默認文件名:hostName.log,比如centosvm.log
二進制日志(binlog)
二進制日志記錄了所有的 DDL 和 DML 語句(除了數據查詢語句select),以事件形式記錄,還包含語句所執行的消耗時間,MySQL 的二進制日志是事務安全型的。它有以下幾種作用。
- 恢復(recovery):某些數據的恢復需要二進制日志,例如,在一個數據庫全備文件恢復后,用戶可以通過二進制文件進行point-in-time的恢復
- 復制(replication):其原理與恢復類似,通過復制和執行二進制日志使一臺遠程的 MySQL 數據庫(一般稱為slave或standy)與一臺MySQL數據庫(一般稱為master或primary)進行實時同步
- 審計(audit):用戶可以通過二進制日志中的信息來進行審計,判斷是否有對數據庫進行注入的攻擊
log-bin 參數用來控制是否開啟二進制日志,默認為關閉。如果想要開啟二進制日志功能,可以在MySQL的配置文件中指定如下格式
“name”為二進制日志文件的名稱
如果不提供name,那么數據庫會使用默認的日志文件名(文件名為主機名,后綴名為二進制日志的序列號),且文件保存在數據庫所在的目錄(datadir下)
啟用/設置二進制日志文件(name可省略)
log-bin=name;
配置以后,就會在數據目錄下產生類似于:
bin_log.00001即為二進制日志文件;bin_log.index為二進制的索引文件,用來存儲過往產生的二進制日志序號,通常情況下,不建議手動修改這個文件。
二進制日志文件在默認情況下并沒有啟動,需要手動指定參數來啟動。開啟這個選項會對MySQL的性能造成影響,但是性能損失十分有限。根據MySQL官方手冊中的測試說明,開啟二進制日志會使性能下降1%。
show variables like 'log_bin';
mysql安裝目錄下修改my.cnf
log_bin=mysql-bin
binlog-format=ROW
server-id=1
expire_logs_days =30
其他的數據文件
除了我們上邊說的這些用戶自己存儲的數據以外,數據文件下還包括為了更好運行程序的一些額外文件,當然這些文件不一定會放在數據目錄下,而且可以在配置文件或者啟動時另外指定存放目錄。主要包括以下這幾種類型的文件。
- 服務器進程文件
我們知道每運行一個MySQL服務器程序,都意味著啟動一個進程。MySQL服務器會把自己的進程ID寫入到一個pid文件中。 - socket文件
當用UNIX域套接字方式進行連接時需要的文件。
- 默認/自動生成的SSL和RSA證書和密鑰文件