本文主要是介绍自建数据库连接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作为从库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!