mysql8.0使用PXC实现高可用的示例(Rocky8.0环境)

 更新时间:2025年02月16日 10:00:29   作者:致奋斗的我们  
本文主要介绍了在Rocky8.0环境下搭建MySQL8.0的Percona XtraDB Cluster(PXC)集群,,可以实现数据实时同步、读写分离和高可用性,具有一定的参考价值,感兴趣的可以了解一下

搭建 PXC 集群

Percona XtraDB Cluster (简称 PXC)集群是基于 Galera 2.x library,事务型应用下的通用的多主同步复制插件,主要用于解决强一致性问题,使得各个节点之间的数据保持实时同步以及实现多节点同时读写。提高了数据库的可靠性,也可以实现读写分离,是 MySQL 关系型数据库中大家公认的集群优选方案之一。

准备好下面三台服务器,本文搭建PXC集群基于Rocky8.0环境:

IP端口角色
192.168.1.513306pxc
192.168.1.523306pxc2
192.168.1.533306pxc3

配置hosts解析

[root@localhost ~]# vim /etc/hosts +
192.168.1.51 pxc1
192.168.1.52 pxc2
192.168.1.53 pxc3


或:
# cat >> /etc/hosts << EOF
192.168.1.51 pxc1
192.168.1.52 pxc2
192.168.1.53 pxc3
EOF

用 MySQL 软件模块的命令(三台都需要)

[root@localhost ~]# yum module disable mysql

下载 PXC 安装包

