Попытка подключить Django к MySQL. Ошибка подключения при миграции
Я работаю над Django уже несколько недель. На данный момент я сделал 2 небольших проекта. Сейчас я попытался подключить Django к базе данных MySQL.
Сначала я начал новый проект. Затем создал новое приложение и обновил приложение в файле settings.py После этого изменил базу данных в том же файле settings.py с моими настройками, Сделал небольшую модель, Установил все необходимые aps, MySQLclient и т.д, Сделал первую миграцию успешно с помощью 'Makemigration' Пока все хорошо!
Далее я попытался сделать вторую миграцию, как в инструкции.
Затем появляется сообщение об ошибке:
"ошибка 111, не удается подключиться к базе данных"
Внесены некоторые изменения в файл настроек, включая режим SQL 'strict trans tables'.
Теперь он показывает мне ошибку: Не удается подключиться к локальному серверу MySQL через сокет ... Отсутствует файл .sock.
Я просмотрел каталог и не обнаружил такого файла.
В файле my.conf файл другой!!! И существует!
Что происходит и что делать?
Вы достигли проблемы, которая указывает на проблему с MySQL. На данном этапе имеет смысл попытаться подключиться к MySQL напрямую, потому что если это удастся, то вы будете уверены, что ваши проблемы находятся на стороне настроек приложения, а если это не удастся, то вам нужно сначала решить проблему с подключением MySQL и только потом переключиться на настройки вашего приложения.
Теперь ошибка явно указывает на то, что файл сокетов MySQL не может быть найден.
Сначала давайте проверим, запущен ли MySQL вообще. В Ubuntu Linux команда для этого выглядит следующим образом
sudo service mysql status
Если вы используете в качестве ОС что-то другое, то, конечно, вам придется действовать несколько иначе.
В Ubuntu, если команда выше дает что-то вроде
Unit mysql.service не может быть найден.
, то служба не существует и вам необходимо ее установить.
В противном случае, если служба существует, но не запущена, вам нужно запустить ее, если вы в состоянии. Если нет, то вам необходимо провести некоторые работы по обслуживанию.
Наконец, если служба MySQL успешно запущена, попробуйте подключиться к ней через cli, например:
mysql -u <youruser> -p
-p
в конце означает, что будет использоваться пароль, поэтому после выполнения команды выше вам нужно будет ввести пароль (если все пройдет успешно).
Если вы получите ту же ошибку, связанную с файлом сокета (что предположительно произойдет), то вам нужно будет найти расположение файла сокета (.sock) и обновить файл cnf MySQL (/etc/my.cnf в Linux) так, чтобы он учитывал правильное расположение файла сокета:
socket=/var/lib/mysql/mysql.sock
Наконец-то проект Django смог начать использовать базу данных MySQL!!!
Изменения в файле setting.py такие же, как и раньше, а именно:
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_db',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
единственное, что нужно было сделать в дополнение к этому, это включить путь к файлу my.cnf вручную:
'OPTIONS': {
'read_default_file': '/opt/lampp/etc/my.cnf',
},
Очевидно, это и было причиной того, что в первую очередь был ошибочно указан путь к файлу сокета.
Но почему вообще возникает эта ошибка, я не знаю. Возможно, где-то после установки был указан другой путь, но я не знаю, где этот путь, указывающий на другую директорию отдельно файла сокета, или на другой путь для файла my.cnf.
При работе с базой данных PostgreSQL подключение было выполнено настолько просто, что потребовалось только 1-е изменение в файле settings.py.
После этого дополнительные миграции были выполнены без каких-либо нарушений, как и учетная запись суперпользователя.
Сайт-источник, который я смог использовать в качестве шпаргалки для полного процесса: https://www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database