MySQL- InnoDB之二進位日誌

2021-03-02 技宅之家

2.1 GTID介紹

對於binlog中的每一個事務,都會生成一個GTID號碼

DDL ,DCL 一個event就是一個事務,就會有一個GTID號.

DML語句來講,begin到commit,是一個事務,就是一個GTID號

2.2 GTID的組成

severi_uuid:TID

severi_uuid? 

[root@db01 data]# cat auto.cnf 

[auto]

server-uuid=d60b549f-9e10-11e9-ab04-000c294a1b3b

TID是一個:自增長的數據,從1開始

d60b549f-9e10-11e9-ab04-000c294a1b3b:1-15

2.3 GTID的冪等性

如果拿有GTID的日誌去恢復時,檢查當前系統中是否有相同GTID號,有相同的就自動跳過

會影響到binlog恢復和主從複製.

2.4 GTID的開啟和配置

vim /etc/my.cnf

gtid-mode=on

enforce-gtid-consistency=true

2.5 查看GTID信息

mysql> create database gtid charset utf8mb4;

mysql> show master status;

mysql> use gtid;

mysql> create table t1(id int);

mysql> show master status;

mysql> insert into t1 values(1);

mysql> commit;

mysql> show master status;

mysql> drop database gtid;

2.6 基於GTID,binlog恢復

(1) 截取日誌

[root@db01 data]# cd /data/binlog/

[root@db01 binlog]# mysqlbinlog --include-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:1-3' mysql-bin.000005 >/tmp/gtid.sql

(2)恢復 

mysql> set sql_log_bin=0;

mysql> source /tmp/gtid.sql

mysql> set sql_log_bin=1;

(3) 報錯

ERROR 1049 (42000): Unknown database 'gtid'

Query OK, 0 rows affected (0.00 sec)

ERROR 1046 (3D000): No database selected

為什麼報錯?

因為冪等性的檢查,1-3事務已經做過了.

(4)正確的做法?

mysqlbinlog --skip-gtids --include-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:1-3' mysql-bin.000005 >/tmp/gtid.sql

--skip-gtids 作用:在導出時,忽略原有的gtid信息,恢復時生成最新的gtid信息

(5) 恢復

set sql_log_bin=0;

source /tmp/gtid.sql

set sql_log_bin=1;

2.7 GTID相關的參數

--skip-gtids 

--include-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:6','d60b549f-9e10-11e9-ab04-000c294a1b3b:8'

--exclude-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:6','d60b549f-9e10-11e9-ab04-000c294a1b3b:8'