[root@localhost ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

启用PXC80版本

[root@localhost ~]# percona-release setup pxc-80

安装PXC集群

[root@localhost ~]# yum install percona-xtradb-cluster

之后还是对 Percona Server 数据库的初始化:

初始化数据库

应为使用的是8.0版本,部分配置需要在初始化数据库前进行配置,如忽略表名大小写等

[root@pxc1 ~]# vim /etc/my.cnf
...
[mysqld]
server-id=51 #每台mysql的id不能相同

# Binary log expiration period is 604800 seconds, which equals 7 days
binlog_expire_logs_seconds=604800 #二进制日志过期时间为604800秒,等于7天


wsrep_cluster_address=gcomm://192.168.1.51,192.168.1.52,192.168.1.53  #都需要

wsrep_node_address=192.168.1.51   #将#去掉,改成对应IP

wsrep_node_name=pxc1  #集群名字


注意:pxc2和pxc3只需要server-id设置为52和53,集群名字改为PXC2和3即可。

第一个节点需要以引导模式启动:

[root@pxc1 ~]# systemctl start mysql@bootstrap.service

查看临时密码

[root@localhost ~]# grep -i password /var/log/mysqld.log
2025-02-13T13:20:31.423023Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: KsN&IYcog4dq

修改密码

[root@localhost ~]# mysql -uroot -p'KsN&IYcog4dq'

mysql> alter user root@localhost identified by 'mysql@123';

免密登录

[root@localhost ~]# vim /etc/my.cnf

user=root
password=mysql@123

查询集群信息

mysql> show status like 'wsrep%';

查看证书

#(第一个节点)
mysql> show variables like 'pxc_encrypt_cluster_traffic';  
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| pxc_encrypt_cluster_traffic | ON    |
+-----------------------------+-------+
1 row in set (0.05 sec)


[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# ll *.pem
-rw------- 1 mysql mysql 1680 Feb 13 21:54 ca-key.pem
-rw-r--r-- 1 mysql mysql 1120 Feb 13 21:54 ca.pem
-rw-r--r-- 1 mysql mysql 1120 Feb 13 21:54 client-cert.pem
-rw------- 1 mysql mysql 1680 Feb 13 21:54 client-key.pem
-rw------- 1 mysql mysql 1676 Feb 13 21:54 private_key.pem
-rw-r--r-- 1 mysql mysql  452 Feb 13 21:54 public_key.pem
-rw-r--r-- 1 mysql mysql 1120 Feb 13 21:54 server-cert.pem
-rw------- 1 mysql mysql 1680 Feb 13 21:54 server-key.pem

修改证书

将第一个节点的证书复制到第2个和第3个节点上面

#第2,3节点先删除证书
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# rm -f *.pem

#在第1节点进行拷贝
[root@localhost ~]# scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql
The authenticity of host 'pxc2 (192.168.1.52)' can't be established.
ECDSA key fingerprint is SHA256:5HjL01EqJ2nry7DtJVTglQ+GhVzIz54AfeI4AWcUC3E.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes  #需要输入
Warning: Permanently added 'pxc2,192.168.1.52' (ECDSA) to the list of known hos
root@pxc2's password:          #需要输入pxc2,192.168.1.52的开机密码(root)
ca-key.pem                                   100% 1680   942.8KB/s   00:00
ca.pem                                       100% 1120   807.8KB/s   00:00
client-cert.pem                              100% 1120     1.5MB/s   00:00
client-key.pem                               100% 1676     1.1MB/s   00:00
private_key.pem                              100% 1680     1.8MB/s   00:00
public_key.pem                               100%  452   908.5KB/s   00:00
server-cert.pem                              100% 1120     2.1MB/s   00:00
server-key.pem                               100% 1680     1.7MB/s   00:00

[root@localhost ~]# scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql


#再在第2,3节点上修改证书权限
[root@localhost mysql]# chown mysql.mysql *.pem

接着在第二和第三个节点上正常启动数据库服务,命令如下:

[root@pxc2 ~]# systemctl start mysql

[root@pxc3 ~]# systemctl start mysql

查询集群信息

mysql> show status like 'wsrep%';

或:

mysql> show status where Variable_name in ('wsrep_cluster_size','wsrep_cluster_status','wsrep_connected','wsrep_ready');
+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| wsrep_cluster_size   | 3       |
| wsrep_cluster_status | Primary |
| wsrep_connected      | ON      |
| wsrep_ready          | ON      |
+----------------------+---------+
4 rows in set (0.03 sec)

同步状态监控

mysql> select * from performance_schema.pxc_cluster_view;
+-----------+--------------------------------------+--------+-------------+---------+
| HOST_NAME | UUID                                 | STATUS | LOCAL_INDEX | SEGMENT |
+-----------+--------------------------------------+--------+-------------+---------+
| pxc1      | 4fdd3348-ea0d-11ef-8eec-ce7af56f28c3 | SYNCED |           0 |       0 |
| pxc2      | cf90d45e-ea15-11ef-9521-72c20777f912 | SYNCED |           1 |       0 |
| pxc3      | d608c0e9-ea15-11ef-a5fa-42a90e6cebce | SYNCED |           2 |       0 |
+-----------+--------------------------------------+--------+-------------+---------+
3 rows in set (0.00 sec)

节点2,3无需修改密码

加入集群用的就是节点1的密码

查看 PXC 集群状态信息,在任意一个节点执行以下命令:

[root@pxc1 ~]# mysql -uroot -p'mysql@123' -e "show status like 'wsrep_cluster%';"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------------+--------------------------------------+
| Variable_name              | Value                                |
+----------------------------+--------------------------------------+
| wsrep_cluster_weight       | 3                                    |
| wsrep_cluster_capabilities |                                      |
| wsrep_cluster_conf_id      | 3                                    |
| wsrep_cluster_size         | 3                                    |
| wsrep_cluster_state_uuid   | 47f68dce-940c-11ee-85d5-c29e7cbcc6e4 |
| wsrep_cluster_status       | Primary                              |
+----------------------------+--------------------------------------+

节点下线

PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点必须

以引导模式来进行关闭:

[root@localhost ~]# systemctl stop mysql@bootstrap.service

其他节点则可以按照正常方式关闭:

[root@localhost ~]# systemctl stop mysql

 到此这篇关于mysql8.0使用PXC实现高可用的示例(Rocky8.0环境)的文章就介绍到这了,更多相关mysql8.0 PXC高可用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • mysql表类型查询示例详解

    mysql表类型查询示例详解

    这篇文章主要介绍了mysql表类型查询示例详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • Mysql主从复制注意事项的讲解

    Mysql主从复制注意事项的讲解

    今天小编就为大家分享一篇关于Mysql主从复制注意事项的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 找回MySQL管理员root密码的3个妙招

    找回MySQL管理员root密码的3个妙招

    最近笔者的一台mysql服务器忘记了超级管理员root密码,而mysql修改密码必须得知道旧密码的情况下才能进行,真的很郁闷,找了很多方法都无 效,最终找到了解决方法,下面把mysql root密码找回妙招分享给大家,感兴趣的朋友一起看看吧
    2022-11-11
  • MySQL如何快速批量插入1000w条数据

    MySQL如何快速批量插入1000w条数据

    这篇文章主要给大家介绍了关于MySQL如何快速批量插入1000w条数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • MySql存储过程循环的使用分析详解

    MySql存储过程循环的使用分析详解

    这篇文章主要介绍了MySql存储过程循环的使用分析详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • mysql日期函数TO_DAYS()函数的详细讲解

    mysql日期函数TO_DAYS()函数的详细讲解

    在SQL中我们经常需要根据时间字段查询数据,今天用到一个好用的时间字段,用来查询一整天的数据,下面这篇文章主要给大家介绍了关于mysql日期函数TO_DAYS()函数的相关资料,需要的朋友可以参考下
    2022-08-08
  • MySQL Workbench导出表结构与数据的实现步骤

    MySQL Workbench导出表结构与数据的实现步骤

    MySQL Workbench是一个强大的数据库设计工具,提供了便捷的数据导入导出功能,本文就来介绍一下MySQL Workbench导出表结构与数据的实现步骤,感兴趣的可以了解一下
    2024-05-05
  • mysql缓冲和缓存设置详解

    mysql缓冲和缓存设置详解

    本文主要给大家讲解的是mysql优化过程中比较重要的2个参数缓冲和缓存的设置,希望大家能够喜欢
    2016-12-12
  • 全面了解mysql中utf8和utf8mb4的区别

    全面了解mysql中utf8和utf8mb4的区别

    下面小编就为大家带来一篇全面了解mysql中utf8和utf8mb4的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Mysql InnoDB B+树索引目录项记录页管理

    Mysql InnoDB B+树索引目录项记录页管理

    这篇文章主要为大家介绍了Mysql InnoDB B+树索引目录项记录页管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论