MySQL 日誌管理

         由於日誌文件是掌握數據庫運行狀態的重要參數,因此日誌文件的維護也有十分重要的意義。Mysql 的日誌類型有錯誤日誌、通用查詢日誌、二進制日誌、慢查詢日誌。

1.  錯誤日誌

    (1) 錯誤日誌主要是記錄當MySQL 啓動和停止時,以及在運行過程中發生任何錯誤時的相關信息。錯誤日誌默認保存在 MySQL 的安裝路徑 data 文件夾下,後綴名是 .err 。

[root@localhost mysql]# cd data/
[root@localhost data]# ls
auto.cnf  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  ibtmp1  mysql  performance_schema  sys

(2)在tata 文件夾下,此時還沒有錯誤日誌。在Mysql  的配置文件中,可以指定日誌文件的保存位置和日誌的文件名。如果沒有指定文件名,使用

host_name.err 作爲文件名。

[root@localhost data]# vim /etc/my.cnf                                   //修改主配置文件

[mysqld]

log-error=/usr/local/mysql/data/mysql_error.log                    //指定保存錯誤日誌的位置

(3)重啓 MySQL , 生成 mysql_error.log  用來記錄錯誤日誌。

[root@localhost data]# systemctl restart mysqld.service                             //重啓mysql
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql            performance_schema
ib_buffer
_pool  ib_logfile0  ibtmp1       mysql_error.log  sys                                   //錯誤日誌

2.通用查詢日誌

  (1) 通用日誌用來記錄MsQL 的所有連接和語句,默認時關閉的。使用 SHOW語句可以查詢出日誌的信息。

mysql> show variables like 'general%';
+------------------+-------------------------------------+
| Variable_name    | Value                               |
+------------------+-------------------------------------+
| general_log      | OFF                                 |                                              //通用查詢日誌  默認關閉
| general_log_file | /usr/local/mysql/data/localhost.log |
+------------------+-------------------------------------+
2 rows in set (0.00 sec)

(2) 修改 MySQL 配置文件,開啓通用查詢日誌,指定通用查詢日誌的位置。

[root@localhost data]# vim /etc/my.cnf

[mysqld]

general_log=ON                                                                                          //開啓通用查詢日誌
general_log_file=/usr/local/mysql/data/mysql_general.log              //指定位置

(3)重啓 mysql 服務,通用查詢日誌生效

[root@localhost data]# systemctl restart mysqld.service
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql            mysql_general.log   sys                            通用查詢日誌
ib_buffer_pool  ib_logfile0  ibtmp1       mysql_error.log  performance_schema

(4)使用SHOW 語句查看通用查詢日誌已經打開,general_log 對應的值是 ON。

mysql> show variables like 'general%';
+------------------+-----------------------------------------+
| Variable_name    | Value                                   |
+------------------+-----------------------------------------+
| general_log      | ON                                      |
| general_log_file | /usr/local/mysql/data/mysql_general.log |
+------------------+-----------------------------------------+
2 rows in set (0.00 sec)


3二進制日誌

        (1)二進制日誌用來記錄所有更新了數據或者已經潛在更新了數據的語句,記錄了數據的更改,主要目的是在恢復數據時能夠最大程度的恢復數據庫。二進制是默認開啓的,在data 文件夾下,數據量大時,它會自動分割成多個日誌文件,以數字作爲擴展名。

mysql> show variables like 'log_bin%';
+---------------------------------+---------------------------------------+
| Variable_name                   | Value                                 |
+---------------------------------+---------------------------------------+
| log_bin                         | ON                                    |
| log_bin_basename                | /usr/local/mysql/data/mysql-bin       |
| log_bin_index                   | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF                                   |
| log_bin_use_v1_row_events       | OFF                                   |
+---------------------------------+---------------------------------------+
5 rows in set (0.00 sec)

   修改MySQL  配置文件 添加 log_bin=mysql-bin  語句。

[root@localhost data]# vim /etc/my.cnf

[mysqld]

log_bin=mysql-bin

(2)重啓 mysql 服務,二進制日誌生效

[root@localhost data]# systemctl restart mysqld.service
[root@localhost data]# ls
auto.cnf        ibdata1      ib_logfile1  mysql             mysql-bin.index  mysql_general.log   sys
ib_buffer_pool  ib_logfile0  ibtmp1      mysql-bin.000001  mysql_error.log  performance_schema            //二進制日誌

(3)二進制日誌可以使用MySQL 的工具 mysqlbinlog 查看二進制文件。

