自建数据库连接Aurora作为从库

2023-10-14 05:59
文章标签 连接 数据库 从库 aurora

本文主要是介绍自建数据库连接Aurora作为从库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

1.1 应用场景说明

因为亚马逊云科技的用户某些时刻需要将自建的数据库连接亚马逊云科技上的RDS作为从库,而RDS 因为主副之间binlog的position不断在变动和同步的,而--master-data无法获取到。

所以,可以通过将数据库的某一时刻快照,然后使用快照创建数据库,新的数据库因为没有数据写入读取,新数据库此时是静态的,这样我们就能从新数据库从获取到position,从而进行同步。

1.2 环境说明

  • 亚马逊云科技Root账户或者IAM账户(IAM用户需具有相关权限)

  • Linux(Or Windows)+ mysqldump

  • 自建mysql数据库

实操

  • 在Aurora上开启二进制日志记录;

  • 将binlog_format 参数设置为 ROW、STATEMENT 或 MIXED;

  • 建议设置为MIXED,除非您具有特定的 binlog 格式需求;

2.1 在亚马逊云科技上Aurora MySQL 数据库集群上保留二进制日志

为复制源上的二进制日志文件选择足够长的保留时间,从而确保在 Amazon RDS 删除二进制日志文件之前将更改应用于副本.

CALL mysql.rds_set_configuration('binlog retention hours', 144);

2.2 创建数据库的快照

新建快照:亚马逊云科技上面目标主数据库

还原快照,新建数据库集群

到新的节点里面查看logs&events 获取position,此时新数据库是没有写入的,position是静态,mysqldump可以除去 --master-data参数就能获取position;

mysql> SHOW MASTER STATUS;

2.3 使用mysqldump复制用快照创建的数据库

用例:

  • p -h source_MySQL_DB_instance_endpoint \ -u user \ -ppassword \ --port=3306 \ --single-transaction \ --routines \ --triggers \ --databases database database2 > path/rds-dump.sql

使用 mysql 命令连接到“自建从数据库”。以下是示例。

PROMPT> mysql -h <host_name> -port=3306 -u <db_master_user> -p

在 mysql 提示符下,运行 source 命令并向它传递您的数据库转储文件名,以便将数据加载到 Aurora MySQL 数据库集群中,例如

source rds-dump.sql;

在副本目标上开启复制 开启复制之前,我们建议您手动创建 Aurora MySQL 数据库集群或 RDS for MySQL 数据库实例副本目标的快照。如果出现问题,而您需要重新建立与数据库集群或数据库实例副本目标间的复制,则您可以从此快照还原数据库集群或数据库实例,而不必再次将数据导入您的副本目标之中。

此外,创建专用于复制的用户 ID。以下是示例。

CREATE USER 'repl_user'@'<domain_name>' IDENTIFIED BY '<password>';

该用户需要 REPLICATION CLIENT 和 REPLICATION SLAVE 权限。向该用户授予这些权限。

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'<domain_name>';

2.4 自建数据库连接到目标主数据库 MySQL 进行同步

然后发出 CHANGE MASTER TO 和 START SLAVE(Aurora MySQL 版本 1 和 2)或 START REPLICA(Aurora MySQL 版本 3),以使用上面中的二进制日志文件名和位置开始与复制源之间的复制,例如:

CHANGE MASTER TO  MASTER_HOST = 'mydbcluster.cluster-123456789012.us-east-1.rds.amazonaws.com',  MASTER_PORT = 3306,  MASTER_USER = 'repl_user',  MASTER_PASSWORD = '<password>',  MASTER_LOG_FILE = 'mysql-bin-changelog.000031',  MASTER_LOG_POS = 107;

-- 根据自己的版本选择相应的命令:

Aurora MySQL version 1 and 2使用如下命令:

START SLAVE;

Aurora MySQL version 3使用如下命令:

START REPLICA;

从 Aurora MySQL 数据库集群中开启复制

连接到数据库集群并发出 mysql_rds_set_external_master(Aurora MySQL 版本 1 和 2)、mysql_rds_set_external_source(Aurora MySQL 版本 3 及更高版本)和 mysql_rds_start_replication 程序,以使用上一步中的二进制日志文件名称和位置开始与复制源之间的复制。

以下是示例

For Aurora MySQL version 1 and 2:CALL mysql.rds_set_external_master ('mydbinstance.123456789012.us-east-1.rds.amazonaws.com', 3306,    'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);
For Aurora MySQL version 3 and higher:CALL mysql.rds_set_external_source ('mydbinstance.123456789012.us-east-1.rds.amazonaws.com', 3306,    'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);
For all versions:CALL mysql.rds_start_replication;

注意事项

如果复制失败,可能会导致副本上的意外输入/输出大量增加,从而降低性能。如果复制失败或不再需要复制,则可运行 mysql.rds_reset_external_master 存储过程来删除复制配置。

主数据库如果业务量大的话,大量用户还在读取以前rows,用快照新建的数据库,mysqldump的时候下载速度会稍慢,这是正常现象,因为快照数据库和主数据库的底层是用同一储存点,主数据库在读取数据就会影响到快照数据库。

这篇关于自建数据库连接Aurora作为从库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/208634

相关文章

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT