1. 程式人生 > >mysql學習總結(二進位制日誌、伺服器變數、事務日誌)

mysql學習總結(二進位制日誌、伺服器變數、事務日誌)

1、mysql的二進位制日誌:

記錄導致資料改變或潛在導致資料帶變的SQL語句;
功能:用於“重放“日誌中的事務
這裡寫圖片描述
Log_name :日誌名
Pos:起始位置
Event_type:事件型別
server_id:伺服器id
End_log_pos:結束位置 (當前事件結束的下一個位置,下一個事務從245開始)
這裡寫圖片描述

檢視mariadb自行管理使用中的 二進位制檔案列表

MariaDB [(none)]> show BINARY LOGS;
MariaDB [(none)]> show MASTER LOGS;

這裡寫圖片描述

檢視正在使用中的二進位制日誌

MariaDB [(none)]> show master status;

檢視指定的二進位制日誌的具體資訊

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

關於更多show命令可以使用show help 檢視
這裡寫圖片描述

二進位制日誌的記錄格式:
基於”語句”記錄:statement
基於“行“記錄:row (基於資料)
混合模式:mixed (讓系統自行判斷基於哪種方式進行)
基於資料記錄可能會造成資料量很大,但資料精準。
舉個栗子:
對於 將全班所有人的年齡加1事務:
基於“語句“:只需記錄“年齡+1“這麼一條語句
基於”行“ :需要記錄所有人年齡加1的最終結果

二進位制檔案的構成:
兩類檔案:
日誌檔案:mysql-bin.檔案字尾名。二進位制格式
索引檔案::mysql-bin.index 。文字格式 (顯示可用的二進位制檔案序列)
這裡寫圖片描述

2、伺服器變數

MariaDB [(none)]> show global variables like '%log%';
sql_log_bin=ON| OFF是否記錄二進位制日誌 
log_bin=ON|OFF
binlog_format=STATEMENT | ROW | MIXED  二進位制日誌記錄的格式max_binlog_size=1073741824  單個二進位制日誌的最大體積,預設為1G
注意:(1)到達最大值會自動回滾 (2)檔案達到上線時的大小未必為指定的精確值 sync_binlog=0|n 預設情況下,並不是每次寫入時立即將binlog的資料同步到磁碟中。而是有作業系統決定什麼時候同步。 設定為n:每進行n次事務提交之後,binlog在每n次binlog寫入後與硬碟同步 設定為1:效能消耗大,但資料安全 設定為0:效能消耗最小,但是風險也是最大

mysqlbinlog:讀取並顯示二進位制日誌 (客戶端工具)

mysqlbinlog [options] log_file
    --srart-position
    --stop-position

     --start-datetime=
     --stop-datetime=
    YYYY-MM-DD hh:mm:ss

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

二進位制日誌格式
這裡寫圖片描述

起始位置:# at 245
事件發生的時間和日期:#180403 11:07:59
事件發生的伺服器標識:server id 1
事件結束的位置:end_log_pos 328
事件型別:Query
事件發生時所在伺服器執行此事件的執行緒ID : thread_id=4
語句的時間戳與將其寫入二進位制日誌的時間差:exec_time=0
錯誤i程式碼: error_code=0
事件內容:create database xixi

事務型儲存引擎:InnoDB
mysql的所有資料都會儲存在資料檔案中
對於資料檔案來說,如果資料修改操作太多,會導致寫入太慢

為了解決磁碟寫入過慢的問題(非固態):
事務日誌:用來記錄資料庫更新情況的檔案,它可以記錄針對資料庫的任何操作,並將記錄的結果儲存到獨立的檔案中。對於每一次資料庫更新的過程,事務日誌檔案都有非常全面的記錄。根據這些記錄可以恢復資料庫更新前的狀態。(百度百科)
建議重新找一塊磁碟儲存事務日誌,這樣可以分散IO
這樣就產生了一個問題:當資料修改操作僅儲存在事務日誌中,並沒有來得及儲存在資料中,這時有客戶過來查詢。查詢若只針對原資料檔案進行查詢的話,那麼新修改的操作就查不到了。
因此innodb引入了這樣一種機制:
buffer pool:在主機記憶體中開闢一個非常大的記憶體空間,將事務日誌中記錄的資料做快取,並將原資料檔案讀進來,合併供使用者查詢。
事務日誌的工作方式:事務日誌是多個檔案一組一起工作的,寫滿了第一個就寫第二個,這時候把第一個同步到磁碟上去,依次迴圈,所以組內至少有兩個檔案

