mysql學習8:第四章:資料庫檔案--日誌檔案

studywell發表於2018-11-06

 

預設存放路徑在資料目錄下,以error.log結尾的檔案。

檢視檔案位置:

show variables like ‘%og_error%’;

注意warnings資訊

 

TIMESTAMP型別特點

                                             

記錄提交後的所有DML語句。如需記錄select 和show,需要開啟全量日誌功能。

二進位制日誌的主要作用:

l   完成主從複製功能,binlog記錄主伺服器上所有修改資料的記錄,傳送到從伺服器。

l   進行恢復操作,透過binlog,使用mysqlbinlog命令,實現基於時間點和位置的恢復。

配置引數log-bin=ON啟動二進位制日誌,如沒有命名檔名則預設mysql-binlog.xxxx為binlog檔名,預設儲存在資料目錄下。

[mysql]>show variables like '%log_bin%';

+---------------------------------+--------------------------------+

| Variable_name                   | Value                          |

+---------------------------------+--------------------------------+

| log_bin                         | ON                             |

| log_bin_basename                | /data/mysql/mysql-binlog       |

| log_bin_index                   | /data/mysql/mysql-binlog.index |

| log_bin_trust_function_creators | OFF                            |

| log_bin_use_v1_row_events       | OFF                            |

| sql_log_bin                     | ON                             |

+---------------------------------+--------------------------------+

6 rows in set (0.00 sec)

 

檢視當前binlog檔案及值大小

[mysql]>show binary logs;

+---------------------+-----------+

| Log_name            | File_size |

+---------------------+-----------+

| mysql-binlog.000001 |       177 |

| mysql-binlog.000002 |       177 |

| mysql-binlog.000003 |      1844 |

| mysql-binlog.000004 |       369 |

| mysql-binlog.000005 |       592 |

| mysql-binlog.000006 |      1065 |

| mysql-binlog.000007 |       615 |

| mysql-binlog.000008 |       217 |

| mysql-binlog.000009 |       194 |

+---------------------+-----------+

9 rows in set (0.00 sec)

 

檢視mysql當前日誌及狀態

 

[mysql]>show master status;

+---------------------+----------+--------------+------------------+-------------------------------------------+

| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                    |

+---------------------+----------+--------------+------------------+-------------------------------------------+

| mysql-binlog.000009 |      194 |              |                  | 9c21d663-e09d-11e8-b535-000c29899e07:1-13 |

+---------------------+----------+--------------+------------------+-------------------------------------------+

1 row in set (0.00 sec)

 

 

資料目錄下的 mysql-bin.index 檔案時二進位制日誌的索引檔案,用來記錄產生的二進位制日誌的序號。

 

binlog引數介紹

max_binlog_size: 制定單個binlog的最大值,預設1G;生產環境控制生成時間小於5分鐘,建議調整為256MB。

binlog_cache_size :所有未提交的事務會記錄到一個快取中,等待事務提交時,直接將快取中的二進位制日誌寫入binlog。每個新會話預設32K;每個執行緒開始一個事務自動分配一個快取。緩衝區太小將會使用磁碟臨時檔案。可透過如下命令判斷。

[mysql]>show global status like '%binlog_cache%';

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| Binlog_cache_disk_use | 0     |

| Binlog_cache_use      | 0     |

+-----------------------+-------+

主要看這兩個值得使用情況;生產環境一般4MB。

 

binlog_format 代表二進位制檔案格式,有statement,row,mixed三種。

l   statement:基於操作的SQL語句記錄到binlog中,簡稱SBR,5.1前的預設格式,節約IO,但有時master-slave資料不一致,廢棄。

l   mixed:混合使用row和statement格式,不建議使用。

l   row:基於行的變更情況記錄,記錄變更前後的內容,簡稱RBR。不記錄SQL語句上下文資訊,只記錄資料變更,任何情況下都可以被複制,但產生日誌多。推薦使用。

mysql5.6後新增binlog_rows_query_log_events引數,可在row模式下看見完整sql語句。5.7預設關閉。

[mysql]>show variables like '%binlog_rows%';

+------------------------------+-------+

| Variable_name                | Value |

+------------------------------+-------+

| binlog_rows_query_log_events | OFF   |

+------------------------------+-------+

 

sync_binlog: 決定binlog的重新整理機制。

expire_logs_days :binlog過期時間(天);

binlog-do-db或binlog-ignore-db: 表示寫入或忽略哪些庫的日誌,預設空;

log_slave_updates :配置m>s1>s2的架構時,需要在s1上設定為1,才能s1同步s2;

binlog_checksum: 對寫入binlog進行校驗,預設crc32.

binlog_row_imag 決定記錄範圍,預設full,記錄全部記錄;minimal只記錄要修改列的資訊;noblob記錄除了blog和text的所有欄位。

 

mysqlbinlog命令檢視binlog示範

l   檢視當前binlog format

[mysql]>show variables like '%binlog_format%';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| binlog_format | ROW   |

+---------------+-------+

l   建立測試表t

CREATE TABLE `t` (

`id`  int(11) NOT NULL auto_increment,

`name`  varchar(10) DEFAULT NULL ,

`city`  varchar(10) DEFAULT NULL ,

PRIMARY KEY (`id`))

ENGINE=INNODB auto_increment=1 ;

