Если вы похожи на меня, вы потратили слишком много времени, пытаясь правильно подключиться к управляемой базе данных MySQL 8 от Digital Ocean.
Все выглядит великолепно, вы считаете, что все настроили правильно, но затем вы получаете SQLSTATE[HY000] [2002] Доктрина\DBAL\Драйвер\PDO\Исключение ошибка вашего приложения.
Не очень полезное сообщение об ошибке, я тоже видел его слишком много раз.
Если вы на моем месте, не волнуйтесь, я вас прикрою. Вот пошаговое руководство о том, как это исправить и настроить рабочее соединение из Laravel с управляемой базой данных DigitalOcean MySQL 8.
Конфигурации Цифрового океана
Давайте начнем с настройки базы данных.
Создайте управляемую базу данных в Цифровом океане. Обязательно выберите MySQL версии 8, предпочтительно в том же регионе, где находится ваш сервер Laravel.
Как только это будет сделано, я рекомендую создать нового пользователя вместо того, чтобы использовать пользователя по умолчанию.
Вы можете сделать это на вкладке Пользователи и базы данных :
Убедитесь, что шифрование пароля сохранено как есть (MySQL 8+).
Пока вы здесь, вы также можете создать базу данных для своего проекта, это зависит от вас.
Следующее, что вам нужно сделать, это разрешить трафик из различных надежных источников . Это означает, что только определенные компьютеры/серверы могут получить доступ к вашей базе данных.
Вы можете настроить это в разделе Настройки вкладки Надежные источники .
Обязательно добавьте IP-адрес сервера Laravel (или, если он размещен в DigitalOcean, вы можете ссылаться на него по имени), а также свой локальный IP-адрес, чтобы вы могли подключиться со своего компьютера.
Проверка соединения
Если все прошло нормально, вы можете просмотреть подробную информацию о подключении на вкладке Обзор :
Убедитесь, что выбран ваш новый пользователь и ваша база данных, чтобы вы видели правильные данные для входа.
Кроме того, убедитесь, что вы видите общедоступный хост, когда пытаетесь подключиться со своего компьютера.
Теперь загрузите файл Сертификат CA и сохраните его в безопасном месте. Этот файл понадобится позже при подключении из Laravel.
Но пока попробуйте подключиться с вашего локального клиента MySQL.
Обязательно выберите подключение к MySQL 8 и используйте следующую конфигурацию:
- ведущий:
prod-do-user-XXXXXX.b.db.ondigitalocean.comзамените общедоступным именем хоста вашей базы данных - порт:
25060это не значение по умолчанию, 3306, обязательно обновите его! - имя пользователя
- пароль убедитесь, что не копируете лишний пробел в конце пароля
- база данных
и, наконец, выберите опцию, чтобы вы могли добавить сертификат центра сертификации, который вы только что скачали.
Вот как может выглядеть конфигурация в таблице Плюс:
Вы должны быть в состоянии подключиться прямо сейчас. Если все еще есть какие-то проблемы, дважды проверьте, внесен ли ваш IP-адрес в белый список в списке надежных источников на панели управления Digital Ocean.
Подключение из Laravel
Настройка сервера
Прежде чем что-либо настраивать, убедитесь, что у вас включено расширение MySQL для вашего PHP.
Вы можете проверить это, запустив php -i на своем сервере, и если он не включен, установите его. Вы можете сделать это следующим образом на сервере Ubuntu:
sudo apt install php8.0-mysql
Настройка подключения к базе данных]
Во-первых, давайте проверим конфигурацию базы данных наших приложений config/database.php .
Добавьте следующее в конец конфигурации драйвера MySQL:
'ssl_mode' => env('SSL_MODE'),
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
) : []
итак, это выглядит так:
Загрузка сертификата центра сертификации
Затем загрузите сертификат центра сертификации на сервер.
Я рекомендую добавить его в папку хранения вашего проекта, например. [ПУТЬ К МОЕМУ ПРОЕКТУ]/хранилище/сертификаты/ca-сертификат.crt . Но это может быть где угодно.
Важно то, что ваше приложение Laravel может получить к нему доступ. Для этого вам необходимо установить некоторые разрешения для файла.
Я рекомендую очень ограничительные разрешения, такие как это:
chmod 440 ca-certificate.crt
Также убедитесь, что пользователь, выполняющий PHP-скрипт (обычно www-data ), имеет доступ к этому файлу:
chown www-data:www-data ca-certificate.crt
Настройка переменных среды
Последним шагом является настройка переменных среды в Laravel.
Просто отредактируйте свой файл .env и в области базы данных замените значения:
DB_CONNECTION=mysql DB_HOST=private-XXXXX.b.db.ondigitalocean.com DB_PORT=25060 DB_DATABASE=XXXXX DB_USERNAME=XXXXX DB_PASSWORD=XXXXX SSL_MODE=required MYSQL_ATTR_SSL_CA=[PATH TO MY PROJECT]/storage/certs/ca-certificate.crt
- Подключение, база данных, имя пользователя и пароль должны быть понятны сами по себе.
- Если вы подключаетесь с другого сервера Digital Ocean в том же регионе, используйте частную сеть VPC хозяин (вы можете найти его на вкладке Обзор цифрового океана).
- Порт всегда должен быть 25060, и вы должны включить SSL_MODE как
требуется. - И обязательно укажите полный абсолютный путь к вашему сертификату центра сертификации.
Если все настроено, обязательно очистите кэш конфигурации Laravel, запустив php artisan config:cache .
Тестирование и устранение неполадок
Если вы выполнили эти действия, вы сможете подключиться к своей базе данных.
Чтобы быстро протестировать его, используйте Laravel’s Tinker:
php artisan tinker >>> DB::connection()->getDatabaseName();
Это должно быть возвращено с именем вашей базы данных.
Если по какой-то причине вы все еще не можете подключиться, дважды проверьте эти распространенные ошибки:
- IP-адрес приложения Laravel не внесен в белый список в списке надежных источников Digital Ocean
- неверный путь для сертификата центра сертификации
- сертификат CA не читается приложением Laravel (разрешение, проблемы с владением)
- дополнительный пробел после пароля
- старая конфигурация Laravel кэшируется, обновите ее с помощью
php artisan config: кэш
Оригинал: “https://dev.to/johnnyfekete/how-to-connect-your-laravel-application-to-digital-ocean-s-managed-mysql-8-database-2khh”