自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

掌握 MySQL 數(shù)據(jù)復(fù)制:從 Binlog 到主從同步的最佳實(shí)踐

數(shù)據(jù)庫 MySQL
MySQL 的 binlog 和主從同步技術(shù)為我們提供了強(qiáng)大的數(shù)據(jù)復(fù)制和恢復(fù)能力,是構(gòu)建高可用數(shù)據(jù)庫架構(gòu)的基石。在日常使用中,掌握這些技術(shù)不僅能幫助我們實(shí)現(xiàn)高效的數(shù)據(jù)同步,還能為系統(tǒng)的擴(kuò)展性和容錯(cuò)能力提供保障。?

1. 前言

在現(xiàn)代分布式數(shù)據(jù)庫架構(gòu)中,數(shù)據(jù)的高可用性和一致性是至關(guān)重要的。MySQL 作為最流行的關(guān)系型數(shù)據(jù)庫之一,提供了多種機(jī)制來確保數(shù)據(jù)的高可用性和容錯(cuò)性。其中,binlog(二進(jìn)制日志)和主從復(fù)制是實(shí)現(xiàn)高可用性和災(zāi)難恢復(fù)的重要技術(shù)。

在本篇文章中,我們將深入探討 MySQL binlog 的原理、配置以及如何通過 binlog 實(shí)現(xiàn)主從同步。無論你是 MySQL 新手,還是希望進(jìn)一步了解數(shù)據(jù)庫高可用性的開發(fā)人員,都可以從本文中獲得寶貴的實(shí)踐經(jīng)驗(yàn)和理論知識(shí)。

2. Binlog

Binlog(Binary Log,二進(jìn)制日志) 是 MySQL 用來記錄所有數(shù)據(jù)庫修改操作的日志文件,是Mysql server層去記錄,所以,不管是什么存儲(chǔ)引擎進(jìn)行的數(shù)據(jù)存儲(chǔ),如果BinLog開啟,都會(huì)進(jìn)行記錄。

Binlog用途

  1. 數(shù)據(jù)同步與主從復(fù)制:

在 MySQL 主從復(fù)制架構(gòu)中,主服務(wù)器將所有的數(shù)據(jù)庫變更操作記錄到 binlog 中,從服務(wù)器會(huì)讀取主服務(wù)器的 binlog 文件并將其應(yīng)用到本地?cái)?shù)據(jù)庫,從而實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)同步。

binlog 是主從復(fù)制的核心,通過它,MySQL 可以確保從服務(wù)器與主服務(wù)器保持?jǐn)?shù)據(jù)一致性。

  1. 數(shù)據(jù)恢復(fù):
  • binlog 提供了基于時(shí)間點(diǎn)的數(shù)據(jù)恢復(fù)功能。當(dāng)發(fā)生數(shù)據(jù)庫崩潰或誤操作時(shí),管理員可以從最后的備份恢復(fù)數(shù)據(jù),并通過 replay binlog 文件將其恢復(fù)到最新狀態(tài)。
  • 這種方式比傳統(tǒng)的全備份方式更高效,可以更精確地恢復(fù)到某個(gè)特定時(shí)刻的數(shù)據(jù)。

Binlog配置

查詢Binlog配置命令

show variables like '%log_bin%';
show variables like '%binlog%';

比較重要的配置含義

log_bin -- 默認(rèn)on 開啟 可以對(duì)binlog進(jìn)行關(guān)閉
log_bin_basename -- bin文件前綴 默認(rèn)/var/lib/mysql/mysql-bin
log_bin_index -- bin文件索引 /var/lib/mysql/mysql-bin.index

binlog_cache_size -- binlog日志 事務(wù)緩存大小
binlog_encryption -- 內(nèi)容是否加密 我們的內(nèi)容為了安全性可能需要加密
binlog_format -- binlog格式
binlog_expire_logs_seconds -- 多久后binlog刪除 默認(rèn)2592000s也就是30天

BinLog格式

STATEMENT: 基于sql語句記錄,記錄的是語句,后續(xù)去執(zhí)行binLog的執(zhí)行語句。優(yōu)點(diǎn)是存儲(chǔ)空間小,但在某些情況下可能會(huì)出現(xiàn)與主庫不一致的情況,比如:

update order set pay_time = now() where id = 1;

大家想想,如果這條語句是11月1號(hào)執(zhí)行的,但是11月3號(hào)數(shù)據(jù)庫宕機(jī)需要恢復(fù)數(shù)據(jù),那么pay_time就會(huì)有問題。

ROW: 基于行格式記錄,binLog記錄的是單個(gè)行是如何更改的,雖然這種方式會(huì)占用更多的存儲(chǔ)空間,但能確保主從數(shù)據(jù)的一致性。比如上面那個(gè)語句:

update order set pay_time = 168535465 where @1 = 1;  -- 168535465隨便寫的,不要糾結(jié)這個(gè)

MIXED: 混合模式,默認(rèn)是STATEMENT,在個(gè)別場(chǎng)景會(huì)切換成ROW模式

BinLog同步機(jī)制

BinLog也是先放到內(nèi)存再同步到磁盤的,這里可以聯(lián)想下redolog內(nèi)存與磁盤的方式

show variables like '%binlog_cache_size%'; -- 事務(wù)期間用于保存二進(jìn)制日志更改的內(nèi)存緩沖區(qū)的大小
show variables like '%sync_binlog%'; -- 同步方式

sync_binlog=0,不同步刷新到磁盤,交給操作系統(tǒng)去操作,斷電或者操作系統(tǒng)異常,可能導(dǎo)致數(shù)據(jù)丟失