l   插入資料

insert into t (name,city) values('zs','bj'),('zz','sh');

l   更新資料

update  t set name ='zs1' where name='zs';

l   複製binlog檔案

# cp mysql-binlog.000009 /tmp/mysqlbinlog9bk

l   轉換binlog

# /usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=decode-rows /tmp/mysqlbinlog9bk > /tmp/binlog.txt

 

引數解釋:

-v 可以看到具體的執行資訊;

--base64-output:把二進位制日誌檔案轉化格式;

l   檢視轉換後的檔案,可看到更新前後的內容。

### UPDATE `mysql`.`t`

### WHERE

###   @1=1 /* INT meta=0 nullable=0 is_null=0 */

###   @2='zs' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */

###   @3='bj' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */

### SET

###   @1=1 /* INT meta=0 nullable=0 is_null=0 */

###   @2='zs1' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */

###   @3='bj' /* VARSTRING(40) meta=40 nullable=1 is_null=0 */

 

 

把超過引數long_query_time時間的所有sql語句記錄下來,5.7預設0.5;

檢視slow log位置:[mysql]>show variables like '%slow_query_log_file%';

檢視slow log的工具:percona-toolkit,參考p84

下載地址:

書中示例版本為3.0.3,官網當前最新版本為3.0.12,可下載對應系統的rpm包,或linux-generic通用版本,安裝包7.8M。

下載後解壓:

# tar -zxvf percona-toolkit-3.0.12_x86_64.tar.gz

透過如下命令生成慢SQL報告:

# pwd

/usr/local/percona-toolkit-3.0.12/bin

# ./pt-query-digest --since=24th /data/mysql/slow.log >slowquery.log

Invalid --since value at ./pt-query-digest line 13813.

安裝rpm包同樣的報錯;後續再研究。

記錄mysql 資料庫所有操作的sql,包含select和show,預設關閉。

檢視general log配置情況:

[mysql]>show variables like '%general%';

+------------------+---------------------------+

| Variable_name    | Value                     |

+------------------+---------------------------+

| general_log      | OFF                       |

| general_log_file | /data/mysql/localhost.log |

+------------------+---------------------------+

設定使重啟資料庫前生效:

[mysql]>set global general_log='ON';

日誌內容:

[root@localhost mysql]# tail -f -n 100 localhost.log

/usr/local/mysql/bin/mysqld, Version: 5.7.24-log (MySQL Community Server (GPL)). started with:

Tcp port: 3306  Unix socket: /tmp/mysql.sock

Time                 Id Command    Argument

2018-11-06T06:14:26.924983Z       67 Query  commit

2018-11-06T06:14:29.037015Z       67 Query  set global general_log='ON'

2018-11-06T06:14:32.715302Z       67 Query  show variables like '%general%'

2018-11-06T06:15:04.075786Z       67 Quit

 

log_output:全域性動態變數 ,決定全量日誌儲存方式,該引數也決定了slow log的儲存方式,可選:

l   File,預設檔案儲存,建議;

l   table:存放到新建表general_log表;

l   NONE:不儲存;

資料庫審計(簡稱DBAudit)能夠實時記錄網路上資料庫活動,對資料庫操作進行細粒度審計的合規性管理,對遭受到的風險行為進行告警,對攻擊行為進行阻斷。透過對使用者訪問資料庫行為的記分析和彙報,用來幫助使用者事後生成合規報、事故追根溯源,同時加強內外部資料庫網路行為記錄,提高資料資產安全。

企業版才可使用審計功能。可使用第三方開源外掛libaudit_plugin.so在mysql5.7社群版中wa記憶體審計工作。參考p88

官方下載地址:

github:

書中版本:1.1.4-725   當前下載最新版本為1.1.6-784

l   解壓外掛包:

# unzip audit-plugin-mysql-5.7-1.1.6-784-linux-x86_64.zip

l   把解壓好的外掛複製到mysqllib庫的外掛目錄下:

[root@localhost lib]# pwd

/orasoft/audit-plugin-mysql-5.7-1.1.6-784/lib

[root@localhost lib]# cp libaudit_plugin.so /usr/local/mysql/lib/plugin/

l   資料庫命令列安裝外掛

INSTALL PLUGIN AUDIT SONANEM ‘libaudit_plugin.so’;

[mysql]>install plugin audit soname 'libaudit_plugin.so';

ERROR 1123 (HY000): Can't initialize function 'audit'; Plugin initialization function failed.

查github,當前版本支援到mysql 5.7.19,而當前資料庫版本為5.7.24,看來不能使用了。

資料庫日誌提示:2018-11-06T06:48:10.122754Z 5 [Note] McAfee Audit Plugin: Couldn't find proper THD offsets for: 5.7.24-log

 

下面按書記錄,有空再研究

l   檢視外掛功能是否開啟;

show variables like ‘%audit%’;

l   開啟外掛功能:

set global audit_json_file=1;

l   檢視日誌

mysql資料目錄下產生一個mysql-audit.json審計日誌,可查操作SQL的使用者名稱,IP。

主從複製中,從伺服器IO執行緒將主伺服器的binlog讀取並記錄到本地檔案relay log中,然後從伺服器SQL執行緒讀取應用。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2218904/,如需轉載,請註明出處,否則將追究法律責任。

相關文章