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

MySQL5.7配置Pseudo-GTID完整步驟

 更新時間:2026年03月17日 08:25:27   作者:學(xué)亮編程手記  
本文主要介紹了MySQL5.7配置Pseudo-GTID完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、Pseudo-GTID 原理解析

在開始配置之前,先簡單理解 Pseudo-GTID 的工作原理:

  1. 定期注入唯一標(biāo)記:在 MySQL 的 binlog 中定期插入一個全局唯一的 SQL 語句
  2. 作為定位錨點:這些標(biāo)記成為 binlog 中的"坐標(biāo)點",Orchestrator 可以通過它們快速定位數(shù)據(jù)同步位置
  3. 無需開啟 GTID:在傳統(tǒng)復(fù)制模式下,也能實現(xiàn)類似 GTID 的自動定位能力

二、配置步驟詳解

2.1 第一步:創(chuàng)建元數(shù)據(jù)庫(所有節(jié)點)

首先在每個 MySQL 實例上創(chuàng)建用于存放偽 GTID 相關(guān)對象的數(shù)據(jù)庫:

-- 登錄 MySQL(所有節(jié)點:192.168.56.80、61、60)
mysql -uroot -p

-- 創(chuàng)建 meta 數(shù)據(jù)庫(如果不存在)
CREATE DATABASE IF NOT EXISTS meta;

2.2 第二步:創(chuàng)建 Pseudo-GTID 事件(所有節(jié)點)

這是最核心的步驟,需要創(chuàng)建一個定時事件來定期注入偽 GTID 標(biāo)記:

-- 切換到 meta 數(shù)據(jù)庫
USE meta;

-- 確保事件調(diào)度器已開啟
SET GLOBAL event_scheduler = ON;

-- 創(chuàng)建偽 GTID 注入事件
DELIMITER $$

CREATE EVENT IF NOT EXISTS create_pseudo_gtid_event
ON SCHEDULE EVERY 10 SECOND
STARTS CURRENT_TIMESTAMP
ON COMPLETION PRESERVE
ENABLED
COMMENT 'Inject Pseudo-GTID markers for Orchestrator'
DO
BEGIN
    DECLARE lock_result INT;
    
    -- 獲取鎖,確保同一時間只有一個會話執(zhí)行注入
    SELECT GET_LOCK('pseudo_gtid_lock', 0) INTO lock_result;
    
    IF lock_result = 1 THEN
        -- 執(zhí)行一個會產(chǎn)生 binlog 事件的語句
        -- DROP VIEW 即使視圖不存在也會記錄 binlog
        DROP VIEW IF EXISTS `meta`.`pseudo_gtid_view`;
        
        -- 釋放鎖
        DO RELEASE_LOCK('pseudo_gtid_lock');
    END IF;
END$$

DELIMITER ;

2.3 第三步:驗證事件創(chuàng)建成功

-- 查看事件是否創(chuàng)建成功
SHOW EVENTS FROM meta\G

-- 查看事件調(diào)度器狀態(tài)(應(yīng)為 ON)
SHOW VARIABLES LIKE 'event_scheduler';

-- 查看事件的具體定義
SELECT 
    EVENT_NAME,
    STATUS,
    STARTS,
    INTERVAL_VALUE,
    INTERVAL_FIELD,
    EXECUTE_AT
FROM information_schema.EVENTS 
WHERE EVENT_SCHEMA = 'meta';

2.4 第四步:配置 MySQL 持久化

為了確保重啟后配置依然有效,需要將相關(guān)配置寫入 my.cnf:

# 編輯 MySQL 配置文件
vim /etc/my.cnf

# 添加以下配置
[mysqld]
# 確保事件調(diào)度器開機(jī)自啟
event_scheduler = ON

# 可選:優(yōu)化 binlog 格式
binlog_format = ROW  # 推薦使用 ROW 格式
binlog_rows_query_log_events = ON  # 記錄原始 SQL,便于調(diào)試

重啟 MySQL 使配置生效:

systemctl restart mysqld

# 驗證重啟后事件調(diào)度器狀態(tài)
mysql -e "SHOW VARIABLES LIKE 'event_scheduler';"

2.5 第五步:驗證 Pseudo-GTID 是否正常工作

方法一:直接查看 binlog 內(nèi)容

# 找到最新的 binlog 文件
mysql -e "SHOW MASTER STATUS\G"

