【第四章】MySQL日誌文件管理
1、日誌文件管理概述:
配置文件:/etc/my.cnf
作用:MySQL日誌文件是用來記錄MySQL數據庫客戶端連接情況、SQL語句的執行情況以及錯誤信息告示。
分類:MySQL日誌文件分為4種:錯誤日誌、通用查詢日誌、慢查詢日誌和二進制日誌:
錯誤日誌:記錄MySQL服務器的啟動、運行、或停止時出現的問題(默認情況,只啟用錯誤日誌功能。)
二進制日誌:以二進制文件的形式記錄了數據庫中的操作,但不是記錄查詢語句。
通用查詢日誌:記錄用戶的登錄和查詢的信息。
慢查詢日誌:記錄所有的執行時間超過指定時間的所有查詢或者不使用索引的查詢。
- error log 錯誤日誌 排錯 /var/log/mysqld.log【默認開啟】
- bin log 二進制日誌 備份 增量備份 DDL DML DCL
- Relay log 中繼日誌 復制 接收 replication master
- slow log 慢查詢日誌 調優 查詢時間超過指定值
【實例1】SHOW VARIABLES 語句查看是否啟用了日誌:
mysql> show variables like ‘log_%‘; +----------------------------------------+----------------------------+ | Variable_name |Value | +----------------------------------------+----------------------------+ | log_bin | ON | | log_bin_basename | /data/mysql/yltlinux | | log_bin_index | /data/mysql/yltlinux.index| | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_error | /data/mysql/host130.err | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_admin_statements | OFF | | log_slow_slave_statements | OFF | | log_throttle_queries_not_using_indexes | 0 | | log_warnings | 1 |
其中Value值是off的表示未開啟服務。可以更改my.ini文件中的配置信息,重啟mysql服務即可。
註:啟用日誌功能會降低MySQL數據的執行速度。
2、錯誤日誌(err log)
作用:error log 錯誤日誌 排錯 /var/log/mysqld.log【默認開啟】
2.1啟動和設置錯誤日誌:
- 日誌文件位置:log-error=/var/log/mysqld.log
- 默認情況下錯誤日誌是開啟的,而且無法 被禁止,打開數據安裝目錄下的my.ini文件找到log-error選項進行查看:
【實例2】獲取log-error變量的值,即獲取error log的詳細位置:
mysql> show variables like ‘log_error‘; +---------------+-------------------------+ | Variable_name | Value | +---------------+-------------------------+ | log_error | /data/mysql/host130.err | +---------------+-------------------------+ 1 row in set (0.00 sec) mysql>
2.2 查看錯誤日誌
【實例2】可知log_error的詳細位置,下邊部分error log:
[root@host130 ~]# more /data/mysql/host130.err
2018-05-25 19:20:15 5800 [Note] InnoDB: The InnoDB memory heap is disabled 2018-05-25 19:20:15 5800 [Note] InnoDB: Mutexes and rw_locks use G CC atomic builtins 2018-05-25 19:20:15 5800 [Note] InnoDB: Memory barrier is not used 2018-05-25 19:20:15 5800 [Note] InnoDB: Compressed tables use zlib 1.2.3 2018-05-25 19:20:15 5800 [Note] InnoDB: Using Linux native AIO 2018-05-25 19:20:15 5800 [Note] InnoDB: Using CPU crc32 instructio
2.3 刪除錯誤日誌
目的:對於存放很久的錯誤日誌,可以刪除以保證MySQL服務器上的硬盤空間。
方法:MySQL數據庫中可以使用兩種方法開啟新的錯誤日誌:mysqladmin命令和flush logs。
mysqladmin 命令語法如下:
1、sqladmin -u root -p flush-log
註:上述命令會創建一個新的錯誤日誌,舊的仍然會 保留,在名稱後邊添加-old內容。
3、二進制日誌
作用:bin log 二進制日誌 備份 增量備份 DDL DML DCL
3.1 啟用二進制日誌
- 默認情況下,二進制日誌(bin-log)功能是關閉狀態,如果要開啟需要在 my.ini 文件中的 log-bin 選項前的 # 去掉。
【實例3】在my.ini 文件中指定 log-bin 選項的參數值,重新指定二進制日誌文件的名稱為 yangyang:
#Binary Logging log-bin="yangyang"
關閉my.ini 文件後重新啟動MySQl服務器。
【實例4】為了確保二進制日誌功能已經開啟,可執行如下命令:
mysql> show variables like ‘log_bin‘; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec) mysql>
3.2查看二進制日誌
- 二進制日誌是以二進制的方式存儲,不能直接打開,所以需要使用mysql 自帶的 mysqlbinlog 命令工具進行查看
【實例5】進入當前數據庫的數據目錄:
-
[root@host130 mysql]# pwd /data/mysql [root@host130 mysql]# mysqlbinlog yltlinux.000037 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #180525 19:20:25 server id 128 end_log_pos 120 CRC32 0xb6d0f986 Start: binlog v 4, server v 5.6.36-log created 180525 19:20:25 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ‘ efEHWw+AAAAAdAAAAHgAAAABAAQANS42LjM2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAB58QdbEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAYb5 0LY= ‘/*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; [root@host130 mysql]#
【實例6】查看二進制日誌的文件目錄:
-
mysql> show master logs; +-----------------+-----------+ | Log_name | File_size | +-----------------+-----------+ | yltlinux.000001 | 178523 | | yltlinux.000002 | 143 | | yltlinux.000003 | 143 | | yltlinux.000004 | 143 | | yltlinux.000005 | 143 | | yltlinux.000006 | 143 | | yltlinux.000007 | 120 | | yltlinux.000008 | 927 | | yltlinux.000009 | 120 | | yltlinux.000010 | 120 | +-----------------+-----------+ 11 rows in set (0.46 sec) mysql>
3.3 清理二進制文件
原因:二進制日誌文件會影響MySQL數據庫性能,大量的二進制日誌文件會占用大量磁盤空間。
刪除二進制文件的方法:
- 刪除所有二進制文件,新的二進制文件會重新從 000001開始:
reset master;
2.根據編號進行刪除
【實例7】刪除 yltlinux.000005 之前的二進制日誌,刪除之後通過 SHOW MASTER LOGS 語句查看文件列表:
mysql> purge master logs to ‘yltlinux.000005‘; Query OK, 0 rows affected (0.10 sec) mysql> show master logs; +-----------------+-----------+ | Log_name | File_size | +-----------------+-----------+ | yltlinux.000005 | 143 | | yltlinux.000006 | 143 | | yltlinux.000007 | 120 | | yltlinux.000008 | 927 | | yltlinux.000009 | 120 | | yltlinux.000010 | 120 | +-----------------+-----------+ 33 rows in set (0.00 sec) mysql>
3.根據創建時間進行刪除
- purge master logs before 語句可以將指定時間之前的所有二進制文件刪除;
- purge master logs before ‘yyyy -mm-dd hh:mm:ss’;
mysql> purge master logs before ‘2018-02-01 22:46:00‘; Query OK, 0 rows affected (0.07 sec) mysql> show master logs; +-----------------+-----------+ | Log_name | File_size | +-----------------+-----------+ | yltlinux.000032 | 143 | | yltlinux.000033 | 6796 | | yltlinux.000034 | 709 | | yltlinux.000035 | 455 | | yltlinux.000036 | 143 | | yltlinux.000037 | 120 | +-----------------+-----------+ 6 rows in set (0.00 sec) mysql>
3.4 恢復二進制日誌
原因:二進制日誌記錄著MySQL數據庫的所有事件操作,當發生災難性錯誤時,可以通過二進制日誌進行恢復。
【實例9】使用 mysqlbinlog 命令執行還原操作時,必須是編號小的首先被還原。
mysqlbinlog yltlinux.000001 | mysql -u root -p mysqlbinlog yltlinux.000002 | mysql -u root -p
4.慢查詢日誌
作用:用來記錄執行時間超過指定時間的查詢語句,可以找出那些查詢語句執行效率低,以方便進行優化。
- 默認情況下,慢查詢日誌功能是關閉的。
- 如下語句查看慢查詢的配置:
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 | OFF | | slow_query_log_file | /data/mysql/host130-slow.log | +---------------------------+------------------------------+ 5 rows in set (0.00 sec) mysql>
【第四章】MySQL日誌文件管理