MySQL日志管理學(xué)習(xí)筆記day09

1.錯(cuò)誤日志

1.1 作用

MySQL啟動(dòng)及工作過(guò)程中,狀態(tài)\報(bào)錯(cuò)\警告\。

1.2怎么配置?

mysql> select @@log_error;
+---------------------------+
| @@log_error               |
+---------------------------+
| /data/3306/data/mysql.log |
+---------------------------+
1 row in set (0.00 sec)

默認(rèn)時(shí)在datadir=/data/3306/data/hostname.err

設(shè)置

vim /etc/my.cnf
然后加一行路徑即可。
log_error=路徑
然后重啟生效

1.3如何查看錯(cuò)誤日志

vim /data/3306/data/mysql.log 也可以用cat 、tail都行。
關(guān)注[ERROR]的上下文。

2.二進(jìn)制日志 ????????????

2.1 作用

數(shù)據(jù)恢復(fù)必備的日志
主從復(fù)制依賴的日志

2.2 怎么配置

2.2.1 修改配置文件

vim /etc/my.cnf
加一行參數(shù)
server_id=6 ??????????必須加
log_bin=/data/binlog/mysql-bin 要提前創(chuàng)建好,并且修改權(quán)限。

2.2.2 創(chuàng)建目錄授權(quán)