# 查看 binlog 中的 Pseudo-GTID 標(biāo)記
mysqlbinlog /var/lib/mysql/mysql-bin.000001 | grep -A 3 -B 3 "DROP VIEW" | head -20

你應(yīng)該能看到類似這樣的輸出:

# at 12345678
#230101 10:00:00 server id 1113306  end_log_pos 12345689  Query thread_id=123 exec_time=0 error_code=0
SET TIMESTAMP=1704070800/*!*/;
DROP VIEW IF EXISTS `meta`.`pseudo_gtid_view`/*!*/;

方法二:通過 Orchestrator 驗證

# 使用 orchestrator-client 查看集群拓?fù)?
orchestrator-client -c topology -i 192.168.56.80:3306

# 在 Orchestrator 日志中查看偽 GTID 相關(guān)信息
tail -f /var/log/orchestrator.log | grep -i pseudo

三、高級配置選項

3.1 多語句 Pseudo-GTID 模式

如果希望 Pseudo-GTID 標(biāo)記更明顯,可以使用復(fù)合語句:

DELIMITER $$

CREATE EVENT IF NOT EXISTS create_pseudo_gtid_event_advanced
ON SCHEDULE EVERY 10 SECOND
STARTS CURRENT_TIMESTAMP
ON COMPLETION PRESERVE
ENABLED
DO
BEGIN
    DECLARE lock_result INT;
    DECLARE pseudo_gtid_value VARCHAR(50);
    
    -- 生成一個唯一值
    SET pseudo_gtid_value = CONCAT('pseudo_gtid_', UNIX_TIMESTAMP(), '_', RAND());
    
    SELECT GET_LOCK('pseudo_gtid_lock', 0) INTO lock_result;
    
    IF lock_result = 1 THEN
        -- 創(chuàng)建一個包含唯一值的注釋和 DROP VIEW 語句
        SET @pseudo_gtid_sql = CONCAT('/* ', pseudo_gtid_value, ' */ DROP VIEW IF EXISTS `meta`.`pseudo_gtid_view`');
        PREPARE stmt FROM @pseudo_gtid_sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        
        DO RELEASE_LOCK('pseudo_gtid_lock');
    END IF;
END$$

DELIMITER ;

3.2 監(jiān)控 Pseudo-GTID 健康狀況

創(chuàng)建監(jiān)控腳本 /usr/local/bin/check_pseudo_gtid.sh

#!/bin/bash

# 檢查事件是否存在且啟用
MYSQL_CMD="mysql -uroot -pYourPassword -e"

EVENT_STATUS=$($MYSQL_CMD "SHOW EVENTS FROM meta LIKE 'create_pseudo_gtid_event'" 2>/dev/null | grep ENABLED)

if [ -z "$EVENT_STATUS" ]; then
    echo "ERROR: Pseudo-GTID event is not enabled or missing"
    exit 1
fi

# 檢查最近是否有注入
LAST_INJECT=$($MYSQL_CMD "SELECT MAX(STR_TO_DATE(event_time, '%Y%m%d %H:%i:%s')) 
    FROM (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(event_time, '# at', -1), ' ', 2) as event_time 
          FROM mysql.general_log WHERE argument LIKE '%DROP VIEW%' LIMIT 100) t" 2>/dev/null)

CURRENT_TIME=$(date +%s)
LAST_INJECT_TIME=$(date -d "$LAST_INJECT" +%s)

if [ $((CURRENT_TIME - LAST_INJECT_TIME)) -gt 30 ]; then
    echo "WARNING: No Pseudo-GTID injection in last 30 seconds"
    exit 2
fi

echo "OK: Pseudo-GTID is working properly"
exit 0

四、Orchestrator 配置文件調(diào)整

確保 orchestrator.conf.json 中包含正確的 Pseudo-GTID 配置:

{
  "AutoPseudoGTID": true,
  "PseudoGTIDPattern": "DROP VIEW IF EXISTS `meta`.`pseudo_gtid_view`",
  "PseudoGTIDPatternIsFixedSubstring": true,
  "PseudoGTIDMonotonicHint": "order:asc",
  "DetectPseudoGTIDQuery": "SELECT max(SUBSTRING_INDEX(SUBSTRING_INDEX(event_time, '# at', -1), ' ', 2)) as pseudo_gtid FROM mysql.general_log WHERE argument LIKE '%DROP VIEW IF EXISTS `meta`.`pseudo_gtid_view`%'",
  
  "RecoverMasterBinlogFileLocation": true,
  "RecoverMasterClusterFilters": ["*"],
  "InstancePollSeconds": 5
}

