MySQL日誌功能詳解(2)


二進制日誌:(多個線程會爭用,可以首先寫到緩衝區中)

    記錄了當前服務器的數據修改和有潛在可能性影響數據修改的語句

    默認在數據目錄下,通常情況下爲mysql-bin

    [root@redhat7 data]# file mysql-bin.000001 
    mysql-bin.000001: MySQL replication log  複製日誌


可以通過mysqlbinlog命令來查看

時間記錄 time

偏移位置 position

    

wKiom1hbVoajfNDGAACYEEjh4nI581.png-wh_50


MySQL > show master status 顯示主服務器狀態
查看當前使用的二進制日誌和下一個事件開始時的基於的位置

MySQL [(none)]> show master status;	
    +------------------+----------+--------------+------------------+
	| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
	+------------------+----------+--------------+------------------+
	| mysql-bin.000003 |      107 |              |                  |
	+------------------+----------+--------------+------------------+
	1 row in set (0.00 sec)



日誌滾動:

    1、可以按照大小定義

    2、可以按照時間定義

    3、重啓mysql服務器

    4、執行flush logs(手動滾動)


wKiom1hbY2fCmsTiAABCmBOMV-s281.png-wh_50       

 


查看當前正在使用的二進制日誌

MariaDB [(none)]> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |      1043 |
| mysql-bin.000002 |       245 |
| ...............3 |       245 |
+------------------+-----------+
2 rows in set (0.00 sec)


二進制日誌的功用

    即時點(時間點)恢復:

    複製:


[root@redhat7 data]# file mysql-bin.index 
mysql-bin.index: ASCII text
[root@redhat7 data]# cat mysql-bin.index
./mysql-bin.000001
./mysql-bin.000002
./mysql-bin.000003
./mysql-bin.000004



清除二進制日誌

Mysql > help purge
PURGE { BINARY | MASTER } LOGS
    { TO 'log_name' | BEFORE datetime_expr(某個時間之前) }


查看MySQL的二進制日誌

mysql > help SHOW BINLOG EVENTS;
mysql > SHOW BINLOG EVENTS;
MariaDB [(none)]> show binlog events\G
*************************** 1. row ***************************
   Log_name: mysql-bin.000001
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 245
       Info: Server ver: 5.5.36-MariaDB-log, Binlog ver: 4


service-id:服務器身份標識

(避免重複執行mysql二進制日誌中'修改'類的語句)




MySQL 記錄二進制日誌的格式

MariaDB [(none)]> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

  

   基於語句:statement

   基於行(數據):row

   update tb1 set salary=salary+1000; --> 數據量很大 

   混合模式:mixed



指定從那個位置開始讀取

MariaDB [(none)]> show binlog events in 'mysql-bin.000001' from 591\G 

也可以使用

[root@redhat7 data]# mysqlbinlog --start-position=24223 mysql-bin.000001



mysqlbinlog命令(客戶端命令)

   --start-time
   --stop-time
   --start-position
   --stop-position



二進制日誌文件內容格式

  事件發生的日期和時間

  服務器ID

  事件結束位置

  事件的類型

  原服務器生成此事件時的線程ID號  MySQL [(none)]> show processlist;

  語句時間戳和寫入二進制文件的時間差,單位爲秒

  錯誤代碼,0表示正常執行

  事件內容

  事件位置(相當於下一事件的開始位置)

  

MySQL [(none)]> show global variables like '%log%';
  +-------------------------------------------------------------------------------+
  | log_bin = {ON|OFF};還可以是一個文件路徑                          			  |
  | log_bin_trust_function_creators  是否阻止任何存儲函數                         |
  | sql_log_bin = {ON|OFF} 當前會話是否將二進制文件錄入進二進制文件				  |
  | sql_log_off 是否將一般查詢日誌記入查詢日誌									  |
  | sync_binlog 同步緩衝中的二進制到硬盤的時間,0不基於時間同步,只在事件提交時同步 |
  | binlog_format = {|statement|row|mixed}										  |								
  | max_binlog_cache_size  mysql二進制日誌的緩衝區大小,僅用於緩存事務類的語句     |
  | max_binlog_stmt_cache_size 語句緩衝區大小,即事務類和非事務類公用的大小        |
  | max_binlog_size 二進制日誌文件的上限,單位爲字節  (超過上限會滾動)             |                |
  +-------------------------------------------------------------------------------+

建議:切勿將二進制日誌與數據文件放在同一設備



事先做好規劃

[root@redhat7 data]# mkdir /mysql/binlog
[root@redhat7 data]# vim /etc/my.cnf
log-bin=/mysql/binlog/master-bin
[root@redhat7 data]# chown -R mysql:mysql /mysql/binlog/

重啓mysqld 服務器

[root@redhat7 data]# cd /mysql/binlog/
[root@redhat7 binlog]# ls
master-bin.000001  master-bin.index


可以臨時通過sql_log_bin來控制二進制的寫入


wKiom1hbY7Hx1fXmAABZitaGvjc480.png-wh_50


wKioL1hbY7GgSo_rAABdAH63bS4908.png-wh_50



中繼日誌:(跟主從複製相關)

  對於非從服務器,中繼日誌沒有啓用

  relay_log  指明一個文件路徑                                       

  relay_log_index 

  relay_log_purge = {ON|OFF} 是否自動清理不在需要的中繼日誌

  relay_log_space_limit 中繼大小是否限制




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