
背景最近在进行 MySQL 的 PXC 集群搭建使用和研究
前期已完成了一篇记录文章 : 【CentOS7 下 MySQL 之 PXC 集群部署【Docker+多机多节点】】
但是,毕竟不是所有人都熟悉 docker
而作为开发人员,还是习惯于原生状态的安装流程
所以,在此整理官方指导的PXC 集群配置步骤
欢迎指摘 …
【注】:Percona XtraDB Cluster(简称 PXC 集群)—— 业界主流的MySQL集群方案
CentOS 版本: CentOS Linux release 7.9.2009 (Core)
PXC 版本: Percona XtraDB Cluster 5.7官网指导 ——
【在 CentOS上 配置 Percona XtraDB 集群】
前期准备
【注】:PXC集群部署,会自行安装MySQL服务,建议操作前卸载原来的MySQL
Vmware 虚拟机PXC 集群节点越多,数据同步的速度就越慢(建议不要太多!)
在此,我以三台创建运行的
CentOS7作为宿主机,进行配置操作演示
虚拟机 ip | 端口 | 角色 |
|---|---|---|
192.168.80.221 | 3306 | 第一个 节点 |
192.168.80.222 | 3306 | 第二个 节点 |
192.168.80.223 | 3306 | 第三个 节点 |
PXC 集群数据同步的速度取决配置最低的节点
PXC集群只支持InnoDB引擎
mariadb-libs因为
CentOS7默认捆绑安装了mariadb-libs,为了不影响PXC的使用,需要先卸载!
yum -y remove mari*PXC 环境所涉及的端口3306: # mysql 实例端口
4567: # PXC cluster 相互通讯的端口
4444: # 用于 SST(State Snapshot Transfer): 全量传输
4568: # 用于 IST(Incremental state Transfer): 增量传输传送
SELINUX、将 MySQL 数据库服务停止安全增强型
Linux(Security-Enhanced Linux)SELinux主要由美国国家安全局开发
"SELINUX" 属性值设置成 disabled,然后 reboot 重启vi /etc/selinux/config [root@localhost ~]# yum -y install ntp ntpdate
[root@localhost ~]# ntpdate 0.asia.pool.ntp.org
[root@localhost ~]# hwclock --systohc
[root@localhost ~]# date
2021年 01月 08日 星期五 09:54:23 CST搭建 PXC 集群官方指导 ——
【在 Red Hat Enterprise Linux 和 CentOS 上安装 Percona XtraDB 集群】
qpress、PXC 安装包
PXC 安装包的下载了
一般指导都是支持在线安装的,但我发现,虚拟机里无法安装
本身下载速度慢,而且最新版本资源比较大
此处,我以下载 【Percona XtraDB 群集 5.7】 为例 
"需要:percona-xtrabackup-24 >= 2.4.21"
所以,继续下载了 【Percona-XtraBackup-2.4】【提示】
1
本人发现:不论在官网使用浏览器下载,还是使用 wget 命令下载都提示文件缺失,解压异常,最后选择迅雷下载2 有需要这些资源的,在此提供【百度云链接,提取码:fd0g 】 3 如果是宝塔系统,已安装了mysql会有冲突,所以要卸掉原来的mysql数据库
".rpm" 文件,上传到 Linux 系统,此处我选择的是 "/www/server/download"
PXC 命令在三个虚拟机上分别安装
PXC程序
".rpm" 文件的目录中,执行命令:yum localinstall *.rpm
注意,如果提示还有其他需要使用的依赖包,进行下载后再操作一遍命令!
"mysqld.cnf" 文件"etc/my.cnf" 文件中出现如下信息
其实,我们操作的配置文件,只是
"/etc/percona-xtradb-cluster.conf.d/"目录中的三个!mysql 的常用配置信息都在 "mysqld.cnf" 文件, pxc 集群的配置信息都在 "wsrep.cnf" 文件
"mysqld.cnf"中配置信息对比参考如下(注意,我添加了三个参数)
并且,对参数 "server-id",赋值唯一的ID (三台服务器都要配置)# Template my.cnf for PXC
# Edit to your requirements.
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
#PXC集群中MySQL实例的唯一ID,不能重复,必须是数字
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin
log_slave_updates
expire_logs_days=7
#数据库字符集
character_set_server = utf8
#运行远程访问的IP地址
bind-address = 0.0.0.0
#跳过DNS解析
skip-name-resolve
#skip-grant-tables
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0mysql 登录密码 cat /var/log/mysqld.log | grep "A temporary password"
以下面的打印信息为例,默认账号 root,密码为:BJuk-xlad8XS[root@localhost download]# cat /var/log/mysqld.log | grep "A temporary password"
2021-01-25T08:33:57.335210Z 1 [Note] A temporary password is generated for root@localhost: BJuk-xlad8XS初始化,建议参考
【附录 - 如何重置 root 密码】,感觉出错少,更加方便
[adminPXC] 及密码[201107070]自定义即可
用于 PXC 集群中的数据传输
依次执行下面三条 SQL 语句:CREATE USER 'adminPXC'@'localhost' IDENTIFIED BY '201107070';
GRANT all privileges ON *.* TO 'adminPXC'@'localhost';
FLUSH PRIVILEGES;
【提示一】用户名密码,要与配置文件"wsrep.cnf"中的wsrep_sst_auth="adminPXC:201107070"对应【提示二】三台服务器都要配置,mysql的重启命令:systemctl restart mysql.service【提示三】在 节点启动前,最好 关闭mysql服务:systemctl stop mysql.service
本次演示,我选择
[192.168.80.221],作为第一个节点主机
"wsrep.cnf" 的 PXC 配置信息[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
#PXC集群节点的IP
wsrep_cluster_address=gcomm://192.168.80.221,192.168.80.222,192.168.80.223
# In order for Galera to work correctly binlog format should be ROW
#基于ROW复制(安全可靠)
binlog_format=ROW
# MyISAM storage engine has only experimental support 默认引擎
default_storage_engine=InnoDB
# Slave thread to use
wsrep_slave_threads= 8
wsrep_log_conflicts
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
#主键自增长不锁表
innodb_autoinc_lock_mode=2
# Node IP address
#当前节点的IP地址
#wsrep_node_address=192.168.80.221
# Cluster name PXC 集群的名称
wsrep_cluster_name=pxc-moTzxx
#If wsrep_node_name is not specified, then system hostname will be used
#当前节点的名称
wsrep_node_name=pxc1
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
#同步严厉模式
pxc_strict_mode=ENFORCING
# SST method 同步方法
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method 同步使用的账户
wsrep_sst_auth="adminPXC:201107070"每个主机的
server-id和wsrep_node_addres**、**wsrep_node_name保持不同即可
systemctl start mysql@bootstrap.servicesystemctl status mysql@bootstrap.service
此处,附上对第一个节点的操作指令
systemctl start mysql@bootstrap.servicesystemctl stop mysql@bootstrap.servicesystemctl restart mysql@bootstrap.servicesystemctl status mysql@bootstrap.service"Navicat" 等工具进行连接
执行 SQL 语句:show status like 'wsrep_cluster%';
显示效果如下:
【提示】:一定要等第一个节点启动,可以连接后,再考虑第二个、第三个节点的启动!
本次演示,我选择
[192.168.80.222],作为第二个节点主机
注意:非主节点的管理命令(非第一个启动的 PXC 节点)service mysql start
service mysql stop
service mysql restart
service mysql status[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
#PXC集群节点的IP
wsrep_cluster_address=gcomm://192.168.80.221,192.168.80.222,192.168.80.223
# In order for Galera to work correctly binlog format should be ROW
#基于ROW复制(安全可靠)
binlog_format=ROW
# MyISAM storage engine has only experimental support 默认引擎
default_storage_engine=InnoDB
# Slave thread to use
wsrep_slave_threads= 8
wsrep_log_conflicts
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
#主键自增长不锁表
innodb_autoinc_lock_mode=2
# Node IP address
#当前节点的IP地址
#wsrep_node_address=192.168.80.222
# Cluster name PXC 集群的名称
wsrep_cluster_name=pxc-moTzxx
#If wsrep_node_name is not specified, then system hostname will be used
#当前节点的名称
wsrep_node_name=pxc2
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
#同步严厉模式
pxc_strict_mode=ENFORCING
# SST method 同步方法
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method 同步使用的账户
wsrep_sst_auth="adminPXC:201107070"
第三个节点
【PXC3】基本操作一样,只是配置文件的参数稍有不同
在此,我将三个成功启动的
mysql服务,通过"Navicat"连接
"test_pxc"
进而, 创建了一个数据表 "pxc_users"
然后,随意,在数据表中添加了几条记录
PXC 节点重启问题
【官方 - 重新启动集群节点】不同于Replication集群的重启操作,**PXC** 集群需要分好几种情况
这种情况常见于测试练习时,虚拟机关机的情况
PXC集群的测试
发现,都无法启动了
提示信息如下: 
"/var/lib/mysql/grastate.dat" 文件
然后,将 "safe_to_bootstrap: 1" 的主机作为第一个节点进行启动
但是,我发现所有的主机参数都为 "0""safe_to_bootstrap" 参数手动改为 "1"
然后将其作为第一个节点启动vim /var/lib/mysql/grastate.dat
systemctl start mysql@bootstrap.serviceservice mysql start测试同步状况,我这里是完全没有问题的 …
这种情况,一般就是停服检测、数据维护才会全部退出 …
"grastate.dat" 文件(默认会在"/var/lib/mysql/" 目录中)
其中 safe_to_bootstrap: 1,
再次启动集群时,则先启动该节点cat /var/lib/mysql/grastate.dat
systemctl start mysql@bootstrap.service这种情况,多发生在数据库冷备份时,选取其中一台主机,正常退出
service mysql stop
service mysql start
注意:这种情况的前提 —— 存在正常工作状态中的PXC节点
PXC 集群实际应用探讨ThinkPHP5 上的使用以鄙人常用的
ThinkPHP5框架使用为例
那么,在 中的配置参考如下:
MyCat 部署读写分离【提示】:
“Replication” 集群部署通常来讲,对于数据库集群部署,**
"PXC"** 都会拿来与"Replication"进行对比!

【Replication 部署方案】:

【PXC 部署方案】:

注意,两种方案不是对立的,一个大型项目中,完全可以根据自己的业务 :
结合使用、取长补短**!** 可对比参考文章 —— 【CentOS7 下 MySQL5.7.32 主从复制+同步配置操作 (一主多从+多主多从)】
附录mysql 的开启自启动mysql 会开启自启动,感觉很方便
但是,对于部署了 PXC 集群的数据库,会因为节点启动方式的不同有影响建议关闭开机启动
mysql 版本与依赖包安装冲突file /usr/include/mysql/mysql/plugin.h from install of Percona-XtraDB-Cluster-devel-57-5.7.32-31.47.1.el7.x86_64 conflicts with file from package bt-mysql57-5.7.32-1.el7.x86_64mysqlyum -y remove bt-mysql57-5.7.32-1.el7.x86_64"mysqld.cnf" 文件中
配置参数 :skip-grant-tablesmysql 服务systemctl restart mysql.servicemysql -uroot -p,回车后无需密码SQL 语句:flush privileges; #刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; #重置新密码
exit; #修改完毕,退出 mysqlmysql 服务即可systemctl restart mysql.service