五、常見問題排查

5.1 事件未執(zhí)行

現(xiàn)象:Pseudo-GTID 標(biāo)記沒有在 binlog 中出現(xiàn)

排查步驟

-- 檢查事件狀態(tài)
SELECT 
    EVENT_NAME,
    STATUS,
    LAST_EXECUTED,
    LAST_ALTERED
FROM information_schema.EVENTS 
WHERE EVENT_SCHEMA = 'meta';

-- 手動執(zhí)行事件測試
CALL meta.create_pseudo_gtid_event();

-- 查看是否有鎖沖突
SHOW PROCESSLIST;
SELECT * FROM performance_schema.metadata_locks;

5.2 權(quán)限問題

現(xiàn)象:Orchestrator 無法識別 Pseudo-GTID 標(biāo)記

解決方案

-- 確保監(jiān)控用戶有足夠的權(quán)限
GRANT DROP ON meta.* TO 'orch_topology_user'@'192.168.56.%';
GRANT SELECT ON mysql.general_log TO 'orch_topology_user'@'192.168.56.%';
FLUSH PRIVILEGES;

-- 如果不想開啟 general_log,可以授予對 binlog 的訪問權(quán)限
GRANT REPLICATION CLIENT ON *.* TO 'orch_topology_user'@'192.168.56.%';

5.3 性能影響評估

Pseudo-GTID 對性能的影響極小,但可以通過以下方式監(jiān)控:

-- 查看事件執(zhí)行耗時
SELECT 
    EVENT_NAME,
    AVG_EXEC_TIME,
    MAX_EXEC_TIME,
    COUNT_EXEC
FROM performance_schema.events_statements_summary_by_account_by_event_name
WHERE EVENT_NAME LIKE '%create_pseudo_gtid_event%';

-- 查看 binlog 增長速度
SHOW MASTER STATUS;
-- Pseudo-GTID 每10秒產(chǎn)生約 200-300 字節(jié)的 binlog 事件
-- 每天約增加 2-3 MB,影響可忽略不計

六、最佳實踐建議

  1. 注入頻率選擇

    • 默認(rèn) 10 秒是平衡點,故障轉(zhuǎn)移速度和性能影響的最佳實踐
    • 對延遲敏感的業(yè)務(wù)可以調(diào)整為 5 秒
    • 超大集群可以適當(dāng)延長到 15-20 秒
  2. 監(jiān)控告警配置

    # 添加 crontab 監(jiān)控
    */5 * * * * /usr/local/bin/check_pseudo_gtid.sh > /dev/null 2>&1
    
  3. 版本升級注意事項

    • MySQL 小版本升級不會影響已配置的事件
    • 主從切換后,事件會在新主庫上繼續(xù)運行
    • 建議在事件定義中使用 IF NOT EXISTS,避免重復(fù)創(chuàng)建
  4. 備份恢復(fù)考慮

    -- 導(dǎo)出事件定義作為備份
    mysqldump --events --no-data meta > meta_events_backup.sql
    

總結(jié)

通過以上配置,MySQL 5.7 就成功開啟了 Pseudo-GTID 功能。這將讓 Orchestrator 在不開啟原生 GTID 的情況下,依然能夠?qū)崿F(xiàn)接近 GTID 的自動化故障轉(zhuǎn)移能力。

最后驗證清單

  • 所有節(jié)點都創(chuàng)建了 meta 數(shù)據(jù)庫
  • 所有節(jié)點的事件調(diào)度器已開啟
  • 所有節(jié)點的 Pseudo-GTID 事件已創(chuàng)建并啟用
  • 監(jiān)控用戶有 DROP 權(quán)限
  • 至少觀察到一個 Pseudo-GTID 標(biāo)記寫入 binlog
  • Orchestrator 配置文件已更新

如果遇到任何問題,建議先從驗證 binlog 中的 Pseudo-GTID 標(biāo)記開始排查。

