You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置MariaDB集群时无法通过套接字连接本地MySQL服务器

解决MariaDB Galera集群初始化时无法连接本地socket的问题

首先得明确:你遇到的是Galera集群初始化的典型卡点——虽然mysqld进程已经启动,但因为集群还没有完成主节点的初始化,mysqld卡在了集群成员连接的阶段,并没有真正完成MySQL服务的启动流程,所以/var/run/mysqld/mysqld.sock这个socket文件根本没被创建,自然会报连接错误。

从你给出的error.log也能看出来:

2018-02-01 15:13:23 140529975699392 [Note] WSREP: gcomm: connecting to group 'my_wsrep_cluster', peer '10.0.0.42:,10.0.0.44:,10.0.0.43:'
2018-02-01 15:13:23 140529975699392 [Note] WSREP: (71d7b5ed, 'tcp://0.0.0.0:4567') connection established to 71d7b5ed tcp://10.0.0.44:4567

所有节点都在尝试连接集群内的其他节点,但没有任何一个节点主动发起集群初始化,加上你配置了pc.wait_prim=no,节点会一直等待集群出现主节点,不会自行初始化,就卡在了这个状态。

正确的集群初始化步骤

  1. 先停止所有节点的mysqld服务
    在每个节点上执行:

    systemctl stop mariadb
    # 如果是老版本用service命令:service mysqld stop
    
  2. 在其中一个节点执行集群初始化(bootstrap)
    选一个节点作为初始主节点,执行带bootstrap参数的启动命令——这个操作会让该节点主动创建集群,而不是等待其他节点:

    systemctl start mariadb --wsrep-new-cluster
    # 或者直接用mysqld命令启动(适合手动调试):
    # mysqld --wsrep-new-cluster --user=mysql &
    

    这个命令其实已经相当于自动设置了wsrep_provider_options="pc.bootstrap=1",不需要再手动连接执行那个SQL了。

  3. 验证初始节点的服务状态
    此时这个节点的mysqld会完成完整启动流程,创建socket文件,你可以正常连接:

    mysql -uroot -ppass
    

    连接后执行以下命令确认集群状态:

    SHOW STATUS LIKE 'wsrep_cluster_size'; -- 应该显示1
    SHOW STATUS LIKE 'wsrep_ready'; -- 应该显示ON
    
  4. 启动剩余节点的服务
    依次在另外两个节点上启动mysqld服务:

    systemctl start mariadb
    

    这些节点会自动通过你配置的gcomm://地址加入已创建的集群,等待几秒后再去任意节点执行SHOW STATUS LIKE 'wsrep_cluster_size';,应该显示3,说明集群搭建完成。

额外检查点

  • 确认所有节点的my.cnf中,wsrep_cluster_name的取值完全一致,否则节点无法加入同一集群
  • 确认wsrep_provider指向正确的Galera库文件,比如:wsrep_provider=/usr/lib64/galera/libgalera_smm.so(不同系统路径可能不同)
  • 防火墙需要开放Galera集群需要的端口:4567(集群通信)、4568(增量同步IST)、4444(全量同步SST)
  • 如果开启了SELinux,需要允许mysqld的网络连接权限,可执行:setsebool -P mysqld_can_network_connect 1

内容的提问来源于stack exchange,提问作者rokpoto.com

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:21:05