Вопрос или проблема
У меня есть эти пользователи в MySQL
Пользователь | Хост |
---|---|
debian-sys-maint | localhost |
mysql.session | localhost |
mysql.sys | localhost |
root | localhost |
Я хочу подключиться к нему удаленно с моего Mac через SSH
Я не могу подключиться. Я постоянно получаю
2013 – Утрата соединения с сервером MySQL при ‘чтении начального коммуникационного пакета’, системная ошибка: 0 “Внутренняя ошибка/проверка (Не системная ошибка)”
Я знаю, что если я добавлю эту запись ниже.
root | % |
Я смогу подключиться, но это, кажется, не очень безопасно. Я думал, что мы можем подключаться к нашей базе данных через SSH. Пожалуйста, исправьте меня, если я ошибаюсь.
У меня ничего не настроено в локальных брандмауэрах на моем сервере, но у меня есть правила сетевой безопасности в Digital Ocean.
Все правила настроены
Поздний ответ, но у меня была та же проблема. Проблема заключалась в том, что я пытался подключиться к серверу mariadb с помощью клиента mysql (mysql-client-8.0). Использование клиента mariadb (1:10.6.11-0ubuntu0.22.04.1) решило эту проблему. Надеюсь, это поможет.
Ответ или решение
При возникновении ошибки "2013 – Потеряно соединение с сервером MySQL на этапе ‘чтения начального коммуникационного пакета’, системная ошибка: 0 ‘Внутренняя ошибка/проверка (не системная ошибка)’" при попытке удаленного подключения к MySQL-серверу, стоит обратить внимание на несколько ключевых моментов, которые помогут вам диагностировать и устранить проблему.
Причины возникновения ошибки
-
Настройки доступа к пользователям: Ваша таблица пользователей MySQL показывает, что у вас есть только локальные пользователи, такие как
root@localhost
. Это означает, что для подключения извне этот пользователь не сможет пройти аутентификацию. Вы упомянули, что добавление записиroot@%
решает проблему, но это связано с низким уровнем безопасности. Лучше всего создать нового пользователя с ограниченными привилегиями для удаленного доступа. -
Конфигурация MySQL: Проверьте файл конфигурации MySQL (обычно
my.cnf
илиmy.ini
) на предмет параметраbind-address
. Если он установлен на127.0.0.1
, сервер будет слушать только локальные подключения. Измените его на0.0.0.0
для разрешения удаленных подключений. -
Файрволы: Несмотря на то, что вы упомянули, что у вас нет локальных правил файрвола, проверьте настройку файрвола облачного провайдера (в вашем случае Digital Ocean). Убедитесь, что порт MySQL (обычно 3306) открыт для вашего IP-адреса или разрешен для подключения из определенных диапазонов.
-
SSH-туннелирование: Хотя вы можете подключаться напрямую к MySQL, более безопасный подход — использовать SSH-туннелирование. Это позволяет зашифровать ваше соединение и избежать открытого доступа к MySQL.
Решение проблемы
Шаг 1: Создание пользователя с удаленным доступом
Создайте нового пользователя MySQL с правами доступа, которые вам нужны. Например:
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Этот пользователь будет иметь доступ ко всем базам данных из любого места. Обязательно замените your_user
и your_password
на безопасные значения.
Шаг 2: Изменение конфигурации MySQL
Откройте файл конфигурации MySQL и измените bind-address
:
bind-address = 0.0.0.0
Перезапустите MySQL для применения изменений:
sudo service mysql restart
Шаг 3: Настройка файрвола на Digital Ocean
Убедитесь, что на Digital Ocean открыт порт 3306 для IP-адреса вашего Mac. Если необходимо, настройте правила так, чтобы разрешить доступ к порту только для ваших IP-адресов.
Шаг 4: SSH-туннелирование
Вы можете создать туннель через SSH с помощью следующей команды, где user@your-server-ip
— это ваш удаленный сервер:
ssh -L 3306:localhost:3306 user@your-server-ip
После этого вы можете подключиться к локально перенаправленному порту 3306 на вашем Mac с помощью клиента MySQL.
Заключение
Следуя этим шагам, вы сможете устранить проблему с подключением и обеспечите безопасный доступ к вашему MySQL-серверу. Пожалуйста, не забывайте применять лучшие практики безопасности, чтобы защитить ваши данные и систему от несанкционированного доступа.