" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL主從集群的實(shí)現(xiàn)示例

 更新時間:2026年01月28日 09:36:42   作者:山高自有客行路  
本文主要介紹了MySQL主從集群的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、MySQL主從復(fù)制的工作原理

1. 基本概念

  • 主節(jié)點(diǎn)(Master):處理所有寫操作(如INSERT、UPDATE、DELETE),并將這些操作記錄到二進(jìn)制日志(Binary Log)中。
  • 從節(jié)點(diǎn)(Slave):連接到主節(jié)點(diǎn),讀取并應(yīng)用主節(jié)點(diǎn)的二進(jìn)制日志,從而同步數(shù)據(jù)。

2. 工作流程

  1. 事務(wù)記錄:當(dāng)主節(jié)點(diǎn)上發(fā)生寫操作時,MySQL會將這些操作記錄在二進(jìn)制日志中。
  2. 日志傳輸:從節(jié)點(diǎn)通過IO線程連接到主節(jié)點(diǎn),請求獲取新的二進(jìn)制日志條目,并將其存儲在從節(jié)點(diǎn)的中繼日志(Relay Log)中。
  3. 日志應(yīng)用:從節(jié)點(diǎn)上的SQL線程讀取中繼日志中的條目,并執(zhí)行相應(yīng)的SQL語句,更新本地?cái)?shù)據(jù)庫。

二、環(huán)境準(zhǔn)備

假設(shè)我們有以下三臺服務(wù)器:

  • 主節(jié)點(diǎn)(Master): 192.168.1.101
  • 從節(jié)點(diǎn)1(Slave 1): 192.168.1.102
  • 從節(jié)點(diǎn)2(Slave 2): 192.168.1.103

確保各節(jié)點(diǎn)之間可以互相通信,并開放必要的端口(如3306)。

三、安裝與配置

1. 安裝MySQL

在所有節(jié)點(diǎn)上安裝MySQL:

sudo apt update
sudo apt install mysql-server

2. 配置主節(jié)點(diǎn)(Master)

編輯配置文件

編輯主節(jié)點(diǎn)的/etc/mysql/mysql.conf.d/mysqld.cnf文件,在末尾添加以下內(nèi)容:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=testdb  # 只同步指定數(shù)據(jù)庫,如需同步所有數(shù)據(jù)庫可刪除此行
expire_logs_days=7   # 自動清理過期的日志文件
max_binlog_size=100M # 單個日志文件的最大大小
relay-log=mysql-relay-bin
log-slave-updates=1  # 如果需要級聯(lián)復(fù)制,則啟用此選項(xiàng)
sync_binlog=1        # 確保每次提交都同步到磁盤
innodb_flush_log_at_trx_commit=1 # 確保每次提交都刷新日志到磁盤
  • server-id: 每個節(jié)點(diǎn)必須有一個唯一的ID。
  • log-bin: 啟用二進(jìn)制日志,這是主從復(fù)制的基礎(chǔ)。
  • binlog-do-db: 只記錄特定數(shù)據(jù)庫的操作日志,如果需要同步所有數(shù)據(jù)庫,可以省略此行。
  • expire_logs_days: 設(shè)置日志文件的自動清理天數(shù)。
  • max_binlog_size: 設(shè)置單個日志文件的最大大小。
  • relay-log: 指定中繼日志文件名。
  • log-slave-updates: 如果從節(jié)點(diǎn)也需要作為其他從節(jié)點(diǎn)的主節(jié)點(diǎn),啟用此選項(xiàng)。
  • sync_binlog: 確保每次提交都同步到磁盤,提高數(shù)據(jù)一致性。
  • innodb_flush_log_at_trx_commit: 確保每次提交都刷新日志到磁盤,提高數(shù)據(jù)一致性。

重啟MySQL服務(wù)

sudo systemctl restart mysql

創(chuàng)建用于復(fù)制的用戶

登錄到MySQL并創(chuàng)建用于復(fù)制的用戶:

mysql -u root -p

CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

鎖定數(shù)據(jù)庫并獲取二進(jìn)制日志位置

鎖定數(shù)據(jù)庫以防止數(shù)據(jù)修改,并獲取當(dāng)前二進(jìn)制日志位置:

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

記下FilePosition的值,稍后需要在從節(jié)點(diǎn)上使用。

3. 配置從節(jié)點(diǎn)(Slave)

