【最佳实践】MySQL数据库迁移到PXC集群

2023年11月10日 825点热度 0人点赞 0条评论

借本次数据库迁移实践,再次总结一下MySQL数据库迁移到PXC的最佳操作路径。
1、源数据库配置 xtrabackup 工具,快速备份源数据到nfs;
2、目的数据库集群配置最新版本的 MySQL PXC 集群软件;
3、目的数据库集群节点 node1 采用 xtrabackup 导入备份数据;
4、使用合适的配置文件在 node1 拉起数据库;
5、node2 加入集群,node3 加入集群。
以上1、2步比较简单,在此略过,以下强调后面的步骤,请项目参考使用。

三、node1 导入备份数据

■ 准备数据路径

mkdir -p /u01/mysql/data
mkdir -p /u01/mysql/tmp
chown -R mysql.mysql /u01/mysql

■ 删除datadir所有文件

DATADIR=/u01/mysql/data
cd ${DATADIR}
rm -rf *

■ 设置环境变量

USER=root
PASSWORD='passwd'
FULL_DIR=/u01/mysqlbak/2023-10-18/
PARALLEL=10

■ 准备全量备份的日志

LOG_FILE=/tmp/prepareAll_`date +"%Y%m%d-%H%M"`.log
xtrabackup --prepare --apply-log-only --parallel=${PARALLEL} --target-dir=${FULL_DIR} > ${LOG_FILE} 2>&1 &

【耗时】8分钟,573G

■ 全备份准备

LOG_FILE=/tmp/prepareLast_`date +"%Y%m%d-%H%M"`.log
xtrabackup --prepare --parallel=${PARALLEL} --target-dir=${FULL_DIR} > ${LOG_FILE} 2>&1 &

【耗时】4分钟,573G

■ 拷回数据

LOG_FILE=/tmp/copyback_`date +"%Y%m%d-%H%M"`.log
xtrabackup --user=${USER} --password=${PASSWORD} --copy-back --parallel=${PARALLEL} --target-dir=${FULL_DIR} > ${LOG_FILE} 2>&1 &

【耗时】34分钟,573G

四、node1 拉起数据库

■ 修改数据目录权限和属性

chown -R mysql:mysql ${DATADIR}

■ 启动

注意,此时需事先配置数据库参数文件

systemctl start mysql@bootstrap

五、node2 加入集群

只要配置好合适的配置文件,node2 加入集群非常简单,只需执行启动命令:

systemctl start mysql

此时查看 node1、node2 的数据库日志,可以看到双方角色的变换,node1 作为 DONOR 通过 SST 将数据全量同步给了 node2,之后 node2 成功加入集群。

六、node3 加入集群

七、PXC配置文件是本次实践的重点内容

需确保源数据库的配置参数与新集群的配置参数合理组合。

node1

[root@node1:1 /u01]# cat /etc/my.cnf

[client]
socket = /u01/mysql/mysql.sock

[mysqld]
datadir = /u01/mysql/data/
tmpdir = /u01/mysql/tmp/
binlog_expire_logs_seconds=604800
socket = /u01/mysql/mysql.sock
log-error=/var/log/mysqld.log
gtid_mode = on
enforce_gtid_consistency = on
log-bin = mysql-bin
binlog_format = row
lower_case_table_names=1
innodb_file_per_table=1
innodb_strict_mode=0
user=mysql
default-storage-engine=INNODB
symbolic-links=0
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 50G
innodb_thread_concurrency = 8
innodb_log_file_size = 512M
innodb_log_files_in_group=8
secure_file_priv=''
local_infile = 1
max_connections=2000
max_connect_errors=100
default-time-zone='+08:00'
log_timestamps=SYSTEM
innodb_thread_concurrency=128
innodb_read_io_threads=16
innodb_write_io_threads=16
transaction-isolation=READ-COMMITTED
general-log=1
general-log-file=/u01/mysql/mysqllog.log
long_query_time = 10
slow_query_log = 1
slow_query_log_file=/u01/mysql/myslow.log

wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
wsrep_slave_threads=8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2

server_id = 86
wsrep_cluster_address=gcomm://[2409:8002:5a06:120:10:0:2:c056]:4567,[2409:8002:5a06:120:10:0:2:c057]:4567,[2409:8002:5a06:120:10:0:2:c058]:4567
wsrep_node_address=[2409:8002:5a06:120:10:0:2:c056]:4567
wsrep_node_incoming_address=[2409:8002:5a06:120:10:0:2:c056]:3306
wsrep_sst_receive_address=[2409:8002:5a06:120:10:0:2:c056]:4444
wsrep_cluster_name=pxc-cluster-tjyd-zqzc
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
pxc_encrypt_cluster_traffic=OFF
wsrep_provider_options="gmcast.listen_addr=tcp://[2409:8002:5a06:120:10:0:2:c056]:4567;ist.recv_addr=tcp://[2409:8002:5a06:120:10:0:2:c056]:4568"

node2

[root@node2:1 /u01]# cat /etc/my.cnf

前面部分同node1

server_id = 87
wsrep_cluster_address=gcomm://[2409:8002:5a06:120:10:0:2:c056]:4567,[2409:8002:5a06:120:10:0:2:c057]:4567,[2409:8002:5a06:120:10:0:2:c058]:4567
wsrep_node_address=[2409:8002:5a06:120:10:0:2:c057]:4567
wsrep_node_incoming_address=[2409:8002:5a06:120:10:0:2:c057]:3306
wsrep_sst_receive_address=[2409:8002:5a06:120:10:0:2:c057]:4444
wsrep_cluster_name=pxc-cluster-tjyd-zqzc
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
pxc_encrypt_cluster_traffic=OFF
wsrep_provider_options="gmcast.listen_addr=tcp://[2409:8002:5a06:120:10:0:2:c057]:4567;ist.recv_addr=tcp://[2409:8002:5a06:120:10:0:2:c057]:4568"

node3

类似 node2,此处略过

IPv6支持

以上配置文件可见,PXC集群已配置了集群内外部的IPv6支持。

liking

这个人很懒,什么都没留下

文章评论