相關焦點

  • MySQL 日誌(redo log 和 undo log) 都是什麼鬼?
    undo log一般是邏輯日誌,根據每行記錄進行記錄。1.redo log1.1 redo log和二進位日誌的區別redo log不是二進位日誌。雖然二進位日誌中也記錄了innodb表的很多操作,也能實現重做的功能,但是它們之間有很大區別。
  • 必須了解的MySQL三大日誌:binlog、redo log和undo log
    日誌是mysql資料庫的重要組成部分,記錄著資料庫運行期間各種狀態信息。mysql日誌主要包括錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位日誌幾大類。作為開發,我們重點需要關注的是二進位日誌(binlog)和事務日誌(包括redo log和undo log),本文接下來會詳細介紹這三種日誌。
  • 必須了解的mysql三大日誌-binlog、redo log和undo log
    日誌是 mysql 資料庫的重要組成部分,記錄著資料庫運行期間各種狀態信息。mysql日誌主要包括錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位日誌幾大類。作為開發,我們重點需要關注的是二進位日誌( binlog )和事務日誌(包括redo log 和 undo log ),本文接下來會詳細介紹這三種日誌。
  • Mysql innodb 存儲引擎的性能優化
    如果你沒有設置和使用二進位log(用作複製和恢復的),那可以禁止這個間隙鎖。18.6. 在MySQL5.1中,如果你使用行級複製就可以安全的進行修改。19. Count(*)的事實和傳說19.1. InnoDB不能很好的控制count(*)的查詢–這個只是傳聞。在所有引擎中大部分count(*)查詢都用相同的方式進行查詢。
  • MySQL InnoDB存儲引擎啟動過程源碼分析
    InnoDB相關參數的檢查和初始化,包括共享表空間、臨時表空間、undo表空間、redo日誌文件、double write文件等等。調用 innobase_start_or_create_for_mysql 函數,這個函數非常重要,後面詳細分析這個函數。
  • MySQL如何計算統計redo log大小
    在MySQL中如何計算、統計重做日誌(redo log)的生成情況呢? 例如10分鐘內,生成了多少M的redo log呢?30分鐘內又生成了多少M的redo log.....。MySQL沒有像Oracle中那樣的系統視圖統計這些數據,但是我們可以通過一些方法曲線的統計二進位日誌的生成量。
  • PHP資料庫編程之MySQL優化策略概述
    3、記錄下日誌後,我們用/bin/目錄下的mysqldumpslow filename來查看日誌,其常用參數如下:-g pattern 使用正則表達式-t n返回前n條數據-s c/t/l/r 以記錄次數/時間/查詢時間/返回記錄數來排序EXPLAIN語句使用方法,在要執行的查詢語句前面加EXPLAIN
  • InnoDB加鎖實驗
    https://dev.mysql.com/doc/refman/5.6/en/innodb-enabling-monitors.htmlhttps://www.percona.com/doc/percona-server/5.5/diagnostics/innodb_show_status.htmlIV.
  • MySQL - binlog日誌簡介及設置
    前言mysql-binlog是MySQL資料庫的二進位日誌,用於記錄用戶對資料庫操作的SQL語句((除了數據查詢語句)信息。可以使用mysqlbin命令查看二進位日誌的內容。缺點:會產生大量的日誌,尤其是alter table的時候會讓日誌暴漲。
  • 【用binlog日誌】恢復 MySQL 資料庫刪除數據
    來源:效率源科技binlog 就是binary log
  • 【140期】MySQL中的redolog,undolog,以及binlog的區別及各自作用是什麼?
    MySQL中有六種日誌文件,分別是:重做日誌(redo log)、回滾日誌(undo log)、二進位日誌(binlog)、錯誤日誌(errorlog)、慢查詢日誌(slow query log)、一般查詢日誌(general log),中繼日誌(relay
  • 淺析 MySQL Replication
    複製有哪些用途複製是如何工作的從上圖中可以看到,複製的主要步驟:master 將改變記錄到二進位日誌 binary log 中slave 上的IO線程將主庫上的日誌複製到自己的 relay log 中slave 上SQL線程回放中繼日誌的內容
  • MySQL 5.7基於GTID及多線程主從複製
    在原來基於二進位日誌的複製中,從庫需要告知主庫要從哪個偏移量進行增量同步,如果指定錯誤會造成數據的遺漏,從而造成數據的不一致。藉助GTID,在發生主備切換的情況下,MySQL的其它從庫可以自動在新主庫上找到正確的複製位置,這大大簡化了複雜複製拓撲下集群的維護,也減少了人為設置複製位置發生誤操作的風險。另外,基於GTID的複製可以忽略已經執行過的事務,減少了數據發生不一致的風險。
  • 解析XtraBackup備份MySQL的原理和過程
    以上的操作是由xtrabackup二進位程序(比如xtrabackup_55)完成的,如果使用innobackupex 腳本,剛才的步驟完成以後,innobackupex就會去備份MyISAM表和.frm文件,這時要保證數據的一致性就會先鎖表了,通過FLUSH TABLES WITH READ LOCK命令鎖表然後把文件複製出來,再釋放掉這個鎖。
  • MySQL innochecksum 工具
    innochecksum只能用來離線校驗innodb文件,如果文件已經被mysql server打開,則會報錯,報錯信息通常如下:Error: Unable to lock file::/data/mysql/data_5.7.19/ibdata1fcntl: Resource temporarily unavailableinnochecksum
  • MySQL InnoDB Cluster環境搭建和簡單測試
    然後我們開啟安裝之旅。Please provide the password for 'root@localhost:3320': Adding instance to the cluster ...加入埠為3330的節點,日誌和節點2相似。mysql-js> cluster.addInstance('root@localhost:3330')這個時候Cluster就創建好了。
  • MySQL中InnoDB-Cluster 日常運維掃盲-愛可生
    本篇是《innodb-cluster 掃盲-安裝篇》的續篇。 我們知道,InnoDB Cluster 是 Oralce 官方發布的用來管理 MySQL 組複製的一套工具,有了 InnoDB Cluster,MySQL 原生組複製的部署、運維、開發等將會變得非常簡單。
  • MySQL 引擎特性:InnoDB IO 子系統
    innodb_flush_method這個參數比較重要,重點介紹一下:如果innodb_flush_method設置了O_DSYNC,日誌文件(ib_logfileXXX)使用O_SYNC打開,因此寫完數據不需要調用函數fsync刷盤,數據文件(ibd)使用default模式打開,因此寫完數據需要調用fsync刷盤。
  • 面試被問MySQL 主從複製,怎麼破?
    本次測試使用兩個虛擬機:ip:192.168.2.21(主) ip:192.168.2.22(從)二、主從複製原理同步操作通過 3 個線程實現,其基本步驟如下:主伺服器將數據的更新記錄到二進位日誌中(記錄被稱作二進位日誌事件)-- 主庫線程;從庫將主庫的二進位日誌複製到本地的中繼日誌(relay
  • MySQL 實戰筆記 第04期:alter table 語句進度評估
    stage/innodb/alter table (merge sort):對 ALTER TABLE  操作添加的每個索引重複此階段。stage/innodb/alter table (insert):對 ALTER TABLE  操作添加的每個索引重複此階段。