本章內容:
- 查詢日志
- 慢查詢日志 ***
- 錯誤日志
- 二進制日志 *****
- 中繼日志
- 事務日志 ****
mariadb 日志文件默認路徑:/var/lib/mysql
查詢日志
- 數據庫的查詢日志記錄了每一條sql語句;
- 訪問量較大時建議不開啟,因為設想一下如果同時又幾百萬個用戶同時訪問數據庫,查詢日志的記錄就會占用大量的系統開銷,直接影響服務器性能;
開啟方式
vim /etc/my.cnf.d/server.cnf
general_log = ON| OFF #查詢日志開關
general_log_file localhost.log #查詢日志的文件名字(/var/lib/mysql)
log_output TABLE | FILE | NONE #查詢日志的存儲形式
慢查詢日志* * * *
- 它用來記錄在mariadb中響應時間超過閥值的語句。具體指運行時間超過long_query_time值的SQL語句,則會被記錄到慢查詢日志中。
- 慢查詢日志是做數據優化可查的分析項
slow_query_log = OFF|ON #開啟慢查詢日志
slow_query_log_file = LOCALHOST-SLOW.log #慢查詢日志的文件路徑
long_query_time #慢查詢時長;默認是10s
log_slow_rate_limit #如果要記錄的慢查詢日志非常多的話,會按照速率來記錄,默認1秒記錄一個
log_slow_verbosity=full | query_plan #記錄的詳細級別
第一步:查看默認設置
MariaDB [mysql]> show variables like '%slow_query%';
+---------------------+--------------------+
| Variable_name | Value |
+---------------------+--------------------+
| slow_query_log | OFF |
| slow_query_log_file | localhost-slow.log |
+---------------------+--------------------+
查看默認等待時長
MariaDB [(none)]> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
第二步:編輯配置文件開啟慢查詢日志
╭─root@localhost.localdomain ~
╰─➤ vim /etc/my.cnf.d/server.cnf
[server]
slow_query_log=1
long_query_time=3
第三步:可以用測試命令:select sleep(4)
錯誤日志
- 錯誤日志包含了mariadb 啟動和關閉的次數.
- 包含了錯誤,警告,和注釋的相關診斷信息.
- mariadb 在運行時,如果你的mariadb 中的表需要自動檢查或者修復.這些信息都會寫入到error log 里面.
- 在主從復制架構中的從服務器上啟動從服務器線程時產生的信息
- event scheduler 運行一個event時產生的日志信息
log_error = /var/log/mysql_error.log#指定錯誤日志的輸出位置
log_warnings 為0, 表示不記錄告警信息。
log_warnings 為1, 表示告警信息寫入錯誤日志。
log_warnings 大於1, 表示各類告警信息,例如有關網絡故障的信息和重新連接信息寫入錯誤日志。(默認為2)
MariaDB [mysql]> show variables like '%log_warning%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings | 2 |
+---------------+-------+
二進制日志* * * * *
- 二進制日志:記錄着所有更改數據的語句,可以用於數據的恢復,並且是針對時間點還原
- 二進制日志:是在數據庫中起着至關重要的作用(主從架構,數據備份,數據恢復等)
log_bin = OFF | ON
log_bin_basename = /var/lib/mysql/mysql-bin
sql_log_bin=1|0 #是否啟用二進制日志
log_bin_index=PATH #二進制日志索引位置
sync_binlog=1|0 #設定是否啟動二進制日志同步功能
max_binlog_size=SIZE #單個二進制文件最大體積,默認為1G
expire_logs_days=0 #超過多少天就清除二進制日志,默認為0,代表不啟用此功能
binlog_format=STATEMENT|ROW|MIXED
#二進制記錄格式(STATEMENT:基於“語句”記錄; ROW:基於“行”記錄 ;MIXED:讓系統自行判定該基於哪種方式進行)
開啟二進制日志
╭─root@localhost.localdomain ~
╰─➤ vim /etc/my.cnf.d/server.cnf
[server]
log_bin=mysql-bin
二進制日志文件內容查詢
用數據庫自帶的日志查看工具mysqlbinlog
╭─root@localhost.localdomain /var/lib/mysql
╰─➤ mysqlbinlog mysql-bin.000001
查看position(數據的位置)
#手動滾動二進制日志文件
MariaDB [mysql]> flush logs;
Query OK, 0 rows affected (0.006 sec)
#查看所有二進制日志文件
MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 375 |
| mysql-bin.000002 | 371 |
+------------------+-----------+
#查看當前位置
MariaDB [mysql]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 371 | | |
+------------------+----------+--------------+------------------+
二進制日志文件滾動
- flush logs;
- 文件超出指定大小
- service mariadb restart
客戶端命令工具:mysqlbinlog
通過二進制日志恢復還原數據庫文件
mysqlbinlog [options] log_file ...
--start-datetime=
--stop-datetime=
--start-position=
--stop-position=
中繼日志
中繼日志:復制架構中,備服務器用於保存主服務器的二進制日志中讀取到的事件
事務日志* * * *
InnoDB的事務日志主要分為redo log(重做日志,提供前滾操作)和undo log(回滾日志,提供回滾操作),為了最大程度上減少數據寫入時io問題,在存儲引擎修改表的數據時,會將數據從磁盤拷貝到內存中,然后修改內存中的數據拷貝,再將修改行為持久化到磁盤中(先寫redo log buffer(日志緩沖區)(PS:這塊我會在下文詳細說明),再定期批量寫入),而不用每次將修改的數據本身持久化到硬盤中.
事務日志參數
innodb_buffer_pool_size 一般設置成為物理內存的3/4,或者4/5
innodb_log_files_in_group = 2 事務日志文件的個數,默認為2個事務日志文件
innodb_log_file_size = 50331648(48m) 事務日志文件的單個大小48m
innodb_log_group_home_dir = ./ 事務日志文件的所在路徑,默認mariadb的數據目錄/var/lib/mysql
查看
MariaDB [mysql]> show variables like '%innodb_log%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| innodb_log_buffer_size | 16777216 |
| innodb_log_checksums | ON |
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | 50331648 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_log_optimize_ddl | ON |
| innodb_log_write_ahead_size | 8192 |
+-----------------------------+----------+
8 rows in set (0.002 sec)
# -- 緩沖池(buffer_pool)大小非常重要
MariaDB [mysql]> show variables like '%innodb_buffer_pool_size%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.001 sec)
事務日志推薦文章:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html