日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql-二进制日志

發布時間:2025/3/21 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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';

    轉載于:https://www.cnblogs.com/sxchengchen/p/7857018.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的mysql-二进制日志的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。