成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

掌握 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ò)展性和容錯能力提供保障。?

1. 前言

在現(xiàn)代分布式數(shù)據(jù)庫架構(gòu)中,數(shù)據(jù)的高可用性和一致性是至關(guān)重要的。MySQL 作為最流行的關(guān)系型數(shù)據(jù)庫之一,提供了多種機(jī)制來確保數(shù)據(jù)的高可用性和容錯性。其中,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)驗和理論知識。

2. Binlog

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

Binlog用途

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

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

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

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

Binlog配置

查詢Binlog配置命令

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

比較重要的配置含義

log_bin -- 默認(rèn)on 開啟 可以對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)是存儲空間小,但在某些情況下可能會出現(xiàn)與主庫不一致的情況,比如:

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

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

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

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

MIXED: 混合模式,默認(rèn)是STATEMENT,在個別場景會切換成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ù)的一致性,每次提交都必須同步到磁盤,但是對性能有影響,默認(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的哪個位置開始同步
  • 開啟主從同步
start replica; --開啟主從同步
  • 更改從庫只讀
SHOW VARIABLES LIKE'%read_only%';
SET GLOBAL super_read_notallow=1; -- super賬號也只讀
SET GLOBAL read_notallow=1; -- 只讀

同步方式

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

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

此外,雖然 binlog 和主從復(fù)制為 MySQL 提供了高可用性和災(zāi)難恢復(fù)的基礎(chǔ),但在實(shí)際使用過程中,仍然需要關(guān)注復(fù)制延遲、網(wǎng)絡(luò)帶寬、負(fù)載均衡等因素的影響。對于復(fù)雜的生產(chǎn)環(huán)境,建議結(jié)合 GTID(全局事務(wù)標(biāo)識符) 和 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ò)展性和容錯能力提供保障。

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

2017-06-29 09:28:37

OracleMariaDB復(fù)制

2024-07-15 09:14:03

MySQL主從復(fù)制

2017-06-21 08:30:20

MySQL原因解決辦法

2024-03-29 08:08:25

2017-04-20 21:00:06

MySQLbinlog主從復(fù)制

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ù)制

2020-02-28 16:02:21

MySQL異構(gòu)同步

2022-08-18 08:24:19

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

2025-02-17 01:00:00

.NET性能服務(wù)器

2019-05-07 09:31:41

TiDBMySQL數(shù)據(jù)

2021-07-15 09:00:00

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

2023-03-16 08:01:56

TypeScript開源編程語言

2017-09-12 08:03:29

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

2022-08-12 08:34:32

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

2024-07-31 15:36:00

2019-11-24 19:17:06

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

2024-07-19 09:10:37

點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产成人网 | 久久久精品一区二区三区 | 成人欧美一区二区三区在线播放 | 一区二区三区四区国产 | 伊人91在线 | 亚洲国产精品激情在线观看 | 91精品国产综合久久久久蜜臀 | 久久大陆 | 中文字幕在线观看视频一区 | 二区av| 欧美日韩国产一区二区三区不卡 | 久久久精品一区二区三区 | 亚洲精品在线看 | 日韩精品久久久久 | 久久人人网 | 在线精品一区 | 国产精品久久久久影院色老大 | 久久人体 | 亚洲国产一区二区视频 | 欧美国产日本一区 | 国产精品国产成人国产三级 | 久久久久久久一区二区 | 成人欧美一区二区三区视频xxx | 国产一区二区在线免费观看 | 视频1区 | 日韩免费av网站 | 天天综合天天 | 一区二区三区视频 | 一级特黄色毛片 | 懂色av蜜桃av| 蜜桃精品视频在线 | 亚洲精品久久久久avwww潮水 | 亚洲福利在线观看 | 国产欧美视频一区 | 国产精品成人一区二区三区 | 久久久久国产精品人 | 先锋资源网 | 97人人干| 国产一区二区三区四区 | 欧美亚洲视频在线观看 | 免费国产视频 |