首页 > 解决方案 > Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

问题描述

最近我试图更改我的 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: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)我需要做些什么来修复它?

标签: mysqlruby-on-railsrubydatabasesqlite3-ruby

解决方案


阅读您的最新评论,我注意到您遇到了一个新错误:

#<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

推荐阅读