У меня возникают проблемы с настройкой репликации между экземпляром MySQL RDS и внешним мастером на EC2. Насколько я могу судить, все настроено правильно, но ведомое устройство никогда не достигает ведущего и не обновляется.
Мастер - это MySQL версии 5.5, я пробовал настроить подчиненное устройство с 5.5, 5.6 и 5.7, чтобы проверить, была ли проблема несовместимостью версий, но получаю тот же результат независимо от версии.
Главный EC2 и подчиненный RDS находятся в одном регионе и VPC, и их группы безопасности имеют доступ друг к другу через порт 3306.
Я подумал, что это может быть проблема с брандмауэром, поэтому я использовал те же настройки для создания ведомого устройства EC2 (версия 5.5) в той же группе безопасности, что и ведомое устройство RDS, и тот смог подключиться, так что, вероятно, это не так.
Подчиненное устройство 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 был убит
[ERROR] Slave I / O: ошибка подключения к главному серверу '[master_username] @ [ec2_master] .compute.amazonaws.com: 3306' - время повтора: 60 попыток: 1, код ошибки: 2003
[Примечание] Ведомый поток ввода-вывода прерван при подключении к ведущему
[Примечание] Выход из потока ввода-вывода ведомого устройства, чтение журнала 'mysql-bin.000015', позиция 17072930
Вот результат команды show slave status для моего экземпляра RDS:
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?
[ec2_master].compute.amazonaws.com
выглядит как имя хоста для публичного IP-адреса. Вы должны использовать частный IP-адрес компьютера EC2 внутри VPC.
Экземпляры RDS могут не иметь доступа к преобразователю DNS VPC, что в противном случае привело бы к преобразованию общедоступного имени хоста в частный IP-адрес для запросов, исходящих изнутри, если VPC настроен правильно ... но в любом случае вы хотите использовать частный IP.