#mysql #ruby-on-rails
#mysql #ruby-on-rails
Вопрос:
Я использую Linux Ubuntu 18.04.5, сервер mysql версии 5.7.31 и Rails 6.0.3.4
Я создал свое новое приложение с rails new classic_models -d mysql -T
Это database.yml
файл, который он сгенерировал для меня:
default: amp;default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /var/run/mysqld/mysqld.sock
development:
<<: *default
database: classic_models_development
test:
<<: *default
database: classic_models_test
production:
<<: *default
database: classic_models_production
username: classic_models
password: <%= ENV['CLASSIC_MODELS_DATABASE_PASSWORD'] %>
Когда я запускаю bundle exec rails db:create
rails db:create
и другие db:
команды, я получаю эту ошибку:
Access denied for user 'root'@'localhost'
Couldn't create 'classic_models_development' database. Please check your configuration.
rails aborted!
Mysql2::Error: Access denied for user 'root'@'localhost'
Я думаю, это нормально, что в файле конфигурации не указан пароль для базы данных разработки, потому что при запуске sudo mysql -p
я могу получить доступ к приглашению mysql, просто нажав ENTER, когда он запрашивает у меня пароль. И я также выполнил несколько других команд, чтобы явно установить пароль в пустую строку, просто чтобы убедиться, что это не проблема.
Я попытался добавить host: localhost
часть файла конфигурации по умолчанию, но это ничего не изменило. Я также попытался вместо этого добавить host: 127.0.0.1
в конфигурационный файл, но это тоже не помогло.
При запуске sudo mysqladmin variables | grep socket
отображается строка сокета: /var/run/mysqld/mysqld.sock
что, я думаю, означает, что бит сокета в файле конфигурации правильный.
Когда я запускаю netstat -an | grep 3306
, появляется адрес 127.0.0.1:3306
, и он появляется, что LISTEN
, я думаю, означает, что он прослушивает правильный порт.
Единственная другая, возможно, важная вещь, которую я могу упомянуть, это то, что когда я запускаю mysql
или mysql -p
не sudo
запускаю перед ним, ошибка, которую я получаю, содержит эту же строку: Access denied for user 'root'@'localhost'
Я часами просматривал другие темы о том, что здесь звучит как одна и та же проблема, пробуя разные вещи, но не нашел решения. Пожалуйста, не помечайте этот вопрос как дубликат и не ссылайтесь ни на одну из этих других страниц.
Если кто-нибудь может предложить что-нибудь еще, что я мог бы попробовать, я был бы чрезвычайно благодарен.
Ответ №1:
сначала вы должны установить пароль для пользователя root в mysql. Для этого, пожалуйста, выполните следующие действия.
Шаг 1: войдите в MySQL с помощью пользователя root. Когда mysql запросит пароль, просто нажмите enter.
$ sudo mysql -u root -p
Шаг 2: Установите пароль для пользователя root. Пожалуйста NewPassword
, замените желаемый пароль. После установки этой команды, пожалуйста, выполните шаг 1, и когда система запросит пароль, пожалуйста, введите свой новый пароль и нажмите enter.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
Шаг 3: используйте этот пароль в своем database.yml
файле.
# config/database.yml
default: amp;default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: NewPassword
socket: /var/run/mysqld/mysqld.sock
development:
<<: *default
database: classic_models_development
test:
<<: *default
database: classic_models_test
production:
<<: *default
database: classic_models_production
username: classic_models
password: <%= ENV['CLASSIC_MODELS_DATABASE_PASSWORD'] %>
Я думаю, это вам поможет. Спасибо 🙂
Комментарии:
1. Привет, это не сработало. Я выполнил шаги, но все равно получаю ошибку «Доступ запрещен для пользователя root @localhost» при попытке запустить «rails db: create». Я убедился, что установил пароль в файле на ту же строку, которую я ввел в запросе. Я также убедился, что оставил приглашение mysql после выполнения вашего запроса и снова вошел в систему, используя свой новый пароль. Я заметил, что когда я запустил ваш запрос «ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ […]» в приглашении mysql, результатом было: «Запрос в порядке, 0 строк затронуты (0,00 сек)». Означает ли это, что ничего не произошло? Я все еще могу войти в приглашение mysql без пароля (а также с новым pw).
2. Привет, вы можете удалить mysql и установить его снова. Затем следуйте инструкциям.
3. Я удалил mysql, переустановил его, установил пароль root во время установки и обнаружил, что все работает, когда установка была завершена, и я установил новый пароль в файле Rails. Должно быть, я сделал что-то не так во время первой установки mysql (или когда я впоследствии попытался установить пароль на пустую строку в приглашении mysql). Какой бы ни была проблема, теперь она решена. Большое вам спасибо за вашу помощь.
4. Я рад вам помочь. 🙂