編輯配置文件

在每個從節(jié)點(diǎn)上編輯/etc/mysql/mysql.conf.d/mysqld.cnf文件,在末尾添加以下內(nèi)容:

[mysqld]
server-id=2  # 對于第二個從節(jié)點(diǎn),使用不同的ID,如3
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
skip-slave-start=1  # 禁止啟動時自動啟動復(fù)制
slave_parallel_workers=4  # 并行復(fù)制線程數(shù)
slave_parallel_type=LOGICAL_CLOCK  # 并行復(fù)制類型
gtid_mode=ON  # 啟用GTID
enforce_gtid_consistency=ON  # 強(qiáng)制GTID一致性
  • server-id: 每個節(jié)點(diǎn)必須有一個唯一的ID。
  • relay-log: 指定中繼日志文件名。
  • log-slave-updates: 如果從節(jié)點(diǎn)也需要作為其他從節(jié)點(diǎn)的主節(jié)點(diǎn),啟用此選項(xiàng)。
  • read-only: 設(shè)置從節(jié)點(diǎn)為只讀模式,防止意外寫入。
  • skip-slave-start: 禁止啟動時自動啟動復(fù)制,便于手動控制。
  • slave_parallel_workers: 設(shè)置并行復(fù)制線程數(shù)。
  • slave_parallel_type: 設(shè)置并行復(fù)制類型。
  • gtid_mode: 啟用GTID。
  • enforce_gtid_consistency: 強(qiáng)制GTID一致性。

重啟MySQL服務(wù)

sudo systemctl restart mysql

設(shè)置主節(jié)點(diǎn)信息

登錄到MySQL并設(shè)置主節(jié)點(diǎn)信息:

mysql -u root -p

CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='replicator',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001',  -- 使用之前記錄的File值
MASTER_LOG_POS=154,                  -- 使用之前記錄的Position值
MASTER_AUTO_POSITION=1;              -- 如果使用GTID,則啟用此選項(xiàng)

START SLAVE;

SHOW SLAVE STATUS\G;

檢查輸出中的Slave_IO_RunningSlave_SQL_Running字段是否為Yes,以確認(rèn)從節(jié)點(diǎn)已成功連接到主節(jié)點(diǎn)。

對于第二個從節(jié)點(diǎn),重復(fù)上述步驟,并確保使用不同的server-id。

解鎖主節(jié)點(diǎn)

在主節(jié)點(diǎn)上解鎖數(shù)據(jù)庫,允許數(shù)據(jù)修改:

UNLOCK TABLES;

四、測試與驗(yàn)證

1. 測試主從復(fù)制功能

在主節(jié)點(diǎn)上進(jìn)行一些操作,例如創(chuàng)建數(shù)據(jù)庫和表,并插入數(shù)據(jù):

mysql -u root -p

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE example (id INT NOT NULL PRIMARY KEY, data VARCHAR(100));
INSERT INTO example VALUES (1, 'test');

然后在從節(jié)點(diǎn)上查詢該表的數(shù)據(jù),確認(rèn)數(shù)據(jù)已正確同步:

mysql -u root -p

USE testdb;
SELECT * FROM example;

如果能看到插入的數(shù)據(jù),則說明主從復(fù)制已經(jīng)正常工作。

五、進(jìn)一步優(yōu)化與管理

1. 監(jiān)控與維護(hù)

為了確保集群的穩(wěn)定性和性能,建議定期監(jiān)控MySQL的狀態(tài)和日志文件。可以使用以下命令查看從節(jié)點(diǎn)的狀態(tài):

SHOW SLAVE STATUS\G;

重點(diǎn)關(guān)注以下字段:

  • Slave_IO_Running: IO線程是否運(yùn)行。
  • Slave_SQL_Running: SQL線程是否運(yùn)行。
  • Last_Error: 上次錯誤信息。
  • Seconds_Behind_Master: 從節(jié)點(diǎn)落后主節(jié)點(diǎn)的時間。

也可以通過配置監(jiān)控工具如Prometheus + Grafana來實(shí)時監(jiān)控MySQL集群的狀態(tài)。

2. 故障轉(zhuǎn)移與高可用性