到此這篇關(guān)于MySQL5.7配置Pseudo-GTID完整步驟的文章就介紹到這了,更多相關(guān)MySQL5.7配置Pseudo-GTID內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Mysql環(huán)境下對數(shù)據(jù)進(jìn)行增刪改查的操作方法

    在Mysql環(huán)境下對數(shù)據(jù)進(jìn)行增刪改查的操作方法

    本文介紹了在MySQL環(huán)境下對數(shù)據(jù)進(jìn)行增刪改查的基本操作,包括插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)、數(shù)據(jù)查詢(基本查詢、連接查詢、聚合函數(shù)查詢、子查詢)等,并舉例說明了每種操作的具體用法,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • MySQL主從復(fù)制與讀寫分離的使用示例

    MySQL主從復(fù)制與讀寫分離的使用示例

    在企業(yè)應(yīng)用中,成熟的業(yè)務(wù)通常數(shù)據(jù)量都比較大,所以需要配置多臺主從數(shù)據(jù)服務(wù)器以實現(xiàn)讀寫分離,本文主要介紹了MySQL主從復(fù)制與讀寫分離的使用示例,感興趣的可以了解一下
    2023-09-09
  • MySQL同步數(shù)據(jù)Replication的實現(xiàn)步驟

    MySQL同步數(shù)據(jù)Replication的實現(xiàn)步驟

    本文主要介紹了MySQL同步數(shù)據(jù)Replication的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • MySQL索引失效原因及最左前綴匹配原則示例詳解

    MySQL索引失效原因及最左前綴匹配原則示例詳解

    這篇文章主要介紹了MySQL索引失效原因及最左前綴匹配原則示例,通過理解最左前綴原則和這些典型的索引失效場景,你可以更有效地設(shè)計索引、編寫高效的SQL查詢,并診斷性能問題,需要的朋友可以參考下
    2025-08-08
  • MySQL表和列的注釋總結(jié)

    MySQL表和列的注釋總結(jié)

    在本篇文章里小編給大家分享了關(guān)于MySQL表和列的注釋相關(guān)知識點內(nèi)容總結(jié),需要的朋友們學(xué)習(xí)下。
    2019-05-05
  • mysql實現(xiàn)查詢數(shù)據(jù)并根據(jù)條件更新到另一張表的方法示例

    mysql實現(xiàn)查詢數(shù)據(jù)并根據(jù)條件更新到另一張表的方法示例

    這篇文章主要介紹了mysql實現(xiàn)查詢數(shù)據(jù)并根據(jù)條件更新到另一張表的方法,結(jié)合實例形式分析了mysql多表關(guān)聯(lián)查詢、更新等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • MySQL5創(chuàng)建存儲過程的示例

    MySQL5創(chuàng)建存儲過程的示例

    存儲過程可以一次執(zhí)行多個sql語句,所以php只連接數(shù)據(jù)庫一次就能查詢多個語句;不過要返回多個結(jié)果集就必須用mysqli擴(kuò)展來查詢,否則會提示錯誤can't return a result set in the given context
    2008-09-09
  • mysql語句如何插入含單引號或反斜杠的值詳解

    mysql語句如何插入含單引號或反斜杠的值詳解

    這篇文章主要給大家介紹了關(guān)于mysql語句如何插入含單引號或反斜杠的值的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • SQL基礎(chǔ)的查詢語句

    SQL基礎(chǔ)的查詢語句

    這篇文章主要給大家分享的是SQL基礎(chǔ)的查詢語句,SQL語句中,查詢是使用最多的操作,SQL不僅能夠查詢表中的數(shù)據(jù),還可以返回算術(shù)運算、表達(dá)式的結(jié)果等,接下來就一起了解一下基本的查詢語句,需要的朋友可以參考一下
    2021-11-11
  • 使用cgroups來限制MySQL企業(yè)備份服務(wù)對資源的占用

    使用cgroups來限制MySQL企業(yè)備份服務(wù)對資源的占用

    這篇文章主要介紹了使用cgroups來限制MySQL企業(yè)備份服務(wù)對資源的占用,以限制mysqlbackup相關(guān)的進(jìn)程和線程對CPU和內(nèi)存的閑時消耗,需要的朋友可以參考下
    2015-06-06

最新評論

易门县| 青铜峡市| 五莲县| 广灵县| 天柱县| 肃北| 宁南县| 富平县| 台南县| 泊头市| 高密市| 保靖县| 那坡县| 桂阳县| 新丰县| 天峨县| 河津市| 佛冈县| 获嘉县| 津市市| 汕尾市| 长葛市| 元江| 利川市| 新郑市| 淮阳县| SHOW| 伊吾县| 宣城市| 简阳市| 大埔区| 河池市| 洱源县| 乐东| 周口市| 定西市| 临沂市| 三穗县| 股票| 衡山县| 天祝|