Репликация AWS EC2 MySQL: конфигурация для запроса подчиненного устройства от главного устройства

Репликация AWS EC2 MySQL: конфигурация для запроса подчиненного устройства от главного устройства

Я успешно настроил ситуацию MySQL master-slave на отдельных экземплярах AWS EC2. Slave работает и успешно реплицирует master.

Все идет нормально.

Теперь я хочу иметь возможность отправлять запросы подчиненному устройству (для аналитики и т. д.), но не могу найти правильную конфигурацию, чтобы иметь возможность отправлять запросы с главного устройства на подчиненное.

Ошибки, которые я получаю (в зависимости от настроек моего профиля безопасности AWS), — это «Подключение отклонено» или «Время ожидания подключения истекло».

На подчиненном устройстве у меня было разрешение группы безопасности EC2 для главного IP-блока на подключение к порту 3306, и я использовал IP-адрес подчиненного устройства в конфигурации подключения главного устройства.

Это привело к ошибке «Соединение отклонено» при попытке отправить запрос подчиненному устройству с главного.

На главном устройстве я запустил команду «show full processlist» и увидел, что хост-подчиненный — это имя хоста AWS EC2, а не IP-адрес, а порт 44508 был добавлен в конец, поэтому я изменил информацию о подключении на главном устройстве, чтобы использовать имя хоста-подчиненного устройства вместо IP-адреса, а также настройку группы безопасности на подчиненном устройстве, чтобы разрешить трафик с главного устройства на порт 44508 вместо 3306.

Это привело к ошибке «Время ожидания соединения истекло».

Я пробовал комбинации IP/имени хоста/порта в группе безопасности подчиненного устройства, но получаю только одну из этих двух ошибок при любой комбинации.

Может ли кто-нибудь дать советы о том, как настроить все так, чтобы я мог запускать запросы (только для чтения) на подчиненном компьютере с главного компьютера и возвращать результаты обратно главному компьютеру? TIA.

Обе системы настроены одинаково, за исключением того, что на главном компьютере также запущен Codeigniter4, в котором я и настраиваю конфигурацию подключения:

Ubuntu 20.04.3 LTS и MySQL 8.0.26-0

решение1

При такой настройке ваши клиенты (приложения, программное обеспечение) должны подключаться к подчиненному устройству и выполнять только запросы SELECT (если вам необходимо выполнять запросы на запись, их следует выполнять только на главном устройстве).

Вам следует проверить:

  1. Если сервер MySQL прослушивает сеть на подчиненном сервере.
  2. Если группы безопасности разрешают вашим приложениям подключаться к подчиненному серверу.
  3. Во избежание проблем подчиненное устройство следует настроить как доступное только для чтения.

решение2

РЕШЕНО: В файле /etc/mysql/mysql.conf.d/mysqld.cnf подчиненного сервера мне нужно было закомментировать строки «bind-address» и «mysqlx-bind-address», остановить подчиненный сервер, перезапустить mysqld и запустить подчиненный сервер.

Наличие 'bind-address = 127.0.0.1' запрещает подключения из других мест. Закомментировав его, можно разрешить доступ из всех источников, а не только localhost. Группа безопасности EC2 ограничивает доступ к порту 3306 только главным сервером.

Теперь все отлично работает. Спасибо еще раз за внимание.

Связанный контент