环境介绍:
mysql 5.7版本
PXC集群两个节点:
10.9.21.179
10.9.21.178
从节点:
10.9.21.115(普通主从,数据库软件为普通版本,非集群版本)
现在的目的是要把10.9.21.115转换成PXC集群的节点,采用IST增量同步的方式来减小对PXC主库的影响;
疑问:
1.PXC 物理备份,可以直接使用普通的数据库软件加载打开吗?
可以,我从PXC使用innobackex备份,然后使用不同版本的mysql可以打开
2.PXC软件可以作为从库来运行吗,也就是说pxc集群软件可以作为单点的数据库运行吗?
可以,安装pxc软件,可以作为单点的模式运行!所以再向已有PXC集群添加节点的时候,可以
直接安装PXC的软件作为从库,然后直接修改配置文件进行IST即可!
3.普通版本数据库物理备份,可以被PXC集群加载吗?
可以,没试验,但是肯定可以;因为pxc软件可以作为单点的普通的数据库来运行!
4.给集群添加节点,新加的节点的数据库软件必要要版本一模一样吗?比如说主库5.7.27
那么新加的 必须是5.7.27?小版本号可以不一样吗?
小版本号没要求(5.7即可),但是建议保持一样!
整体思路:
首先找个相对空闲的时间点(因为如果比较繁忙的话,gcache中可能无法保留IST需要所有binlog
+key 的写集,进而不能进行增量同步),然后stop slave,然后由于从库是普通的版本数据库,所以需要先把从库数据库软件卸载,然后安装上对应主库版本的PXC软件,然后根据从库应用到的gtid点中的xid,写进从库的grastate.dat中,然后启动从库,自动进行IST加入到集群中;
(如果是就是为了增加节点,可以直接给从库安装PXC软件,然后修改my.cnf,进行IST,来实现增加节点的目的)
具体操作:
1.选择空闲的时间,停掉主从复制;
stop slave ,
2.确认从库已经应用完了reley log,这个很关键,必须要准确!
多次执行show master status;看看是否还在变化如果不变化了,如果不变化了,那么执行
使用mysqlbinlog工具格式化下最后一个reley log,看看最后的xid是不是show master status
中的最大的,具体如下所示,reley log中的最后一个xid为24,show master status 显示的从库应用到的最大的xid也是24 ,说明从库确实把reley log应用完了;
[root@beijing-fuli-hadoop-04 mysqldata]# mysqlbinlog -vv relay-log.000002 >relay-log2
[root@beijing-fuli-hadoop-04 mysqldata]# tail -n 20 relay-log2
# at 4071897
#191023 21:43:37 server id 10921178 end_log_pos 4073716 CRC32 0x4346f78f Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1571838217/*!*/;
/*!40000 ALTER TABLE `lam_case_customer_tel` ENABLE KEYS */
/*!*/;
# at 4072048
#191023 21:45:20 server id 10921178 end_log_pos 4073781 CRC32 0x135eee62 GTID last_committed=20 sequence_number=21 rbr_only=no
SET @@SESSION.GTID_NEXT= ‘ 103581fc-0aa3-ee16-5dcf-a9ba4a682594:24‘/*!*/;
# at 4072113
#191023 21:45:20 server id 10921178 end_log_pos 4073933 CRC32 0x7ed4c26b Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1571838320/*!*/;
SET @@session.foreign_key_checks=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
DROP TABLE `lam_case_customer_tel` /* generated by server */
/*!*/;
SET @@SESSION.GTID_NEXT= ‘AUTOMATIC’ /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
root@localhost : (none) 22:11:29>show master status;
+——————+———-+————–+——————+——————————————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————————————-+
| mysql-bin.000001 | 4072005 | | | 103581fc-0aa3-ee16-5dcf-a9ba4a682594:1-24 |
+——————+———-+————–+——————+——————————————-+
注意:一定要在relay-log文件中找到最后一个xid,因为只有relay-log才是原汁原味的主库的binlog,
才能找到最后执行的xid(gtid)值,因为通过主从异步复制同步过来的事务,在从库binlog文件中的xid值
是按着从库自己的事务ID来计算,所以一般是都是不一样的(99.9%情况下不一样)
3.关闭从库,卸载mysql软件,安装相应的PXC软件
3.1:关闭
[root@beijing-fuli-hadoop-04 mysqldata]# /etc/init.d/mysql stop
Stopping mysqld: [ OK ]
3.2:备份配置文件,也可以不用备份,因为当你卸载的时候,会自动备份成
my.cnf_backup-20191023-2226这样的命名规范的文件!
[root@beijing-fuli-hadoop-04 mysqldata]# cp /etc/my.cnf /etc/my.cnf_bak
3.3:卸载mysql软件
[root@beijing-fuli-hadoop-04 mysqldata]# yum remove Percona*
如果卸载PXC 使用:yum remove Percona-XtraDB*
3.4:安装PXC软件:
[root@beijing-fuli-hadoop-04 mysqldata]#yum install -y Percona-XtraDB-Cluster-server-56
4.编辑从库的grastate.dat文件
将uuid修改成主PXC集群的wsrep_cluster_state_uuid参数的值,seqno修改为前面从库relay-log中的最后一个XId的值;
root@localhost : share_cuishou 22:31:37>show status like ‘wsrep_cluster_state_uuid’;
+————————–+————————————–+
| Variable_name | Value |
+————————–+————————————–+
| wsrep_cluster_state_uuid | efca7e03-f55c-11e9-a230-5645b597da6b |
+————————–+————————————–+
1 row in set (0.00 sec)
[root@beijing-fuli-hadoop-01 mysqldata]# cat grastate.dat
# GALERA saved state
version: 2.1
uuid: efca7e03-f55c-11e9-a230-5645b597da6b
seqno: 24
safe_to_bootstrap: 0
5.编辑从库的配置文件(my.cnf),添加上必要的PXC集群的参数
需要注意的是:
1).wsrep_cluster_address 写上主集群中的某个节点的地址(我习惯把集群上节点都写上)
2).wsrep_cluster_name 写上集群的名字
3)wsrep_sst_donor 为主PXC集群的某一个读节点(尽量减少对线上的影响)
6.启动数据库
[root@beijing-fuli-hadoop-04 mysqldata]# /etc/init.d/mysql start
7.验证数据库是否正常:
至此添加节点完成