1. 程式人生 > >MYSQL數據庫-物理文件

MYSQL數據庫-物理文件

mysql 日誌文件


物理文件組成


日誌文件:錯誤日誌,查詢日誌,慢查詢日誌,事務日誌,二進制日誌

日誌是 mysql 數據庫的覺要組成部分。日誌文件中記錄珩 mysql 數據庫運行期間發生的變化,也就是說用來記錄 mysql 數據庫的客戶端連接狀況、 SQL 語句的執行情況和錯誤信息


1.錯誤日誌(error log)


錯誤日誌功能默認是開啟的,存儲在mysql數據庫的數據目錄中。

錯誤日誌文件通常名稱為hostname.err hostname表示服務器主機名

錯誤日誌信息也可以自己進行配置,通過log-error和log-warnings,前者是定義存儲位置後者是定義是否將警告信息也定義到錯誤日誌中

註意,當首次安裝mysql5.7時初始密碼會保存在錯誤日誌中


2.二進制文件(binlog)


用於記錄修改數據或有可能引起數據改變的mysql語句,井且記錄語句發生時間執行時長,操作的數據等

可以通過 show global variables like ‘%log_bin%‘; 進行查詢

在主配置文件中加入 log-bin=file_name 打開記錄功能,

MYSQL會將所有修改數據庫數據的query以二進制形式記錄到日誌文件中,日誌文件中還包括每一條query所執行的時間,所消耗的資源,以及相關的事務信息


binlog的附加選項參數


“max_binlog_size” 設置binlog的最大存儲上限,一般設置為512M或1G,不可以超過1G當日誌達到上限時mysql會重新創建一個日誌並繼續開始記錄


“binlog-do-db=db_name” 對某個db_name(數據庫)記錄binlog,

如果有了"binlog-do -db=db_name"參數的顯式指定,MySQL會忽略針對其他數據庫執行的query, 而僅僅記錄針對指定數據庫執行的query


"binlog-ignore-db=db_name"與"binlog-do-db=db_name"完全相反,它顯式指定忽略某個(db_name)數據庫的binlog記錄, 當指定了這個參數之後, MySQL會記錄指定數據庫以外所有的數據庫的binlog。


啟動binlog記錄後,mysql數據庫目錄下還會生成一個mysql-bin.index文件

主要功能是記錄所有Binary Log 的絕對路徑, 保證MySQL各種線程能夠順利的根據它找到所有需要的Binary Log文件


MYSQL復制主要有三種方式:

基於SQL語句的復制(statement-based replication, SBR),

基於行的復制(row-based replication, RBR),

混合模式復制(mixed-based replication, MBR)

對應的,binlog的格式也有三種: STATEMENT, ROW, MIXED。


statenment模式(SBR)

每一條會修改數據的sql語句會記錄到binlog中,優點是不需要記錄每一行的數據變化

減少了binlog日誌量,節約IO,提高性能,缺點是在某些情況下master-slave中的數據不一致

row模式(RBR)

不記錄每條SQL語句的信息,僅記錄那條數據被修改了,改成什麽樣子,缺點是會產生大量日誌,日誌暴漲

mixed模式(MBR)

混合模式,以上兩種模式混合使用,一般的復制使用statement模式保存binlog,對於statement模式無法復制的操作使用row模式保存binlog,mysql會自行判斷何時使用


“sync_binlog=10” 設定多久同步一次二進制日誌到磁盤文件中 0表示不同步,1表示每條語句都同步


幾種查詢二進制日誌信息的方法

show binlog events\G; 查看所有二進制信息

show bin log events in‘mysql-bin.000001‘\G; 查看指定的二進制信息

show binlog events in ‘mysql-bin.000001‘from 727; 從指定的事件位置開始

mysqlbinlog mysql-bin.00001 在命令行下查看

幾種刪除二進制日誌信息的方法

purge binary logs to ‘mysql-bin.000006‘; 刪除‘mysql-bin.000006‘之前的二進制文件

reset master 刪除所有二進制文件並重新生成一個為進制文件



3.事務日誌

事務日誌 (InnoDB 特有的日誌)可以幫助提高事務的效率。

使用事務日誌, 存儲引擎在修改表的數據時只需要修改其內存拷貝,再把修改行為記錄到持久在硬盤上的事務日誌中,而不用每次都將修改的數據本身持久到磁盤。事務日誌采用追加的方式,因此寫日誌的操作是磁盤上一小塊區域內的順序I/O, 而不像隨機I/O需要在磁盤的多個地方移動磁頭, 所以采用事務日誌的方式相對來說要快得多。

事務日誌持久以後,內存中被修改的數據在後臺可以慢慢的刷回到磁盤。


4.慢查詢日誌

慢查詢日誌中記錄的是執行時間較長的query,采用簡單的文本格式記錄方便查看

通過慢查詢日誌,可以查找出哪些查詢語句的執行效率很低,以便進行優化

同樣也是在主配置中加入

“slow_query_log=1”開啟,

“slow_query_log_file=/usr/local/mysql/data/mysqld-slow.log”存儲位置

"long_query_time=1" 需要記錄的時間,

或者直接在數據庫中直接定義。


分析日誌

進入慢查詢日誌存放目錄使用mysqldumpslow分析

“mysqldumpslow mysqld-slow.log”


本文出自 “JianYu” 博客,請務必保留此出處http://jianyu97.blog.51cto.com/12222102/1983293

MYSQL數據庫-物理文件