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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 借本次数据库迁移实践,再次总结一下MySQL数据库迁移到PXC的最佳操作路径。

借本次数据库迁移实践,再次总结一下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支持。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
23天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
26天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
119 14
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
1月前
|
SQL Java 数据库连接
数据库迁移不再难:Flyway 与 Liquibase 大比拼,哪个才是你的真命天子?
【9月更文挑战第3天】数据库迁移在软件开发中至关重要,尤其在使用 ORM 框架如 Hibernate 时。为确保部署时能顺利应用最新的数据库变更,开发者常使用自动化工具。Flyway 和 Liquibase 是当前流行的两种选择,均能有效管理数据库版本控制。Flyway 采用 SQL 脚本表示变更,简单易用;Liquibase 支持多种脚本格式,功能更强大,适合复杂项目。本文将对比这两种工具的特点,并通过示例展示各自的优缺点,帮助开发者根据项目需求做出合适的选择。
85 1
|
2月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
57 0
|
2月前
|
Java 数据库连接 数据库
AI 时代风起云涌,Hibernate 实体映射引领数据库高效之路,最佳实践与陷阱全解析!
【8月更文挑战第31天】Hibernate 是一款强大的 Java 持久化框架,可将 Java 对象映射到关系数据库表中。本文通过代码示例详细介绍了 Hibernate 实体映射的最佳实践,包括合理使用关联映射(如 `@OneToMany` 和 `@ManyToOne`)以及正确处理继承关系(如单表继承)。此外,还探讨了常见陷阱,例如循环依赖可能导致的无限递归问题,并提供了使用 `@JsonIgnore` 等注解来避免此类问题的方法。通过遵循这些最佳实践,可以显著提升开发效率和数据库操作性能。
70 0
|
2月前
|
Java 开发者 前端开发
Struts 2、Spring MVC、Play Framework 上演巅峰之战,Web 开发的未来何去何从?
【8月更文挑战第31天】在Web应用开发中,Struts 2框架因强大功能和灵活配置备受青睐,但开发者常遇配置错误、类型转换失败、标签属性设置不当及异常处理等问题。本文通过实例解析常见难题与解决方案,如配置文件中遗漏`result`元素致页面跳转失败、日期格式不匹配需自定义转换器、`<s:checkbox>`标签缺少`label`属性致显示不全及Action中未捕获异常影响用户体验等,助您有效应对挑战。
72 0
|
2月前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
36 0
|
2月前
|
API Java 开发框架
【从零到精通】如何用Play Framework快速构建RESTful API?看完这篇你就懂了!
【8月更文挑战第31天】《Play Framework快速入门:从零开始构建RESTful API》介绍了如何使用高性能Web开发框架Play Framework构建简单的RESTful API。从环境搭建到项目创建,再到实现用户列表的增删查功能,本文档详细指导每个步骤,并解释核心概念。适合初学者快速上手。首先确保已安装JDK和sbt,然后通过sbt创建Play项目,接着定义控制器、模型及路由,最后运行应用进行测试。通过本教程,你将掌握构建RESTful API的基础知识,为进一步学习Play Framework打下坚实基础。
35 0
|
2月前
|
开发者 UED Java
Play Framework惊天秘密:如何让异常处理优雅得像芭蕾舞?
【8月更文挑战第31天】在Web应用开发中,异常处理至关重要,直接影响应用稳定性和用户体验。Play Framework作为轻量级Java Web框架,提供了基于Scala偏函数的灵活异常处理机制。通过实现`HttpErrorHandler`接口可定义全局异常逻辑,而在控制器中使用try-catch块则能捕获特定异常。定义自定义异常类也有助于表示特定错误情况。最佳实践包括保持处理一致性、提供有用错误信息、记录日志及分类处理异常。掌握这些技巧,能使Play应用更健壮可靠。
54 0
|
2月前
|
SQL 数据库 开发者
全面提速你的数据访问:Entity Framework Core性能优化指南,从预加载到批量操作的最佳实践揭秘,打造高性能数据库交互体验
【8月更文挑战第31天】本文详细介绍如何在Entity Framework Core(EF Core)中优化数据访问性能,涵盖从创建项目到定义领域模型、配置数据库上下文的最佳实践。文章通过具体代码示例讲解了预加载、惰性加载、显式加载、投影及批量操作等技术的应用,并介绍了如何使用SQL查询和调整查询性能来进一步提升效率。通过合理运用这些技术,开发者可以构建出高效且响应迅速的数据访问层,提升应用程序的整体性能和用户体验。
42 0