配置MariaDB集群时无法通过套接字连接本地MySQL服务器
首先得明确:你遇到的是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,节点会一直等待集群出现主节点,不会自行初始化,就卡在了这个状态。
正确的集群初始化步骤
先停止所有节点的mysqld服务
在每个节点上执行:systemctl stop mariadb # 如果是老版本用service命令:service mysqld stop在其中一个节点执行集群初始化(bootstrap)
选一个节点作为初始主节点,执行带bootstrap参数的启动命令——这个操作会让该节点主动创建集群,而不是等待其他节点:systemctl start mariadb --wsrep-new-cluster # 或者直接用mysqld命令启动(适合手动调试): # mysqld --wsrep-new-cluster --user=mysql &这个命令其实已经相当于自动设置了
wsrep_provider_options="pc.bootstrap=1",不需要再手动连接执行那个SQL了。验证初始节点的服务状态
此时这个节点的mysqld会完成完整启动流程,创建socket文件,你可以正常连接:mysql -uroot -ppass连接后执行以下命令确认集群状态:
SHOW STATUS LIKE 'wsrep_cluster_size'; -- 应该显示1 SHOW STATUS LIKE 'wsrep_ready'; -- 应该显示ON启动剩余节点的服务
依次在另外两个节点上启动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