如圖:id_logfile0 和 id_logfile1就是事務日誌檔案,可以用mysqlbinlog檢視
這裡寫圖片描述

插播:什麼是事務回滾:(參考:https://www.cnblogs.com/ld-swust/p/5607983.html)
事務是使用者定義的一個數據庫操作序列,這些操作要麼全做要麼全不做,是一個不可分割的工作單位,事務回滾是指將該事務已經完成的對資料庫的更新操作撤銷,在事務中,每個正確的原子操作都會被順序執行,直到遇到錯誤的原子操作。回滾的意思其實即使如果之前是插入操作的話,那麼會執行刪除之前插入的記錄,如果是修改操作的話,那麼會執行將update之前的記錄還原。
因此,正確的原子操作是真正被執行過的,是物理執行。
事務的特性:
1.原子性,是一個不可分割的邏輯單元,一組sql語句,要麼都執行,要麼都不執行。
  2.隔離性,事務中的執行過程是不可見的。
  3.永續性,事務一旦提交,就不可撤銷。
  4.一致性,事務在發生之前和發生之後,資料是一致。(能量守恆)

相關推薦

mysql學習總結二進位制日誌伺服器變數事務日誌

1、mysql的二進位制日誌: 記錄導致資料改變或潛在導致資料帶變的SQL語句; 功能:用於“重放“日誌中的事務 Log_name :日誌名 Pos:起始位置 Ev

Mysql學習總結61——MySQL優化之DBA級優化整理彙總

資料庫優化的可以從如下幾個方面著手: 1.>sql語句和索引. 2.>資料庫表結構. 3.>系統配置. 4.>硬體 2.使用MySQL的慢查詢日誌對效率有問題的sql進行監控 1.>檢視慢查詢日誌是否開啟:show variabl

Mysql學習總結63——Mysql資料庫架構方案選擇與分析

一、資料庫架構原則 高可用 高效能 一致性 擴充套件性 二、常見的架構方案 方案一:主備架構,只有主庫提供讀寫服務,備庫冗餘作故障轉移用 jdbc:mysql://vip:3306/xxdb 高可用分析:高可用,主庫掛了,keepalive(只是一種工具)會

MySQL學習總結4-表級操作語句

1.建立資料表  語句:create table [if not exists] table_name(         column_name data_type,   &

MySQL學習總結3-庫級操作語句

1.建立資料庫  create {database | schema} [if not exists] db_name [default] character set [=] charset_name; 注:{a|b}  ab中必選一個;[a]  a

MySQL學習總結2-MySQL客戶端相關語句

1.啟動MySQL服務 在命令列輸入net start 服務名 2.停止MySQL服務 在命令列輸入net stop 服務名 也可以在“工作管理員”中啟動與停止MySQL服務 3.登入MySQL 在命令列輸入mysql -uroot

Mysql學習總結64——Mysql配置檔案my.cnf各項引數解讀

#以下選項會被MySQL客戶端應用讀取。注意只有MySQL附帶的客戶端應用程式保證可以讀取這段內容。如果你想你自己的MySQL應用程式獲取這些值。需要在MySQL客戶端庫初始化的時候指定這些選項。 [client] port = 3309 socket = /usr/loca

MySQL學習總結5-行級操作語句

1.插入記錄  insert [into] table_name[(col_name,......)] values(val,......); (1)全部欄位賦值,可省略[(col_name,......)] (2)部分欄位賦值 (3)可一次

Mysql學習總結65——專案實戰中常用SQL實踐總結

(1)負向條件查詢不能使用索引 select  x1, x2 from order where status!=0 and stauts!=1 not in/not exists都不是好習慣 可以優化為in查詢: select x1, x2 from order whe

Mysql學習總結41——MySql資料庫基本語句再體會

1、資料定義語言(DDL):定義和管理資料物件,比如建立資料庫、資料表 資料操作語言(DML):用於操作資料庫物件中的包含的資料。 資料查詢語言(DQL):用於查詢資料庫物件中包含的

Mysql學習總結24——MySQL多表查詢合併結果和內連線查詢

1、使用union和union all合併兩個查詢結果:select 欄位名 from tablename1 union select 欄位名 from tablename2; 注意這個操作必須保證兩張表字段相同,欄位資料型別也相同。另外,使用union的時候會去除重複(相

MySQL學習總結1

  近期打算整理一下MySQL的學習筆記,看的書是《深入淺出MySQL》。 一.資料庫   1.資料庫:指的是能夠高效的儲存以及處理資料的介質。其實也就是說將本來雜亂的資料進行結構化,使得我們能夠進行一系列的快速的查詢等操作的系統。   2.資料庫的分類:

Mysql學習總結10——MySql觸發器使用講解

  觸發器(TRIGGER)是由事件來觸發某個操作。這些事件包括INSERT語句、UPDATE語句和DELETE語句。當資料庫系統執行這些事件時,就會啟用觸發器執行相應的操作。MySQL從5.0.2版本開始支援觸發器。在本文中將講解的內容包括: 觸發器的含義和作用 如何建

Mysql學習總結54——MySQL 叢集常用的幾種高可用架構方案

前言高可用架構對於網際網路服務基本是標配,無論是應用服務還是資料庫服務都需要做到高可用。對於一個系統而言,可能包含很多模組,比如前端應用,快取,資料庫,搜尋,訊息佇列等,每個模組都需要做到高可用,才能保

Docker學習總結39——簡析容器伺服器和虛擬機器的安全性差異

外文翻譯:英文原文 前言 在三十多年前,虛擬化僅適用於擁有大型機和眾多小型計算機的使用者,而安全問題僅僅是物理上的。 二十年前,VMware釋出了其第一款產品,網路邊界安全性仍處於起步階段,依賴於防火牆。 十二年前,AWS推出,網路安全成為一個問題。 五年前,由於Dock

JavaScript學習總結函數聲明和表達式this閉包和引用arguments對象函數間傳遞參數

rem [1] incr foo i++ scrip erro ren 推薦 一、函數聲明和表達式 函數聲明: function test() {}; test(); //運行正常 function test() {}; 函數表達式: var test = fun

JavaSE學習總結——Java語言編程練習格式化字符與常量

數據 nts 編程 () 功能 替換 pri stream 第幾天 目錄 一、變量、常量、字面量 二、銀行利率為5%,問存款100美元5年的收益細節? 三、格式化 3.1、printf格式化輸出 3.2、String.format 3.2.1、日期類型 3.2.2、

Linux學習總結二十九系統日誌

log dmesg last xargs screen 系統日誌記錄了系統每天發生的各種各樣的事情,比如檢測系統狀況,檢測服務的啟動狀況,用戶的登陸情況等。我們可以通過日誌找出某個錯誤發生的原因,或者追蹤到攻擊者留下的蛛絲馬跡。 1 /var/log/messages 它是核心系統日誌文件

Linux 學習總結三十lamp之mysql安裝

lamp mysql 一 lamp架構介紹 lamp 是linux apache mysql php 的縮寫,就是整個一套服務端環境,對於php開發的網站,我們訪問到的頁面或者數據很可能就是這套環境提供的。對於普通網民來說,我們沒有註意我們訪問到的網站內容,其實是分兩大類的,一類是圖片為代表的靜態數據

Linux學習總結三十五lamp之訪問日誌配置

lamp 訪問日誌 靜態元素過期時間 日誌切割 日誌瘦身 一 訪問日誌不記錄靜態文件訪問信息 網站大多元素為靜態文件,如圖片、css、js等,記錄這些訪問信息對我們運維工作沒有多大意義,如果一個站點訪問量很大,那麽一天就可以達到幾GB。影響我們磁盤的工作效率,那麽我們就可以配置虛擬主機限制