" />

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

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

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

一、MySQL主從復制的工作原理

1. 基本概念

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

2. 工作流程

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

二、環(huán)境準備

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

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

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

三、安裝與配置

1. 安裝MySQL

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

sudo apt update
sudo apt install mysql-server

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

編輯配置文件

編輯主節(jié)點的/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)復制,則啟用此選項
sync_binlog=1        # 確保每次提交都同步到磁盤
innodb_flush_log_at_trx_commit=1 # 確保每次提交都刷新日志到磁盤
  • server-id: 每個節(jié)點必須有一個唯一的ID。
  • log-bin: 啟用二進制日志,這是主從復制的基礎(chǔ)。
  • binlog-do-db: 只記錄特定數(shù)據(jù)庫的操作日志,如果需要同步所有數(shù)據(jù)庫,可以省略此行。
  • expire_logs_days: 設(shè)置日志文件的自動清理天數(shù)。
  • max_binlog_size: 設(shè)置單個日志文件的最大大小。
  • relay-log: 指定中繼日志文件名。
  • log-slave-updates: 如果從節(jié)點也需要作為其他從節(jié)點的主節(jié)點,啟用此選項。
  • sync_binlog: 確保每次提交都同步到磁盤,提高數(shù)據(jù)一致性。
  • innodb_flush_log_at_trx_commit: 確保每次提交都刷新日志到磁盤,提高數(shù)據(jù)一致性。

重啟MySQL服務(wù)

sudo systemctl restart mysql

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

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

mysql -u root -p

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

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

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

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

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

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

編輯配置文件

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

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

重啟MySQL服務(wù)

sudo systemctl restart mysql

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

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

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,則啟用此選項

START SLAVE;

SHOW SLAVE STATUS\G;

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

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

解鎖主節(jié)點

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

UNLOCK TABLES;

四、測試與驗證

1. 測試主從復制功能

在主節(jié)點上進行一些操作,例如創(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é)點上查詢該表的數(shù)據(jù),確認數(shù)據(jù)已正確同步:

mysql -u root -p

USE testdb;
SELECT * FROM example;

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

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

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

為了確保集群的穩(wěn)定性和性能,建議定期監(jiān)控MySQL的狀態(tài)和日志文件??梢允褂靡韵旅畈榭磸墓?jié)點的狀態(tài):

SHOW SLAVE STATUS\G;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. 并行復制(Parallel Replication)

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

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

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

3. GTID(Global Transaction Identifier)

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

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

gtid_mode=ON
enforce_gtid_consistency=ON

然后在從節(jié)點上使用GTID進行復制配置:

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

七、常見問題及解決方案

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

  • 檢查防火墻:確保防火墻允許3306端口。
    sudo ufw allow 3306/tcp
  • 檢查權(quán)限:確認主節(jié)點的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工具進行數(shù)據(jù)一致性檢查和修復。
    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
  • 配置一致性:確認主節(jié)點和從節(jié)點的配置一致,特別是字符集和排序規(guī)則。

3. 復制延遲

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

八、詳細配置示例

主節(jié)點配置示例 (/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)復制,則啟用此選項
sync_binlog=1        # 確保每次提交都同步到磁盤
innodb_flush_log_at_trx_commit=1 # 確保每次提交都刷新日志到磁盤

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

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

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

相關(guān)文章

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

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

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

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

    因工作需要維護一張中建表數(shù)據(jù)內(nèi)置,所以得造數(shù)據(jù)所以使用存儲過程來造數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于如何一步步利用Mysql存儲過程造百萬級數(shù)據(jù)的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    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ù)實現(xiàn)位置打卡的完整步驟

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

手游| 阜康市| 于都县| 黔江区| 西盟| 教育| 泽库县| 天津市| 台湾省| 泸西县| 沙雅县| 都兰县| 营山县| 洛南县| 黄石市| 珲春市| 舟曲县| 祁连县| 诸城市| 高邑县| 上林县| 隆化县| 高要市| 灵璧县| 遵义县| 长子县| 湘潭县| 吉木萨尔县| 三河市| 广元市| 徐汇区| 泸定县| 和硕县| 响水县| 武陟县| 开江县| 甘肃省| 台中市| 黎城县| 榆树市| 富阳市|