![](/img/trans.png)
[英]`connect': Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error)
[英]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)我需要做些什么來修復它?
閱讀您的最新評論,我注意到您遇到了一個新錯誤:
#<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
檢查您的系統日志以查看套接字位置在哪里。 在我的情況下是“運行/mysqld/mysqld.sock”。 然后編輯數據庫.yml 文件。
從
socket: /tmp/mysql.sock
至
socket: /run/mysqld/mysqld.sock
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.