mysql 的日誌(binlog日誌 和慢日誌)

一、查看mysql數據所佔的大小

select table_name,data_length,index_length,(data_length+index_length) as length,table_rows,concat(round((data_length+index_length)/1024/1024/1024,3),'GB') as totalSize FROM information_schema.tables
WHERE table_schema = 'pt_query'
ORDER BY length DESC;

二、二進制文件(binlog日誌)

1、介紹
二進制日誌也叫作變更日誌,主要用於記錄修改數據或有可能引起數據改變的mysql語句,並且記錄了語句發生時間、執行時長、操作的數據等等。所以說通過二進制日誌可以查詢mysql數據庫中進行了哪些變化。一般大小體積上限爲1G。

a、DDL

----Data Definition Language 數據庫定義語言

主要的命令有create、alter、drop等,ddl主要是用在定義或改變表(table)的結構,數據類型,表之間的連接和約束等初始工作上,他們大多在建表時候使用。

b、DML

----Data Manipulation Language 數據操縱語言

主要命令是slect,update,insert,delete,就像它的名字一樣,這4條命令是用來對數據庫裏的數據進行操作的語言

2、binlog日誌文件的配置

查看binlog日誌的信息:

show global variables like "%log_bin%";

未開啓binlog日誌

+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |  用於控制會話級別二進制日誌功能的開啓或關閉
| log_bin_basename                |       | 二進制日誌文件(文件名後綴爲.00000*)記錄數據庫所有的DDL和DML(除了數據查詢語句select)語句事件。
| log_bin_index                   |       |二進制日誌索引文件(文件名後綴爲.index)用於記錄所有的二進制文件。
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
+---------------------------------+-------+

如果要開啓binlog日誌可以在my.cnf文件中添加(一般在/etc 目錄下,加完之後需重啓mysql)

#指定二進制日誌生成的路徑
log-bin=/data/mysql/mysql-bin
#開啓binlog日誌
server-id=1
#指定二進制日誌的類型,默認爲MIXED,加入此參數才能記錄到insert語句
binlog_format=MIXED

加完開啓binlog日誌之後
在這裏插入圖片描述

3、查看binlog文件

#查看所有binlog日誌列表
show master logs;
#查看master狀態,即最後(最新)一個binlog日誌的編號名稱,
#及其最後一個操作事件pos結束點(Position)值。
show master status;

在這裏插入圖片描述

在mysql執行一條更改語句
在這裏插入圖片描述
去mysql 的bin目錄下,查看對應執行語句

./mysqlbinlog /data/mysql/mysql-bin.000001

在這裏插入圖片描述
更推薦

show binlog events in 'mysql-bin.000001';
show binlog events in 'mysql-bin.000001' from 6599 limit 5;

在這裏插入圖片描述

show binlog events in 'mysql-bin.000003'/G;

在這裏插入圖片描述

4、flush 刷新log日誌,自此刻開始產生一個新編號的binlog日誌文件;
 flush logs;
注意:每當mysqld服務重啓時,會自動執行此命令,刷新binlog日誌;在mysqlddump備份數據時加-F選項也會刷新binlog日誌;

5、重置(清空)所有binlog日誌
reset master;

6、通過binlog恢復其數據

思路:
mysql數據的恢復需要依賴與在之前備份的數據,通過備份數據,執行相同的操作來進行恢復數據。無法根據現有數據,反推得到誤刪數據。

演示:

a、展示現有數據(測試數據庫爲data_recover)
在這裏插入圖片描述

在這裏插入圖片描述

b、在此基礎上進行數據備份

./mysqldump -uroot -proot -B data_recover -F -R -x --master-data=2 |gzip >/tmp/data_recover_$(date +%F).sql.gz

命令的語法格式:
mysqldump [OPTIONS] database [tables]:備份單個庫,或庫指定的一個或多個表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3…]:備份一個或多個庫
mysqldump [OPTIONS] --all-databases [OPTIONS]:備份所有庫

-A, --all-databases 備份所有表

-x, --lock-all-tables:鎖定所有表

-l, --lock-tables:鎖定備份的表

–single-transaction:啓動一個大的單一事務實現備份

-B, --databases db_name1 db_name2 …:備份指定的數據庫

-C, --compress:壓縮傳輸;

-E, --events:備份指定庫的事件調度器;
-R, --routines:備份存儲過程和存儲函數;
–master-data[=#]:
1:記錄CHANGE MASTER TO語句;此語句未被註釋;
2:記錄爲註釋語句;

–flush-logs, -F:鎖定表之後執行flush logs命令;(這個需要注意,這個時候binlog日誌更新一個新的一份)

在這裏插入圖片描述

c、在此基礎上進行增刪查改
在這裏插入圖片描述

進行增刪查改之後的數據爲:
在這裏插入圖片描述
我們利用之前備份數據,恢復到目前數據(假設delete from tb_areas where id=2; 爲誤操作)

d、對新的binlog日誌進行備份,防止新的數據產生影響
在這裏插入圖片描述
e、對之前的備份的壓縮文件進行解壓

gzip -d /tmp/data_recover_2019-10-11.sql.gz

f、恢復到備份時候的情況(如果真實環境可以修改數據庫名字,等數據完全恢復正常在切換新的數據庫)

./mysql -uroot -S /tmp/mysql.sock -proot </tmp/data_recover_2019-10-11.sql

可以看到數據已經恢復爲備份時候的數據了
在這裏插入圖片描述

g、恢復數據

show binlog events in 'mysql-bin.000003'/G;

可以在這裏插入圖片描述

可以看到我們想要恢復的數據,但不想要刪除那個語句。(恢復時候不執行 1371~1523)

./mysqlbinlog  --stop-position=1276 --database=data_recover /data/mysql/mysql-bin.000003 | ./mysql -uroot -proot -S /tmp/mysql.sock  -v
./mysqlbinlog --start-position=1523 --database=data_recover /data/mysql/mysql-bin.000003 | ./mysql -uroot -proot -S /tmp/mysql.sock  -v

可以看到數據已經恢復正常
在這裏插入圖片描述

三、慢查詢日誌

show global variables like '%log%';
| slow_query_log                             | ON                                          | 查詢日誌的開關
| slow_query_log_file                        | /data/mysql/query-slow.log                  | 慢查詢日誌的路徑

如果查詢日誌並沒有打開需要添加

#日誌查詢超過兩秒記錄
long_query_time=2
#開啓慢查詢
slow_query_log=1
#慢查詢文件目錄
slow_query_log_file=/data/mysql/query-slow.log
#記錄未使用索引的sql
#log_queries_not_using_indexes=1

如果使用慢查詢,有個關於慢查詢的工具 t-query-digest
這裏將其使用方法貼出來來參考
http://xiaohost.com/1250.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章