日誌文件記錄了影響MySQL數據庫的各類類型活動,MySQL數據庫中常見的日誌文件有錯誤日誌、二進制日誌、慢查詢日誌。
這些日誌文件爲DBA對數據庫優化、問題查找帶來了極大的便利。mysql
參數log_output指定了慢查詢輸出的格式,默認爲FILE,你能夠設置爲TABLE,而後就能夠在mysql架構下查詢相關的表了。sql
"日誌輸出方式" mysql> show variables like 'log_output%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | FILE | +---------------+-------+ 1 row in set (0.00 sec) "更改成TABLE" mysql> set global log_output='TABLE'; Query OK, 0 rows affected (0.00 sec) "輸出內容" mysql> select event_time,user_host,argument from general_log; +---------------------+---------------------------+--------------------------------------------------------+ | event_time | user_host | argument | +---------------------+---------------------------+--------------------------------------------------------+ | 2016-09-30 14:36:36 | root[root] @ localhost [] | show variables like 'log_output%' | | 2016-09-30 14:37:17 | root[root] @ localhost [] | show tables | | 2016-09-30 14:37:29 | root[root] @ localhost [] | select * from general_log | | 2016-09-30 14:37:36 | root[root] @ localhost [] | select * from general_log | | 2016-09-30 14:38:03 | root[root] @ localhost [] | select * from general_log | | 2016-09-30 14:38:30 | root[root] @ localhost [] | select event_time,user_host,argument from general_log | +---------------------+---------------------------+--------------------------------------------------------+
1、啓動數據庫
使用 service 啓動:service mysqld start架構
使用 mysqld 腳本啓動:/etc/inint.d/mysqld startsocket
使用 mysqld_safe 啓動:mysqld_safe&優化
2、中止rest
使用 service 啓動:service mysqld stop日誌
使用 mysqld 腳本啓動:/etc/inint.d/mysqld stopcode
mysqladmin shutdown索引
3、重啓
使用 service 啓動:service mysqld restart
使用 mysqld 腳本啓動:/etc/inint.d/mysqld restart
錯誤日誌文件對MySQL的啓動、運行、關閉過程進行了記錄。MySQL DBA在遇到問題時應該首先查看該文件。該文件不但記錄了出錯信息,也記錄一些警告信息或者正確的信息。
"經過 show variables like log_error來定位該文件" mysql> show variables like 'log_error'; +---------------+------------------------+ | Variable_name | Value | +---------------+------------------------+ | log_error | /var/log/mysql/err.log | +---------------+------------------------+ 1 row in set (0.00 sec) "文件內容" 160930 14:00:57 [Note] Event Scheduler: Killing the scheduler thread, thread id 1 160930 14:00:57 [Note] Event Scheduler: Waiting for the scheduler thread to reply 160930 14:00:57 [Note] Event Scheduler: Stopped 160930 14:00:57 [Note] Event Scheduler: Purging the queue. 9 events 160930 14:00:57 InnoDB: Starting shutdown... 160930 14:00:58 InnoDB: Shutdown completed; log sequence number 892930378 160930 14:00:58 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
設置一個閾值,將運行時間超過該值的全部SQL語句都記錄到慢查詢日誌文件中。
默認狀況下,MySQL數據庫並不啓動慢查詢日誌,你須要手工將這個參數設爲ON
"記錄慢查詢的時間閾值" mysql> show variables like '%long%' -> ; +---------------------------------------------------+----------+ | Variable_name | Value | +---------------------------------------------------+----------+ | long_query_time | 0.001000 | +---------------------------------------------------+----------+ 3 rows in set (0.05 sec) 2."查詢慢查詢日誌是否開啓" mysql> show variables like 'log_slow_queries'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | log_slow_queries | OFF | +------------------+-------+ 1 row in set (0.02 sec)
3."若是運行的SQL沒有索引,慢查詢日誌是否記錄" mysql> show variables like 'log_queries_not_using_indexes'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_not_using_indexes | OFF | +-------------------------------+-------+ 1 row in set (0.00 sec) 4."更改設置" mysql> set global log_slow_queries='ON' -> ; Query OK, 0 rows affected, 1 warning (0.05 sec)
查詢日誌記錄了全部對MySQL數據庫請求的信息,不論這些請求是否獲得了正確的執行。
"打開查詢日誌" mysql> set global general_log='on'; Query OK, 0 rows affected (0.00 sec) "日誌所在位置" mysql> show variables like 'general%'; +------------------+-------------------------------------+ | Variable_name | Value | +------------------+-------------------------------------+ | general_log | ON | | general_log_file | /usr/local/mysql/data/localhost.log | +------------------+-------------------------------------+ "文件內容" mysql> system more /usr/local/mysql/data/localhost.log ; Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument 160930 14:25:15 3 Query show variables like 'general%' 160930 14:25:31 3 Query select * from general_log 160930 14:25:33 3 Query select * from general_log 160930 14:25:34 3 Query select * from general_log 160930 14:25:35 3 Query select * from general_log 160930 14:25:36 3 Query select * from general_log
二進制日誌包含例如建立表、表數據更改等數據庫更改信息。也包含一些潛在可能修改的事件(好比一個delete命令,但沒有數據被刪除)。
二進制日誌也會包含數據更新的時長。
二進制日誌文件有兩個重要的做用:
1.遠程複製
能夠經過主機上的二進制日誌文件,將數據更改同步到備機。
2.數據恢復某些數據恢復操做須要用到二進制日誌文件恢復歷史備份後,可使用二進制文件從新執行備份後所作的操做,達到徹底恢復。