Mysql2 :: Error :: ConnectionError: не удается подключиться к локальному серверу MySQL через сокет '/tmp/mysql.sock' (2) - PullRequest
0 голосов
/ 20 июня 2020

Недавно я попытался изменить базу данных моего приложения Rails. Я использовал sqlite3 и хотел изменить его на MySQL. Я выполнил шаги этого руководства: https://guides.rubyonrails.org/configuring.html#configuring -a- mysql -or-mariadb-database

Это мой database.yml :

default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  adapter: mysql2
  encoding: utf8mb4
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  adapter: mysql2
  advisory_locks: false

Что вызвало следующую ошибку: Mysql2 :: Error :: ConnectionError: не удается подключиться к локальному MySQL серверу через сокет '/tmp/mysql.sock' (2) и что мне нужно сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 21 июня 2020

Читая ваш последний комментарий, я заметил, что у вас появилась новая ошибка:

#<Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: NO)>

Вы оставили поле пароля в среде разработки пустым. Все, что вам нужно сделать, это ввести пароль тем же паролем, который вы установили при установке mysql2, он должен это сделать.

Если вы не можете вспомнить свой пароль, проверьте это руководство:

Продолжая работу с руководством, вы должны:

sudo service mysql stop
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

Оказавшись внутри MySQL, вы должны ввести:

use mysql;
update user set authentication_string=password('NEWPASSWORD') where user='root';
flush privileges;
exit

Это должно сработать. Если вы когда-нибудь захотите снова войти в систему MySQL, вы должны ввести:

mysql -u root -p NEWPASSWORD

-p означает пароль.

Я бы не рекомендовал использовать ваш пароль непосредственно в файл database.yml. Безопаснее установить переменную среды с вашим паролем, а затем использовать ее в database.yml, например:

  username: <%= ENV.fetch("username") %>
  password: <%= ENV.fetch("password") %>

Если это так и вы используете Linux, вы должны обновить переменные среды под /etc/environment. Под /etc/environment должно быть что-то вроде этого:

username=MYSQL_USERNAME_HERE
password=MYSQL_PASSWORD_HERE
...