Mysql
啟用 slow_query_log 嘗試寫入 slow_log.CSV
我正在執行 MySQL 5.5
我想截斷慢日誌文件,所以我做了:
SET GLOBAL slow_query_log = 0;
然後截斷文件系統中的文件。
但是,當我重新啟用它時,它會失敗:
SET GLOBAL slow_query_log = 1; ERROR 13 (HY000): Can't get stat of './mysql/slow_log.CSV' (Errcode: 2)
雖然
slow_query_log_file
設置顯式到另一個路徑。SHOW GLOBAL VARIABLES LIKE 'slow_query%'; +------------------------------------+---------------------------------+ | Variable_name | Value | +------------------------------------+---------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /home/mysql_data/jobs1-slow.log | | slow_query_log_timestamp_always | OFF | | slow_query_log_timestamp_precision | second | | slow_query_log_use_global_control | | +------------------------------------+---------------------------------+
怎麼了?我想要 MySQL 日誌到指定的文件。純文字,而不是 CSV。
SHOW GLOBAL VARIABLES LIKE 'log_output'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | FILE | +---------------+-------+
在我停止之前,記錄很好。
解決了這個問題。
事實證明,表
mysql.general_log
並mysql.slow_log
已損壞。實際上它只有
frm
文件,但沒有關聯的csv
數據文件。為了解決這個問題,我重新創建了這些表。
mysql> DROP TABLE mysql.general_log; ERROR 1051 (42S02): Unknown table 'general_log' mysql> DROP TABLE mysql.slow_log; ERROR 1051 (42S02): Unknown table 'slow_log'
儘管出現錯誤,但該
frm
文件已被刪除。所以沒關係。然後從 5.5 發行版執行 SQL。
-- Create general_log if CSV is enabled. SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, thread_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, command_type VARCHAR(64) NOT NULL, argument MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment="General log"', 'SET @dummy = 0'); PREPARE stmt FROM @str; EXECUTE stmt; DROP PREPARE stmt; -- Create slow_log if CSV is enabled. SET @str = IF (@@have_csv = 'YES', 'CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP NOT NULL, user_host MEDIUMTEXT NOT NULL, query_time TIME NOT NULL, lock_time TIME NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMTEXT NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"', 'SET @dummy = 0'); PREPARE stmt FROM @str; EXECUTE stmt; DROP PREPARE stmt;
最後,啟用日誌就好了:
SET GLOBAL slow_query_log = 1; Query OK, 0 rows affected (0.20 sec)
我認為這是由外部程序或新手引起的,因為之後我關閉並重新登錄就好了。
我做了這些步驟:
set global slow_query_log=0;
- 刪除系統中的慢日誌文件
set global slow_query_log=1;
它工作正常,所以我嘗試了以下步驟:
mysql> set global slow_query_log=0; Query OK, 0 rows affected (0.12 sec) mysql> set global slow_query_log_file='/tmp/slow.log'; Query OK, 0 rows affected (0.10 sec) mysql> set global slow_query_log=1; Query OK, 0 rows affected (0.00 sec)
仍然有效,並且新的慢日誌文件生成為
/tmp/slow.log
.最後,全域變數的值
log_output
決定了在哪裡生成通用日誌和慢日誌的輸出,而不是文件格式。