mysql 二进制日志变化_mysql-二进制日志
mysql---二進制日志
記錄了所有對MySQL數據庫的修改事件,包括增刪改查事件和對表結構的修改事件
二進制日志的開啟
#是否啟用了日志
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
[mysqld]
log-bin [=DIR \ [filename]]
log_bin=mysql-bin 名字可以隨便起(mysql-bin)
格式
binlog_format={STATEMENT|ROW|MIXED}
語句(statement):默認的記錄格式,基于段
行(row):定義的并非數據本身而是這一行的數據是什么
混合模式(mixed):交替使用行和語句、由mysql服務器自行判斷
基于段的日志格式
優點
日志記錄量相對較小,節約磁盤及網絡IO
只對一條記錄修改或者插入,row格式所產生的日志量小于段產生的日志量
缺點
必須要記錄上下文信息,保證語句在從服務器上執行結果與主服務器相同
特定函數如UUID(),user()這樣非確定性函數還是無法復制;可能造成MySQL復制的主備服務器數據不一致
操作
mysql> show variables like 'binlog_format';
mysql> set session binlog_format=statement;
mysql> show binary logs;
mysql> flush logs;
行日志格式
5.7版本的默認格式
Row格式可以避免Mysql復制中出現的主從不一致問題
同一SQL語句修改了10000條數據的情況下
基于段的日志格式只會記錄這個SQL語句
基于行的日志會有10000條記錄分別記錄每一行的數據修改
優點
使MySQL主從復制更加安全
對每一行數據的修改比基于段的復制高效
誤操作而修改了數據庫中的數據,同時又沒有備份可以恢復時,我們就可以通過分析二進制日志,對日志中記錄的數據修改操作做反向處理的方式來達到恢復數據的目的
缺點
記錄日志量較大;binlog_row_image=[FULL|MINIMAL|NOBLOB]
混合日志格式
binlog_format=MIXED
特點
根據SQL語句由系統決定基于段和基于行的日志格式中進行選擇
數據量的大小由所執行的SQL語句決定
二進制日志格式對復制的影響
基于SQL語句(statement)復制(SBR)
優點
生成的日志量少,節約網絡傳輸IO
并不強制要求主從數據庫的表定義完全相同
相比于基于行的復制方式更為靈活
缺點
對于非確定性事件,無法保證主從復制數據的一致性
對于存儲過程,觸發器,自定義函數進行的修改也可能造成數據不一致
相比于基于行的復制方式在從上執行時需要更多的行鎖
基于行的復制(PBR)
優點
可以應用于任何SQL的復制包括非確定函數,存儲過程等
可以減少數據庫鎖的使用
對主從數據的一致性更加有保證
缺點
要求主從數據庫的表結構相同,否則可能會中斷復制
無法在從上單獨執行觸發器
查看二進制日志
數據庫會話查看
#顯示當前服務器使用的二進制文件及大小
mysql> show binary logs
#顯示主服務器使用的二進制文件及大小
mysql> show master logs;
#當前使用的二進制文件及所處位置
mysql> show master status
#lush logs一般只會滾動中繼日志和二進制日志
mysql> flush logs;
#二進制日志的記錄位置,通常為上一個事件執行結束時間的位置
mysql> showmaster status;
#...數據庫的增刪改查
#觀察二進制位置的變化
mysql> show master status;
#查看所有的二進制信息
mysql> show binlog events\G;
#查看指定日志的二進制信息
mysql> show binlog events in 'mysql-bin.000011';
#從指定的事件位置開始
mysql> show binlog events in 'mysql-bin.000011' from 190;
#指定偏移量(不是語句,是事件)
mysql> showbinlog events in 'mysql-bin.000011' from 190 limit 3;
命令行mysqlbinlog
#必須在數據目錄下
mysqlbinlog mysql-bin.000017
#導出此數據庫的信息
mysqlbinlog mysql-bin.000017 > /tmp/a.sql
#導入此數據庫的信息
mysql < a.sql
mysqlbinlog -vv 日志名
二進制日志刪除
長時間不清理會浪費很多的磁盤空間,但是刪除后可能導致數據庫崩潰無法進行恢復.
若要刪除二進制日志首先將其和數據庫備份一份
#刪除所有的二進制日志(不可效仿)
mysql> reset master;
#根據文件或時間點來刪除二進制日志
# TO 'log_name' 刪除文件之前的所有文件
mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }
#使用時間來刪除二進制日志
mysql> PURGEBINARY LOGS BEFORE '13-10-19 10:26:36';
總結
以上是生活随笔為你收集整理的mysql 二进制日志变化_mysql-二进制日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “天人阴骘间”下一句是什么
- 下一篇: pandas内置数据集_pandas内置