為了提高系統(tǒng)的高可用性,可以考慮以下措施:

  • 自動故障轉(zhuǎn)移:使用中間件如MHA(MySQL High Availability)或Orchestrator來實(shí)現(xiàn)自動故障轉(zhuǎn)移。
  • 負(fù)載均衡:使用負(fù)載均衡器(如HAProxy)來分發(fā)讀請求到多個從節(jié)點(diǎn),減輕主節(jié)點(diǎn)的壓力。

3. 數(shù)據(jù)一致性檢查

定期檢查主從節(jié)點(diǎn)之間的數(shù)據(jù)一致性,可以使用工具如Percona Toolkit中的pt-table-checksumpt-table-sync來檢測和修復(fù)不一致的數(shù)據(jù)。

六、高級配置與優(yōu)化

1. 半同步復(fù)制(Semi-Synchronous Replication)

半同步復(fù)制可以在一定程度上保證數(shù)據(jù)一致性。配置步驟如下:

在主節(jié)點(diǎn)上啟用半同步插件:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;

在從節(jié)點(diǎn)上啟用半同步插件:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
START SLAVE;

2. 并行復(fù)制(Parallel Replication)

MySQL 5.7及以上版本支持并行復(fù)制,可以顯著提高從節(jié)點(diǎn)的復(fù)制速度。配置步驟如下:

在從節(jié)點(diǎn)的配置文件中添加以下配置:

slave_parallel_workers=4  # 設(shè)置并行線程數(shù)
slave_parallel_type=LOGICAL_CLOCK  # 設(shè)置并行類型

3. GTID(Global Transaction Identifier)

GTID可以簡化主從切換和故障恢復(fù)。配置步驟如下:

在主節(jié)點(diǎn)和從節(jié)點(diǎn)的配置文件中添加以下配置:

gtid_mode=ON
enforce_gtid_consistency=ON

然后在從節(jié)點(diǎn)上使用GTID進(jìn)行復(fù)制配置:

CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='replicator',
MASTER_PASSWORD='your_password',
MASTER_AUTO_POSITION=1;

七、常見問題及解決方案

1. 從節(jié)點(diǎn)無法連接主節(jié)點(diǎn)

  • 檢查防火墻:確保防火墻允許3306端口。
    sudo ufw allow 3306/tcp
  • 檢查權(quán)限:確認(rèn)主節(jié)點(diǎn)的replicator用戶權(quán)限正確。
  • 網(wǎng)絡(luò)連通性:使用pingtelnet等工具檢查網(wǎng)絡(luò)連通性。
    ping 192.168.1.101
    telnet 192.168.1.101 3306

2. 數(shù)據(jù)不一致

  • 使用Percona Toolkit:使用pt-table-checksumpt-table-sync工具進(jìn)行數(shù)據(jù)一致性檢查和修復(fù)。
    pt-table-checksum --host=192.168.1.101 --user=root --password=your_password
    pt-table-sync --execute h=192.168.1.101,u=root,p=your_password h=192.168.1.102
  • 配置一致性:確認(rèn)主節(jié)點(diǎn)和從節(jié)點(diǎn)的配置一致,特別是字符集和排序規(guī)則。

3. 復(fù)制延遲

  • 硬件資源:檢查從節(jié)點(diǎn)的硬件資源(CPU、內(nèi)存、磁盤I/O)是否充足。
  • 參數(shù)調(diào)整:調(diào)整從節(jié)點(diǎn)的innodb_buffer_pool_size和其他相關(guān)參數(shù)。
    innodb_buffer_pool_size=2G  # 根據(jù)實(shí)際情況調(diào)整大小

八、詳細(xì)配置示例

主節(jié)點(diǎn)配置示例 (/etc/mysql/mysql.conf.d/mysqld.cnf)

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=testdb  # 只同步指定數(shù)據(jù)庫,如需同步所有數(shù)據(jù)庫可刪除此行
expire_logs_days=7   # 自動清理過期的日志文件
max_binlog_size=100M # 單個日志文件的最大大小
relay-log=mysql-relay-bin
log-slave-updates=1  # 如果需要級聯(lián)復(fù)制,則啟用此選項(xiàng)
sync_binlog=1        # 確保每次提交都同步到磁盤
innodb_flush_log_at_trx_commit=1 # 確保每次提交都刷新日志到磁盤

從節(jié)點(diǎn)配置示例 (/etc/mysql/mysql.conf.d/mysqld.cnf)

