我在设置 MySQL RDS 实例和 EC2 上的外部主实例之间的复制时遇到问题。据我所知,一切都设置正确,但从实例始终无法到达主实例,也无法更新。
主服务器是 MySQL 5.5 版本,我尝试使用 5.5、5.6 和 5.7 设置从服务器来检查版本不兼容是否是问题所在,但无论版本如何都会得到相同的结果。
主 EC2 和从属 RDS 位于同一区域和 VPC,并且它们的安全组可以在端口 3306 上互相访问。
我认为这可能是防火墙问题,因此我使用相同的设置在与 RDS 从属相同的安全组中创建了一个 EC2 从属(版本 5.5),并且该从属能够连接,所以可能不是这个问题。
EC2 从属服务器大小相同,因此可能不是空间问题。
我与 AWS RDS 工具建立了连接:
call mysql.rds_set_external_master \
('[ec2_master].compute.amazonaws.com', \
3306, \
'[master_username]', \
'[master_password]', \
'mysql-bin.000015', \
17072930, \
0);
从属设备保持“连接”状态,并且在 Last_IO_Errno 中不显示任何错误,但日志显示以下内容(一遍又一遍重复相同的消息):
[注意] 从属 SQL 线程已初始化,在日志“mysql-bin.000015”中开始复制,位置为 17072930,中继日志“/rdsdbdata/log/relaylog/relaylog.000001”位置:4
[注意] 读取中继日志事件时出错:从属 SQL 线程已被终止
[错误] 从属 I/O:连接到主服务器“[master_username]@[ec2_master].compute.amazonaws.com:3306”时出错 - 重试时间:60 重试:1,Error_code:2003
[注意] 连接到主服务器时从属 I/O 线程被终止
[注意] 从属 I/O 线程退出,读取至日志“mysql-bin.000015”,位置 17072930
以下是我的 RDS 实例的“show slave status”输出:
Slave_IO_State: Connecting to master
Master_Host: [ec2_master].compute.amazonaws.com
Master_User: [master_username]
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000015
Read_Master_Log_Pos: 17072930
Relay_Log_File: relaylog.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000015
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table: mysql.plugin,mysql.rds_monitor,mysql.rds_sysinfo,mysql.rds_replication_status,mysql.rds_history,innodb_memcache.config_options,innodb_memcache.cache_policies
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 17072930
Relay_Log_Space: 950
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
Master_UUID:
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
我在 EC2->RDS 设置中做错了什么?
答案1
[ec2_master].compute.amazonaws.com
看起来像是公共 IP 地址的主机名。您应该使用 VPC 内的 EC2 计算机的私有 IP 地址。
如果 VPC 配置正确,RDS 实例可能无法访问 VPC 的 DNS 解析器,否则会导致公共主机名解析为来自内部的查询的私有 IP 地址……但无论如何,您都希望使用私有 IP。