2011-03-26 68 views
120

我讀過Mysql服務器創建一個日誌文件,它保存所有活動的記錄 - 例如何時和執行什麼查詢。如何在MySQL中查看日誌文件?

任何人都可以告訴我它在我的系統中存在嗎?我如何閱讀它?

基本上,我需要與不同的輸入備份,所以我想我需要在這裏使用日誌文件[備份兩個日期之間]的數據庫,這就是爲什麼我要做到這一點...

我覺得這日誌必須以某種方式得到保護,因爲可能會記錄敏感信息,如用戶名和密碼[如果有任何查詢需要];所以它可以被保護,不容易被看到?

我有root權限訪問系統,我怎麼能看到日誌?

當我嘗試打開/var/log/mysql.log時,它是空的。

這是我的配置文件:

[client] 
port  = 3306 
socket  = /var/run/mysqld/mysqld.sock 

[mysqld_safe] 
socket  = /var/run/mysqld/mysqld.sock 
nice  = 0 

[mysqld] 
log = /var/log/mysql/mysql.log 
binlog-do-db=zero 



user  = mysql 
socket  = /var/run/mysqld/mysqld.sock 
port  = 3306 
basedir  = /usr 
datadir  = /var/lib/mysql 
tmpdir  = /tmp 
skip-external-locking 

bind-address  = 127.0.0.1 
# 
# * Fine Tuning 
# 
key_buffer  = 16M 
max_allowed_packet = 16M 
thread_stack  = 192K 
thread_cache_size  = 8 

general_log_file  = /var/log/mysql/mysql.log 
general_log    = 1 

回答

97

這裏有一個簡單的方法以啓用它們。在MySQL中,我們需要經常看到3個日誌,這些日誌在任何項目開發過程中都是需要的

  • The Error Log。它包含有關而 服務器正在運行(也服務器啓動和停止)

  • The General Query Log出現的錯誤信息。這是什麼mysqld是 做(連接,斷開連接,查詢)的一般記錄

  • The Slow Query Log。 tt包含「慢」SQL語句(如其名稱所示的 )。

默認情況下,在MYSQL中沒有啓用日誌文件。所有的錯誤都會被顯示在系統日誌(在/ var/log/syslog的)

,使他們只需按照下面的步驟

第一步:轉到該文件(/etc/mysql/conf.d /mysqld_safe_syslog.cnf)並刪除或註釋這些行。

第二步:進入到MySQL的conf文件(/etc/mysql/my.cnf),並添加以下行

啓用錯誤日誌添加以下

[mysqld_safe] 
log_error=/var/log/mysql/mysql_error.log 

[mysqld] 
log_error=/var/log/mysql/mysql_error.log 

要啓用一般查詢日誌添加如下內容

general_log_file  = /var/log/mysql/mysql.log 
general_log    = 1 

要啓用慢速查詢日誌添加以下

log_slow_queries  = /var/log/mysql/mysql-slow.log 
long_query_time = 2 
log-queries-not-using-indexes 

第三步:使用以下命令

service mysql restart 

要在運行時啓用日誌,登錄到MySQL客戶端(mysql的-u保存文件並重啓MySQL root -p)並給出:

SET GLOBAL general_log = 'ON'; 
SET GLOBAL slow_query_log = 'ON'; 

最後我想在這裏提到的一件事是我從博客讀到這個。謝謝。這個對我有用。

點擊here訪問博客

+1

我覺得比你'忘了'寫一些東西。步驟1不完整,缺少「博客」鏈接 – Athafoud 2015-04-07 14:01:07

+0

嗨,@Athafoud,請立即找到鏈接。 – loyola 2015-04-29 05:48:17

+2

只有在啓用錯誤日誌的情況下,鏈接的博客文章才提及修改'/ etc/mysql/conf.d/mysqld_safe_syslog.cnf'。然而,目前編寫的這個答案似乎暗示它適用於任何日誌。 – Melebius 2016-07-20 08:19:33

40

你必須激活在MySQL查詢日誌記錄。

1.edit的/etc/my.cnf

 
[mysqld] 
log=/tmp/mysql.log 

2.restart使用的MySQL/MySQL的控制檯和計算機或mysqld服務

 
service mysqld restart 