[root@localhost data]# mysqlbinlog --no-defaults mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#180829 16:05:21 server id 1  end_log_pos 123 CRC32 0x8d08f4c5     Start: binlog v 4, server v 5.7.17-log created 180829 16:05:21 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
wVOGWw8BAAAAdwAAAHsAAAABAAQANS43LjE3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADBU4ZbEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AcX0CI0=
'/*!*/;
# at 123
#180829 16:05:21 server id 1  end_log_pos 154 CRC32 0xabee8725     Previous-GTIDs
# [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

4.慢查詢日誌

       慢查詢日誌記錄所有執行時間超過long_query_time  秒的 SQL 語句,用於找到那些查詢語句執行時間長,以便對其進行 優化。默認慢查詢日誌是關閉的, slow_query_log 是慢查詢的選項,默認時OFF 。

mysql> show variables like '%slow%';                                    //查看MySQL  慢查詢功能是否開啓
+---------------------------+------------------------------------------+
| Variable_name             | Value                                    |
+---------------------------+------------------------------------------+
| log_slow_admin_statements | OFF                                      |
| log_slow_slave_statements | OFF                                      |
| slow_launch_time          | 2                                        |
| slow_query_log            | OFF                                      |                               //狀態爲OFF
| slow_query_log_file       | /usr/local/mysql/data/localhost-slow.log |
+---------------------------+------------------------------------------+
5 rows in set (0.00 sec)

(1)可以使用 SQL 語句開啓慢查詢功能。

mysql> set global slow_query_log=ON;                    //開啓 MySQL 慢查詢功能
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%slow%';
+---------------------------+------------------------------------------+
| Variable_name             | Value                                    |
+---------------------------+------------------------------------------+
| log_slow_admin_statements | OFF                                      |
| log_slow_slave_statements | OFF                                      |
| slow_launch_time          | 2                                        |
| slow_query_log            | ON                                       |                     //狀態爲ON
| slow_query_log_file       | /usr/local/mysql/data/localhost-slow.log |
+---------------------------+------------------------------------------+
5 rows in set (0.01 sec)

(2)開啓MySQL 慢查詢功能還可以在 MySQL 的配置文件中進行設定。

[root@localhost data]# vim /etc/my.cnf

[mysqld]

slow_query_log=ON                                                   //啓動慢查詢功能
slow_query_log_file=mysql_slow_query.log        //指定存放慢查詢日誌文件位置
long_qurey_time=1                                                      //設置了超過 1 秒執行的語句被記錄

重啓MySQL 後,慢查詢日誌 mysql_slow_query.log 被創建。經常檢查慢查詢日誌,當有查詢語句被記錄,就需要對其進行優化處理。

[root@localhost data]# systemctl restart mysqld.service                             //重啓MySQL
[root@localhost data]# ls
auto.cnf        ib_logfile1         mysql-bin.000001  mysql_error.log       sys
ib_buffer_pool  ibtmp1              mysql-bin.000002  mysql_general.log
ibdata1         localhost-slow.log  mysql-bin.000003  mysql_slow_query.log     //慢查詢日誌
ib_logfile0     mysql               mysql-bin.index   performance_schema

查看慢查詢時間設置

mysql> show variables like 'long_query_time';               //查看慢查詢時間設置
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |                          //慢查詢時間爲 1 秒,與之前配置文件中時間相同
+-----------------+----------+
1 row in set (0.00 sec)

進行慢查詢測試生成慢查詢日誌。

mysql> select sleep(6);                                    //休眠6s
+----------+
| sleep(6) |
+----------+
|        0 |
+----------+
1 row in set (6.00 sec)

mysql> show global status like '%slow%';      //查看慢查詢狀態
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| Slow_launch_threads | 0     |
| Slow_queries        | 1     |
+---------------------+-------+
2 rows in set (0.00 sec)

查看生成的慢查詢日誌

[root@localhost data]# cat mysql_slow_query.log               //查看生成的慢查詢日誌
/usr/local/mysql/bin/mysqld, Version: 5.7.17-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /usr/local/mysql/mysql.sock
Time                 Id Command    Argument
/usr/local/mysql/bin/mysqld, Version: 5.7.17-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /usr/local/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 2018-08-29T09:04:25.235721Z
# User@Host: root[root] @ localhost []  Id:     4
# Query_time: 6.001888  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1535533465;
select sleep(6);                     // 休眠 6 秒








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章