因爲日誌文件是掌握數據庫運行狀態的重要參數,所以日誌文件的維護也有十分重要的意義。Mysql 的日誌類型有錯誤日誌、通用查詢日誌、二進制日誌、慢查詢日誌。mysql
1. 錯誤日誌sql
(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 sysvim
(2)在tata 文件夾下,此時尚未錯誤日誌。在Mysql 的配置文件中,能夠指定日誌文件的保存位置和日誌的文件名。若是沒有指定文件名,使用socket
host_name.err 做爲文件名。ide
[root@localhost data]# vim /etc/my.cnf //修改主配置文件工具
[mysqld]
測試log-error=/usr/local/mysql/data/mysql_error.log //指定保存錯誤日誌的位置優化
(3)重啓 MySQL , 生成 mysql_error.log 用來記錄錯誤日誌。this
[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 秒