mkdir -p /data/binlog    -p
chown   -R   mysql.mysql  /data/*

```vim里 ctrl c 鎖住 ctrl q 解鎖``` 

然后重啟

二進(jìn)制之日文件 可以用strings命令來(lái)查看版本號(hào)

strings mysql-bin.000001

2.3 二進(jìn)制日志記錄了什么?

2.2.1 引入

除了查詢類的語(yǔ)句,都會(huì)記錄。
所有數(shù)據(jù)庫(kù)變更類的語(yǔ)句。

2.3.2 記錄語(yǔ)句的種類

DDL
DCL
DML

2.3.4 不同語(yǔ)句的記錄格式說(shuō)明

DDL,DCL:直接以語(yǔ)句(statement)方式記錄
DML語(yǔ)句: insert, update,delete
SBR : statement ,做什么記錄什么。
RBR : row 記錄數(shù)據(jù)行的變化 默認(rèn)模式,記錄的數(shù)據(jù)不會(huì)出現(xiàn)誤差。
MBR:mixed 自動(dòng)判斷記錄模式

面試題:說(shuō)明SBR和RBR的區(qū)別?

SBR: statement ,做什么記錄什么,記錄的就是SQL,可讀性較強(qiáng),日志量相對(duì)較少,好處很多,日志記錄可能會(huì)有誤差,可能不準(zhǔn)確。
RBR: row ,記錄數(shù)據(jù)行的變化,默認(rèn)模式,可讀性差,日志量大,日志記錄準(zhǔn)確。也是我們推薦的模式。

mysql> select @@binlog_format;
+-----------------+
| @@binlog_format |
+-----------------+
| ROW             |
+-----------------+
1 row in set (0.00 sec)

2.3.5 binlog events(二進(jìn)制日志事件)

(1)簡(jiǎn)介
二進(jìn)制日志內(nèi)容以事件為最小記錄單元。
對(duì)于DDL和DCL,一個(gè)語(yǔ)句就是一個(gè)事件。
對(duì)于DML(標(biāo)準(zhǔn)的事務(wù)語(yǔ)句) : 只記錄已提交的事務(wù)的DML語(yǔ)句
begin; 事件1
a 事件2
b ?事件3
commit; 事件4

(2)事件的構(gòu)成
查看二進(jìn)制日志文件
mysqlbinlog mysql-bin000014

# at 941  事件開始的位置      (position)
#190904 19:19:30 事件發(fā)生的時(shí)間  (position)
 server id 6  end_log_pos 1029 CRC32 0x0caff37c 事件結(jié)束的位置
create database hh 事件內(nèi)容

2.3.6 二進(jìn)制日志的基本查看

(1) 查看二進(jìn)制日志的配置信息

mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| log_bin                         | ON                           |
| log_bin_basename                | /data/binlog/mysql-bin       |
| sql_log_bin                     | ON                           |

(2) 二進(jìn)制日志基本信息
查看

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |    692420 |
| mysql-bin.000003 |       546 |
| mysql-bin.000004 |      1517 |
| mysql-bin.000005 |       661 |
| mysql-bin.000006 |      2086 |
| mysql-bin.000007 |       397 |
| mysql-bin.000008 |       241 |
| mysql-bin.000009 |       241 |
| mysql-bin.000010 |       524 |
| mysql-bin.000011 |    964084 |
| mysql-bin.000012 |       217 |
| mysql-bin.000013 |       538 |
| mysql-bin.000014 |      1029 |
+------------------+-----------+
14 rows in set (0.01 sec)

查看當(dāng)前正在使用的日志文件

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000014 |     1029 |              |                  | 8d2ed0d5-b75a-11e9-ba1c-000c29222c92:1-87 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)

(3) 查看二進(jìn)制日志的事件信息

mysql> show binlog events in 'mysql-bin.000014';

2.4 內(nèi)容查看和截取

[root@db01 ~]# mysqlbinlog /data/binlog/mysql-bin.000005
[root@db01 ~]# mysqlbinlog --base64-output=decode-rows -vvv   /data/binlog/mysql-bin.000005
2.4.2 日志的截取
--start-position 
--stop-position
語(yǔ)法:
```便于易讀```
mysqlbinlog --start-position=xxx  --stop-position=xxx /data/binlog/mysql-bin.000005>/data/bin.sql

mysqlbinlog --help

演練:
(1) 準(zhǔn)備數(shù)據(jù)
創(chuàng)建一個(gè)庫(kù)

mysql> create database binlog charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
use binlog;

創(chuàng)建一張表

mysql> create table t1(id int)engine=innodb charset=utf8mb4;
Query OK, 0 rows affected (0.03 sec)

插入一條數(shù)據(jù)

insert into t1 values(1),(2)(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

commit;
mysql> insert into t1 values(11),(12),(13);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

(2) 變更數(shù)據(jù)

mysql> update t1 set id=10 where id>10;
Query OK, 3 rows affected (0.02 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

刪除binlog數(shù)據(jù)庫(kù)

mysql> drop database binlog;
Query OK, 1 row affected (0.04 sec)

(3) 數(shù)據(jù)恢復(fù)
確認(rèn)起點(diǎn)和終點(diǎn)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000014 |     3433 |              |                  | 8d2ed0d5-b75a-11e9-ba1c-000c29222c92:1-97 |
+------------------+----------+--------------+------------------+-------------------------------------------+

查看事件內(nèi)容

show binlog events in 'mysql-bin.000014';

找到起點(diǎn) (建庫(kù)語(yǔ)句)
| mysql-bin.000014 | 1666 | Query | 6 | 1782 | create database binlog charset utf8mb4

找到終點(diǎn)(drop)
| mysql-bin.000014 | 3335 | Query | 6 | 3433 | drop database binlog

(4)截取日志
注意記得加:--skip-gtids參數(shù)

[root@db01 ~]#mysqlbinlog --start-position=1666 --skip-gtids  --stop-position=3335 /data/binlog/mysql-bin.000014>/data/bin.sql;
[root@db01 ~]# 

確認(rèn)下是不是我們要截取的日志

[root@db01 /data]# vim bin.sql

(5) 恢復(fù)日志
臨時(shí)關(guān)閉當(dāng)前會(huì)話的binlog記錄

mysql>  set  sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)

用source恢復(fù)

mysql> source /data/bin.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

然后查看數(shù)據(jù)庫(kù)
show databases;
發(fā)現(xiàn)數(shù)據(jù)已恢復(fù)成功。
mysql>

(6)擴(kuò)展
過(guò)濾庫(kù)

mysqlbinlog  -d binlog--start-position=1666 --skip-gtids  --stop-position=3335 /data/binlog/mysql-bin.000014>/data/bin.sql;

可以借助中間庫(kù)

2.5 基于gtid的binlog管理(擴(kuò)展、)

2.5.0 引入

5.6版本以后,binlog加入了新的日志記錄方式,GTID。
主要作用:
簡(jiǎn)化binlog截取
提供在主從復(fù)制中的高級(jí)功能
5.7 版本之后,進(jìn)行了GTID增強(qiáng)
主從性能, 高可用環(huán)境,集群,

2.5.1 什么是GTID (Global Transaction ID)

全局唯一的事務(wù)編號(hào)
冪等性:
GTID:Server_uuid:Tx_id
545fd699-be48-11e9-8f0a-000c2980e248:1-10

2.5.2配置、

show variables like '%gtid%';
gtid_mode = on #開關(guān)
enforce_gtid_consistency=true #強(qiáng)制GTID一致性
log_slave_updates=1 #主從復(fù)制中從庫(kù)記錄binlog,并統(tǒng)一GTID信息。
mysql> show variables like '%log_slave_updates%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| log_slave_updates | ON |
+-------------------+-------+

配置的話加入mysql配置文件中即可。

2.5.3 查看gtid日志信息

DDL,DCL 一個(gè)操作就是GTID
DML,一個(gè)完整的事務(wù)就是一個(gè)GTID
begin;
xxx
xxx
commit

oldguo[db1]>show master status ;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000009 |      906 |              |                  | 545fd699-be48-11e9-8f0a-000c2980e248:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
oldguo[db1]>show binlog events in 'mysql-bin.000009';
| mysql-bin.000009 | 154 | Gtid           |         6 |         219 | SET @@SESSION.GTID_NEXT= '545fd699-be48-11e9-8f0a-000c2980e248:1' 

2.5.4 基于gtid截取日志

--include-gtids=
--exclude-gtids=
--skip-gtids=
截取1-3號(hào)事務(wù):

[root@db01 ~]# mysqlbinlog --include-gtids='545fd699-be48-11e9-8f0a-000c2980e248:1-3' /data/binlog/mysql-bin.000009>/data/gtid.sql

截取 1-10 gtid事務(wù),跳過(guò)6號(hào)和8號(hào)事務(wù).

[root@db01 ~]# mysqlbinlog --include-gtids='545fd699-be48-11e9-8f0a-000c2980e248:1-10' --exclude-gtids='545fd699-be48-11e9-8f0a-000c2980e248:6,545fd699-be48-11e9-8f0a-000c2980e248:8'    /data/binlog/mysql-bin.000009>/data/gtid.sql

2.5.5 演練

(1)準(zhǔn)備環(huán)境

mysql> create database gtid1 charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

mysql> use gtid1
Database changed

mysql> create table t1(id int) engine=innodb charset utf8mb4;
Query OK, 0 rows affected (0.00 sec)

插入幾行數(shù)據(jù)

mysql> insert into t1 values(1),(2),(3);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values(11),(12),(13);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   11 |
|   12 |
|   13 |
+------+

(2) 搞破壞

mysql> drop database gtid1;
Query OK, 1 row affected (0.01 sec)

(找起點(diǎn)和終點(diǎn)(gtid))

mysql> show master status;
+------------------+----------+--------------+------------------+--------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                          |
+------------------+----------+--------------+------------------+--------------------------------------------+
| mysql-bin.000015 |     1256 |              |                  | 8d2ed0d5-b75a-11e9-ba1c-000c29222c92:1-108 |
+------------------+----------+--------------+------------------+--------------------------------------------+
1 row in set (0.00 sec)

mysql> show binlog events in 'mysql-bin.000015';

開始截?。?br> 建庫(kù)操作

mysql-bin.000015 |  194 | Gtid           |         6 |         259 | SET @@SESSION.GTID_NEXT= '8d2ed0d5-b75a-11e9-ba1c-000c29222c92:104' |

不能截取刪庫(kù)操作 也就是截取到104-107

| mysql-bin.000015 | 1096 | Gtid           |         6 |        1161 | SET @@SESSION.GTID_NEXT= '8d2ed0d5-b75a-11e9-ba1c-000c29222c92:108' |
| mysql-bin.000015 | 1161 | Query          |         6 |        1256 | drop database gtid1 

(4)截取日志 記得--skip-gtids

mysqlbinlog --skip-gtids --include-gtids='8d2ed0d5-b75a-11e9-ba1c-000c29222c92:104-107'  /data/binlog/mysql-bin.000015>/data/gtid.sql;

(5)恢復(fù)
臨時(shí)關(guān)閉輸出

mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)

恢復(fù)

source  /data/gtid.sql;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| binlog             |
| gtid               |
| gtid1              |
| hh                 |
| mysql              |
| performance_schema |
| school             |
| sys                |
| test               |
| wordpress          |
| wordpress1         |
| world              |
| wp                 |
| xuexiao            |
+--------------------+
15 rows in set (0.00 sec)

mysql> 
mysql> show tables;
+-----------------+
| Tables_in_gtid1 |
+-----------------+
| t1              |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   11 |
|   12 |
|   13 |
+------+
6 rows in set (0.00 sec)

2.6二進(jìn)制日志其他操作

2.6.1 自動(dòng)清理日志

show variables like '%expire%';
expire_logs_days  0  

自動(dòng)清理時(shí)間,是要按照全備周期+1

set global expire_logs_days=8;

永久生效:
my.cnf
expire_logs_days=15;
企業(yè)建議,至少保留兩個(gè)全備周期+1的binlog

2.6.2 手工清理

PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
PURGE BINARY LOGS TO 'mysql-bin.000009';
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000015 |      1303 |
| mysql-bin.000016 |       194 |
+------------------+-----------+
2 rows in set (0.00 sec)

從1開始

mysql> reset master; ###危險(xiǎn)操作
Query OK, 0 rows affected (0.00 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+

1 row in set (0.00 sec)注意:不要手動(dòng) rm binlog文件

  1. my.cnf binlog關(guān)閉掉,啟動(dòng)數(shù)據(jù)庫(kù)
    2.把數(shù)據(jù)庫(kù)關(guān)閉,開啟binlog,啟動(dòng)數(shù)據(jù)庫(kù)
    刪除所有binlog,并從000001開始重新記錄日志
    *reset master; 主從關(guān)系中,主庫(kù)執(zhí)行此操作,主從環(huán)境必崩

2.6.3 binlog的滾動(dòng)機(jī)制

2
flush logs;
重啟數(shù)據(jù)庫(kù)
select @@max_binlog_size;
備份時(shí),某些參數(shù)會(huì)觸發(fā).

3.慢日志(slow-log)

簡(jiǎn)介

記錄運(yùn)行較慢的語(yǔ)句記錄:slowlog
功能是輔助優(yōu)化的工具日志
應(yīng)激性的慢---> show processlist;
一段時(shí)間慢 --->slow記錄,統(tǒng)計(jì)

3.1 配置

oldguo[(none)]>show variables like '%slow%';
oldguo[(none)]>select @@long_query_time;
oldguo[(none)]>show variables like '%not_using_indexes%';
slow_query_log=1 
slow_query_log_file=/data/3306/data/db01-slow.log
long_query_time=0.1
log_queries_not_using_indexes
mysql> select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
|          0.100000 |
+-------------------+
1 row in set (0.00 sec)

3.3 慢語(yǔ)句模擬

set sql_log_bin=0;
source /tmp/t100w.sql; 
set sql_log_bin=1;

mysql> select count(*) from t100w;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.32 sec)

隨便模擬

select * from t100w where k1='aa' limit 10;
select * from t100w where k1!='aa' limit 10;
select * from t100w where k1!='aa' order by dt limit 10;

然后我們可以去cd /data/3306/data/ vim db01-slow.log文件查看記錄的慢語(yǔ)句

分析處理慢語(yǔ)句

mysqldumpslow -s c -t 5  /data/3306/data/db01-slow.log

-s, 是表示按照何種方式排序,c、t、l、r分別是按照記錄次數(shù)、時(shí)間、查詢時(shí)間、返回的記錄數(shù)來(lái)排序,ac、at、al、ar,表示相應(yīng)的倒敘;
-t, 是top n的意思,即為返回前面多少條的數(shù)據(jù);
-g, 后邊可以寫一個(gè)正則匹配模式,大小寫不敏感的;

pt-query-digest工具
https://blog.csdn.net/xiaoweite1/article/details/80299754
分析慢日志,二進(jìn)制日志,錯(cuò)誤日志...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容