【问题标题】:Percona replication not syncPercona 复制不同步
【发布时间】:2026-02-13 02:30:01
【问题描述】:

我们使用 percona 集群 5.7.20 我的 wsrep 配置。

max_connections = 10000
open_files_limit = 32768
wsrep_sync_wait=1
wsrep_causal_reads=ON
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
wsrep_provider_options="pc.ignore_quorum=true;pc.ignore_sb=true;gcache.size=2G; gcache.page_size=1G;gcs.fc_limit = 256; gcs.fc_factor = 0.99;"
wsrep_slave_threads=32
[sst]
inno-apply-opts="--use-memory=8G"
compressor="pigz"
decompressor="pigz -d"

我通过 php 7 测试代码对同步复制进行了测试。 https://github.com/ureyni/percona_replicationtest

通过事务将值插入节点1。 执行提交后,在 node2 上执行选择查询,如果未找到数据,则在 node3 上查询 exec。

测试不成功。

为什么?我不明白,因为 互联网上的所有文档都说它是同步的。

请帮忙。

【问题讨论】:

    标签: php mysql replication percona galera


    【解决方案1】:

    我会先检查节点是否真的形成了一个集群。

    连接到任何节点并运行以下查询

    show status like 'wsrep_%';
    

    如果所有 3 个节点都已连接,您应该会看到类似以下内容

    mysql> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | b598af3e-ace3-11e2-0800-3e90eb9cd5d3 |
    ...
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    ...
    | wsrep_cluster_size         | 3                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    ...
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    

    如果wsrep_ready 为OFF,则节点未正确初始化。您可以查看日志以查看是否发生错误。

    如果wsrep_cluster_size 为1,则表示尚未形成簇。该节点独立运行。首先要检查的是wsrep_cluster_address 变量是否设置正确。这是来自文档

    wsrep_cluster_address

    指定集群中节点的 IP 地址。至少一个是 节点加入集群是必需的,但建议 列出所有节点的地址。这样,如果列表中的第一个节点 不可用,加入节点可以使用其他地址。

    更多信息,最好看看

    https://www.percona.com/doc/percona-xtradb-cluster/5.7/configure.html

    【讨论】:

    • 感谢您的帮助,集群似乎工作正常,我的问题是在 node1 上提交后,我没有从 node2 或 node3 获取数据,如果我在插入 stmt 后选择 stmt 5000 毫秒,我可以从其他节点获取数据。但是我们的服务使用队列,服务之间的切换非常快,有时一个服务插入数据,另一个服务器上的第二个服务无法获取数据。
    • 我已将您的代码用作复制案例,谢谢,帮助很大!这是 5.7.20 中的错误,已创建错误以跟踪问题 link to the bug
    • @KennTakara 谢谢。我似乎也遇到了这个错误,如果不是你的报告,我可能永远也找不到原因。