mysql8.0使用PXC實現(xiàn)高可用的示例(Rocky8.0環(huán)境)
搭建 PXC 集群
Percona XtraDB Cluster (簡稱 PXC)集群是基于 Galera 2.x library,事務(wù)型應(yīng)用下的通用的多主同步復(fù)制插件,主要用于解決強一致性問題,使得各個節(jié)點之間的數(shù)據(jù)保持實時同步以及實現(xiàn)多節(jié)點同時讀寫。提高了數(shù)據(jù)庫的可靠性,也可以實現(xiàn)讀寫分離,是 MySQL 關(guān)系型數(shù)據(jù)庫中大家公認的集群優(yōu)選方案之一。
準備好下面三臺服務(wù)器,本文搭建PXC集群基于Rocky8.0環(huán)境:
IP | 端口 | 角色 |
---|---|---|
192.168.1.51 | 3306 | pxc |
192.168.1.52 | 3306 | pxc2 |
192.168.1.53 | 3306 | pxc3 |
配置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 數(shù)據(jù)庫的初始化:
初始化數(shù)據(jù)庫
應(yīng)為使用的是8.0版本,部分配置需要在初始化數(shù)據(jù)庫前進行配置,如忽略表名大小寫等
[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 #將#去掉,改成對應(yīng)IP wsrep_node_name=pxc1 #集群名字 注意:pxc2和pxc3只需要server-id設(shè)置為52和53,集群名字改為PXC2和3即可。
第一個節(jié)點需要以引導(dǎo)模式啟動:
[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%';
查看證書
#(第一個節(jié)點) 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
修改證書
將第一個節(jié)點的證書復(fù)制到第2個和第3個節(jié)點上面
#第2,3節(jié)點先刪除證書 [root@localhost ~]# cd /var/lib/mysql [root@localhost mysql]# rm -f *.pem #在第1節(jié)點進行拷貝 [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節(jié)點上修改證書權(quán)限 [root@localhost mysql]# chown mysql.mysql *.pem
接著在第二和第三個節(jié)點上正常啟動數(shù)據(jù)庫服務(wù),命令如下:
[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)
同步狀態(tài)監(jiān)控
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)
節(jié)點2,3無需修改密碼
加入集群用的就是節(jié)點1的密碼
查看 PXC 集群狀態(tài)信息,在任意一個節(jié)點執(zhí)行以下命令:
[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 | +----------------------------+--------------------------------------+
節(jié)點下線
PXC 集群允許動態(tài)下線節(jié)點,但需要注意的是節(jié)點的啟動命令和關(guān)閉命令必須一致,如以引導(dǎo)模式啟動的第一個節(jié)點必須
以引導(dǎo)模式來進行關(guān)閉:
[root@localhost ~]# systemctl stop mysql@bootstrap.service
其他節(jié)點則可以按照正常方式關(guān)閉:
[root@localhost ~]# systemctl stop mysql
到此這篇關(guān)于mysql8.0使用PXC實現(xiàn)高可用的示例(Rocky8.0環(huán)境)的文章就介紹到這了,更多相關(guān)mysql8.0 PXC高可用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL如何快速批量插入1000w條數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于MySQL如何快速批量插入1000w條數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03mysql日期函數(shù)TO_DAYS()函數(shù)的詳細講解
在SQL中我們經(jīng)常需要根據(jù)時間字段查詢數(shù)據(jù),今天用到一個好用的時間字段,用來查詢一整天的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于mysql日期函數(shù)TO_DAYS()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-08-08MySQL Workbench導(dǎo)出表結(jié)構(gòu)與數(shù)據(jù)的實現(xiàn)步驟
MySQL Workbench是一個強大的數(shù)據(jù)庫設(shè)計工具,提供了便捷的數(shù)據(jù)導(dǎo)入導(dǎo)出功能,本文就來介紹一下MySQL Workbench導(dǎo)出表結(jié)構(gòu)與數(shù)據(jù)的實現(xiàn)步驟,感興趣的可以了解一下2024-05-05