[mysqld]
server-id=2  # 對于第二個從節(jié)點(diǎn),使用不同的ID,如3
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
skip-slave-start=1  # 禁止啟動時自動啟動復(fù)制
slave_parallel_workers=4  # 并行復(fù)制線程數(shù)
slave_parallel_type=LOGICAL_CLOCK  # 并行復(fù)制類型
gtid_mode=ON  # 啟用GTID
enforce_gtid_consistency=ON  # 強(qiáng)制GTID一致性

到此這篇關(guān)于MySQL主從集群的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL主從集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL下200GB大表備份的操作(利用傳輸表空間解決停服發(fā)版表備份問題)

    MySQL下200GB大表備份的操作(利用傳輸表空間解決停服發(fā)版表備份問題)

    這篇文章主要介紹了MySQL下200GB大表備份的操作(利用傳輸表空間解決停服發(fā)版表備份問題),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2025-04-04
  • 一步步教你利用Mysql存儲過程造百萬級數(shù)據(jù)

    一步步教你利用Mysql存儲過程造百萬級數(shù)據(jù)

    因工作需要維護(hù)一張中建表數(shù)據(jù)內(nèi)置,所以得造數(shù)據(jù)所以使用存儲過程來造數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于如何一步步利用Mysql存儲過程造百萬級數(shù)據(jù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Mysql中關(guān)于on,in,as,where的區(qū)別

    Mysql中關(guān)于on,in,as,where的區(qū)別

    這篇文章主要介紹了Mysql中關(guān)于on,in,as,where的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • windows 下忘記mysql root密碼的更改方法

    windows 下忘記mysql root密碼的更改方法

    mysql數(shù)據(jù)庫忘記了root密碼是件很痛苦的事,本文介紹如何解決windows環(huán)境下mysql服務(wù)器忘記root密碼的解決方法,需要的朋友可以參考下
    2016-10-10
  • 利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的完整步驟

    利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何利用MySQL空間函數(shù)實(shí)現(xiàn)位置打卡的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mysql中判斷記錄是否存在方法比較

    mysql中判斷記錄是否存在方法比較

    把數(shù)據(jù)寫入到數(shù)據(jù)庫的時,常常會碰到先要檢測要插入的記錄是否存在,然后決定是否要寫入。
    2011-07-07
  • 淺析Mysql 中如何導(dǎo)出數(shù)據(jù)

    淺析Mysql 中如何導(dǎo)出數(shù)據(jù)

    MySQL中你可以使用SELECT…INTO OUTFILE語句來簡單的導(dǎo)出數(shù)據(jù)到文本文件上,這篇文章給大家介紹了Mysql 中如何導(dǎo)出數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • mysql5.7.25使用全文檢索功能的實(shí)例教程

    mysql5.7.25使用全文檢索功能的實(shí)例教程

    其實(shí)全文檢索在MySQL里面很早就支持了,下面這篇文章主要給大家介紹了關(guān)于mysql5.7.25使用全文檢索功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • MYSQL的索引使用注意小結(jié)

    MYSQL的索引使用注意小結(jié)

    這篇文章主要介紹了MYSQL的索引使用注意,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • MySQL數(shù)據(jù)庫自動化備份腳本的實(shí)踐指南

    MySQL數(shù)據(jù)庫自動化備份腳本的實(shí)踐指南

    數(shù)據(jù)是企業(yè)的核心資產(chǎn),定期備份數(shù)據(jù)庫是每個運(yùn)維和開發(fā)人員的必修課,本文分享一個生產(chǎn)環(huán)境驗(yàn)證過的 MySQL 自動備份腳本,支持多數(shù)據(jù)庫備份、自動壓縮、過期清理,并詳細(xì)解讀每一處細(xì)節(jié),幫助你快速搭建可靠的備份體系,需要的朋友可以參考下
    2026-04-04

最新評論

都匀市| 嵩明县| 龙山县| 启东市| 宣化县| 乌拉特中旗| 平远县| 隆昌县| 双峰县| 重庆市| 广丰县| 东宁县| 东宁县| 綦江县| 莆田市| 千阳县| 雷山县| 清苑县| 莱西市| 彰化县| 玉环县| 镇原县| 景宁| 鄢陵县| 彩票| 汉中市| 肥东县| 新竹县| 乌审旗| 克东县| 栾城县| 万年县| 安阳市| 紫阳县| 佛学| 江口县| 博客| 通州市| 永春县| 沅江市| 南澳县|