3.open的phpmyadmin /任何應用運行一個查詢

4.cat /tmp/mysql.log(你應該看到查詢)

+0

ü的意思是說我需要先打開my.cnf文件,然後有需要設置在哪裏的路徑需要存儲日誌文件< – Arjun 2011-03-26 11:44:45

+0

是的,然後重新啓動mysql – danidacar 2011-03-26 11:48:35

+0

我做了這一切,我在名爲a.log的桌面上創建一個文件,並設置路徑像你說的,然後執行一些查詢,仍a.log是emply,我想要顯示我的my.cnf文件,但是如何? – Arjun 2011-03-28 06:09:55

7

從MySQ L參考手冊:

默認情況下,所有日誌文件都在數據目錄中創建。

檢查/var/lib/mysql文件夾。

+1

但我無法打開mysql文件夾。我認爲日誌文件的路徑是/var/log/mysql/mysql.log,但我無法打開它,我該怎麼辦? – Arjun 2011-03-26 11:46:00

+1

你需要成爲根 – danidacar 2011-03-26 12:05:49

+2

我如何讓自己成爲根,我想我是老闆,我安裝了服務器,我設置了密碼,所以我應該成爲老闆,仍然鎖定我,我該如何打開它? – Arjun 2011-03-28 06:06:58

8

在我(我已經安裝LAMP)的/ etc/mysql的 /my.cnf文件,我發現下面的評論中的[mysqld]行部分:

general_log_file  = /var/log/mysql/mysql.log 
general_log    = 1 

我不得不打開此文件作爲超級用戶與終端:

sudo geany /etc/mysql/my.cnf 

(我更喜歡使用替代的gedit或VI Geany,沒關係)

我只是註釋掉他們&保存文件,然後restatt的MySQL與

​​

運行幾個查詢,上面的文件(/var/log/mysql/mysql.log)開放和日誌在那裏:)

+0

雖然它可能適合你,但它不適合我,甚至像「索引損壞」的主要異常都不會被記錄。只有啓動和關機問題。 – user3338098 2015-11-02 16:02:45

+0

你能編輯你的答案嗎? 我認爲這是/etc/mysql/my.cnf – 2016-06-28 02:07:30

+0

@ Hoai-ThuVuong是的,謝謝! :) – Line 2016-06-28 18:05:36

1
shell> mysqladmin flush-logs 


shell> mv host_name.err-old backup-directory 
+7

歡迎來到計算器。請考慮給出更多解釋你答案中的代碼如何與OP的問題相關的問題。此外,代碼應該縮進4個空格以啓用正確的格式。 – 2015-04-15 13:32:31

19

MySQL的日誌由全局變量來確定,如:

要看到的設置和它們的位置,運行這個shell命令:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log 

要打印錯誤日誌的價值,運行在終端命令:

mysql -e "SELECT @@GLOBAL.log_error" 

閱讀錯誤日誌文件的內容實時運行:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error") 

注:打控制 - ç當完成

當通用日誌功能,請嘗試:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)") 

與密碼訪問使用mysql,添加-p-pMYPASS參數。爲了記住它,您可以在您的~/.my.cnf中進行配置,例如,

[client] 
user=root 
password=root 

所以它會被記住的下一次。

+1

或者如果你需要輸入密碼,試試這個:mysql -p -se「SHOW VARIABLES」| grep -e log_error -e general_log -e slow_query_log – 2016-12-21 14:57:04

+0

很好的答案,謝謝! – Federer 2017-05-19 09:27:52

1

除了上面的答案,您可以將命令行參數傳遞給mysqld進程以記錄選項,而不是手動編輯您的conf文件。例如,爲了使普通記錄和specifiy一個文件:

mysqld --general-log --general-log-file=/var/log/mysql.general.log 

確認上述其他的答案,mysqld --help --verbose給你從conf文件中的值(以便通過命令行選項運行一般日誌是FALSE);而mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log給出:錯誤日誌

general_log  ON 
general_log_file  /var/log/mysql.general.log 

使用更爲簡潔的語法:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log 
3

爲了補充loyola的回答值得一提的是,作爲MySQL的5。1 log_slow_queries已被廢棄,被替換爲slow-query-log

使用log_slow_queries會導致您的service mysql restartservice mysql start失敗