mysql日誌文件

MySQL的binlog日誌的做用
- 1:用來記錄mysql內部增刪改查等對MySQL數據有更新內容的記錄。像show和select通常不會記錄
- 2:mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000002 - 
MySQL5.6之後須要用此命令來查看,能夠避免出現亂碼
- 3:mysqlbinlog拆庫,拆除test庫的全部操做,而後進行恢復
mysqlbinlog -d test mysqlbin.000002 > test.sql
- 4:mysqlbinlog mysqlbin000002 --start-position=510 --stop-position=1312 -r pos.sql
輸出初始位置爲510,結束位置爲1312,導出到sql文件
mysqlbinlog

此命令是用來解析mysqlbinlog日誌,mysql-bin.index記錄了全部的binlog文件。mysql

--master-data
若是值等於2,結果以下:
--CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=191;
此行會被註釋掉,咱們要的文件名以及位置點。就是咱們的備份點。

若是值等於1,結果以下:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=191;
表明這條語句是可執行的。用在slave庫上。
錯誤日誌(error log)

記錄MySQL服務進程mysqld在啓動/關閉或運行過程當中遇到的錯誤日誌信息sql

log-error=/var/log/mysqld.log
查詢日誌(query log)

1:普通查詢日誌(general query log):記錄客戶端鏈接信息和執行SQL語句信息,通常不建議開啓,會形成磁盤I/O。函數

show variables like 'general_log%';
general_log
general_log_file

2:慢查詢日誌(slow query log): 記錄執行時間超出指定值(long query time)的sql語句。性能

slow_query_log = ON
log-slow-queries=/var/lib/mysql/slow.log
long_query_time=2
log-queries-not-using-indexes #未使用索引的語句
二進制日誌(binary log)

記錄數據被修改的相關信息優化

log-bin = mysql-bin
log-slave-updates
MySQL清除錯誤的鏈接
mysql> FLUSH HOSTS;
Query OK, 0 rows affected (0.00 sec)
binlog的三種模式

1:statement level日誌

每一條會修改數據的sql都會記錄到master的bin-log中。slave在複製的的時候sql進程會解析成原來master端執行過的相同的sql來再次執行。code

優勢:解決row level下的缺點,不須要記錄每一行數據的變化。減小binlog日誌量,節約I/0提升性能。記錄Master上所執行的語句細節,以及執行語句時候的上下文信息。orm

缺點:bug比較多,會形成mysql複製出現問題,如在存儲過程當中使用last_insert_id()函數,會使slave和master上獲得不一致的ID等等。索引

2:Row Level進程

日誌中會記錄每一行數據被修改的形式,而後在slave端再對相同的數據進行修改。

優勢:binlog中能夠不記錄執行的sql語句的上下文相關信息,僅僅只須要記錄哪一條記錄被修改了,修改爲什麼樣了。會清楚的記錄下每一行數據修改的細節。不會出現某些特定狀況下的存儲過程、或function,以及trigger的調用和觸發沒法被正確複製的問題。

缺點:binlog日誌量會很大。尤爲是alter table之類的表結構變動語句,實際上會致使重建整個表。

3:Mixed Level

其實是前兩種模式的結合。在mixed模式下,MySQL會根據執行的每一條具體的sql語句來區分對待記錄的日誌形式,在statement 和 row 之間選擇一種。新版本中的statment level 仍是和之前同樣,僅僅記錄執行的語句。而新版本的MySQL中對row level模式也作了優化,並非全部的修改都會以row level來記錄,像遇到表結構變動的時候就會以statement 模式來記錄,若是sql 語句確實就是update或者delete等修改數據的語句,那麼仍是會記錄全部行的變動。

默認是行模式
mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.00 sec)

相關文章
相關標籤/搜索