PXC集群特点

1、多主架构,集群没有主从

2、节点的数据强一致性

3、并行复制

4、集群中节点故障,在添加新节点之后,节点会进行自动同步,不需要手动同步

5、支持增量复制也支持全量复制

使用的端口

3306:用来提供数据库服务

4567:集群中节点之间的通信端口

4568:节点之间增量复制的端口

4444:节点之间全量复制的端口

服务器信息

IP 角色
172.16.1.12 PXC-A
172.16.1.13 PXC-B
172.16.1.14 PXC-C

添加percona yum源

1
2
yum install -y  http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

安装完以上操作之后,yum.repos.d仓库下会生成一个percona-release.repo这么一个yum源

修改源文件

1
2
3
4
5
6
[root@localhost ~]# vi /etc/yum.repos.d/percona-release.repo
修改
gpgcheck = 0 # 第八行
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Percona # 第九行删除
gpgcheck = 0 # 第十四行
# 十四行以下全部删除

安装pxc

1
yum -y install Percona-XtraDB-Cluster-57

修改mysql配置文件

1
2
3
4
5
6
7
8
9
10
vi /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[mysqld]
server-id=1
datadir=/usr/local/pxc/data
socket=/var/lib/mysql/mysql.sock
log-error=/usr/local/psc/log/mysqld.log
pid-file=/usr/local/pxc/data/mysqld.pid
log-bin=mysql-bin
log_slave_updates
expire_logs_days=7

将配置文件拷贝到其他节点

1
2
scp /etc/percona-xtradb-cluster.conf.d/mysqld.cnf root@172.16.1.13:/etc/percona-xtradb-cluster.conf.d/
scp /etc/percona-xtradb-cluster.conf.d/mysqld.cnf root@172.16.1.14:/etc/percona-xtradb-cluster.conf.d/

修改其他节点的mysql文件

1
2
3
4
# PXC-B
sed -i 's/server-id=1/server-id=2' /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
# PXC-C
sed -i 's/server-id=1/server-id=3' /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

创建数据目录

1
2
3
# 所有节点执行
mkdir -p /usr/local/pxc/data /usr/local/pxc/log
chown -R mysql:mysql /usr/local/pxc/ # 给目录授权

修改节点之间通信的配置文件

1
2
3
4
5
6
7
vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_cluster_address=gcomm://172.16.1.12,172.16.1.13,172.16.1.14 #指定集群的节点
wsrep_node_address=172.16.1.12 # 指定当前节点的ip
wsrep_cluster_name=pxc-cluster # 集群名称
wsrep_node_name=pxc-cluster-node-1 # 本节点名称
pxc_strict_mode=PERMISSIVE # 同步数据时的为宽容模式
wsrep_sst_auth="sstuser:123.com" # sst全量备份时使用的身份验证的用户

将配置文件拷贝到其他节点

1
2
scp /etc/percona-xtradb-cluster.conf.d/wsrep.cnf root@172.16.1.13:/etc/percona-xtradb-cluster.conf.d/
scp /etc/percona-xtradb-cluster.conf.d/wsrep.cnf root@172.16.1.14:/etc/percona-xtradb-cluster.conf.d/

修改配置文件

1
2
3
4
5
6
vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_node_address=172.16.1.13
wsrep_node_name=pxc-node-2
vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_node_address=172.16.1.14
wsrep_node_name=pxc-node-3

放行端口

1
2
3
4
5
firewall-cmd --add-port=3306/tcp
firewall-cmd --add-port=4567/tcp
firewall-cmd --add-port=4568/tcp
firewall-cmd --add-port=4444/tcp
setenforce 0

修改mysqld配置文件

1
2
3
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
添加:(mysqld模块中)
skip-grant-tables # root没有密码 使用这个选项跳过权限认证

启动服务

1
systemctl restart mysql@bootstrap

登录mysql

1
2
mysql
mysql> update mysql.user set authentication_string=PASSWORD("123.com") where User="root";

修改mysqld配置文件

1
2
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
skip-grant-tables //删除

重启服务

1
systemctl restart mysql@bootstrap

登录mysql

1
2
3
4
5
mysql -u root -p123.com
mysql> set password=PASSWORD("123.com");
mysql> alter user root@"localhost" password expire never;
mysql> grant all on *.* to "sstuser"@"localhost" identified by "123.com";
mysql> flush privileges;

其他节点启动mysql

1
2
3
4
节点二:
systemctl start mysqld
节点三:
systemctl start mysqld

验证:

在节点一登录mysql创建几个库,在节点二和三查看是否同步

宕机后恢复仍然同步
验证:
将节点三的mysql停止运行stop
systemctl stop mysqld
在节点一再次创建库
节点二:查看是否同步成功
恢复节点三,查看时候同步数据