sync_binlog=1,能保證數(shù)據(jù)的一致性,每次提交都必須同步到磁盤,但是對(duì)性能有影響,默認(rèn)

sync_binlog=N, N默認(rèn)是1,最大4294967295,代表我達(dá)到N條binLog后,再同步到磁盤,能夠靈活的來設(shè)置數(shù)據(jù)的一致性與性能之間的平衡

3. 主從同步

流程圖:

圖片圖片

必要條件:

  • 確保有唯一的server_id在配置文件中配置
server-id=xx

或者使用sql語句配置

SET GLOBAL server_id=xx; -- 更改server_id
  • 數(shù)據(jù)源(master)必須開啟bin_log

從庫創(chuàng)建流程

  • master創(chuàng)建用戶
  • 建立主從關(guān)系
CHANGE REPLICATION SOURCE TO
->  SOURCE_HOST='source_host_name', 
->  SOURCE_USER='replication_user_name',
->  SOURCE_PASSWORD='replication_password',
->  SOURCE_LOG_FILE='recorded_log_file_name',
->  SOURCE_LOG_POS=recorded_log_position; --我要從binlog的哪個(gè)位置開始同步
  • 開啟主從同步
start replica; --開啟主從同步
  • 更改從庫只讀
SHOW VARIABLES LIKE'%read_only%';
SET GLOBAL super_read_notallow=1; -- super賬號(hào)也只讀
SET GLOBAL read_notallow=1; -- 只讀

同步方式

  • 異步同步:默認(rèn)方式,性能比較高,但是數(shù)據(jù)一致性低,會(huì)有數(shù)據(jù)丟失可能。
  • 半同步:由于異步同步會(huì)存在一定的數(shù)據(jù)丟失,所以Mysql的主從復(fù)制有一個(gè)半同步的概念,所謂半同步,就是我的主必須等待數(shù)據(jù)至少有一個(gè)副本(具體數(shù)量可以進(jìn)行配置)接收并記錄了,才會(huì)允許提交事務(wù)。

4. 總結(jié)

MySQL 的 binlog(二進(jìn)制日志) 和 主從同步 是確保數(shù)據(jù)庫高可用性、可擴(kuò)展性和災(zāi)難恢復(fù)的關(guān)鍵技術(shù)。通過 binlog,MySQL 記錄了所有數(shù)據(jù)修改操作,為主從復(fù)制提供了數(shù)據(jù)同步的基礎(chǔ)。主服務(wù)器的變更通過 binlog 被傳遞到從服務(wù)器,實(shí)現(xiàn)了數(shù)據(jù)的實(shí)時(shí)同步,從而保證了數(shù)據(jù)的一致性和容錯(cuò)能力。

在配置 MySQL 主從復(fù)制時(shí),理解和正確配置 binlog 是至關(guān)重要的。binlog 不僅是數(shù)據(jù)同步的核心,也是數(shù)據(jù)庫恢復(fù)和數(shù)據(jù)審計(jì)的重要工具。通過合適的配置(如設(shè)置 log_bin、server-id、read_only 等參數(shù)),可以確保主從同步的高效性和可靠性。

此外,雖然 binlog 和主從復(fù)制為 MySQL 提供了高可用性和災(zāi)難恢復(fù)的基礎(chǔ),但在實(shí)際使用過程中,仍然需要關(guān)注復(fù)制延遲、網(wǎng)絡(luò)帶寬、負(fù)載均衡等因素的影響。對(duì)于復(fù)雜的生產(chǎn)環(huán)境,建議結(jié)合 GTID(全局事務(wù)標(biāo)識(shí)符) 和 semi-sync replication(半同步復(fù)制) 等技術(shù)來進(jìn)一步增強(qiáng)主從復(fù)制的健壯性和一致性。

總的來說,MySQL 的 binlog 和主從同步技術(shù)為我們提供了強(qiáng)大的數(shù)據(jù)復(fù)制和恢復(fù)能力,是構(gòu)建高可用數(shù)據(jù)庫架構(gòu)的基石。在日常使用中,掌握這些技術(shù)不僅能幫助我們實(shí)現(xiàn)高效的數(shù)據(jù)同步,還能為系統(tǒng)的擴(kuò)展性和容錯(cuò)能力提供保障。

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2024-07-15 09:14:03

MySQL主從復(fù)制

2017-06-29 09:28:37

OracleMariaDB復(fù)制

2017-04-20 21:00:06

MySQLbinlog主從復(fù)制

2017-06-21 08:30:20

MySQL原因解決辦法

2024-03-29 08:08:25

2023-08-29 07:22:06

MySQL數(shù)據(jù)工具故障恢復(fù)

2023-04-06 13:15:48

MySQL復(fù)制原理應(yīng)用實(shí)踐

2012-11-26 10:17:44

InnoDB

2018-05-16 15:26:43

數(shù)據(jù)庫MySQL主從復(fù)制

2022-08-18 08:24:19

Mysql數(shù)據(jù)庫

2020-02-28 16:02:21

MySQL異構(gòu)同步

2021-07-15 09:00:00

MySQL數(shù)據(jù)庫數(shù)據(jù)分析

2025-02-17 01:00:00

.NET性能服務(wù)器

2017-09-12 08:03:29

數(shù)據(jù)庫MySQL主庫

2019-05-07 09:31:41

TiDBMySQL數(shù)據(jù)

2023-03-16 08:01:56

TypeScript開源編程語言

2022-08-12 08:34:32

攜程數(shù)據(jù)庫上云

2019-11-24 19:17:06

MySQL異步復(fù)制全同步復(fù)制

2020-09-24 06:39:58

MySQL數(shù)據(jù)庫

2024-03-01 18:33:59

MySQL節(jié)點(diǎn)數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)