簡體   English   中英

Ruby on Rails 3 無法通過 OSX 上的套接字“/tmp/mysql.sock”連接到本地 MySQL 服務器

[英]Ruby on Rails 3 Can't connect to local MySQL server through socket '/tmp/mysql.sock' on OSX

我有一個標准的 Rails3 環境,RVM 1.2.9,Rails 3.0.5,Ruby 1.9.2p180,MySQL2 Gem 0.2.7,mysql-5.5.10-osx10.6-x86_64

運行rake db:migrate以創建數據庫時出現的錯誤是:

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

config/database.yml 有

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx

當然這是我遺漏的一些簡單的東西。

首先,找到您的套接字文件:

mysqladmin variables | grep socket

對我來說,這給出了:

| socket                                            | /tmp/mysql.sock                                                                                                        |

然后,在您的config/database.yml添加一行:

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
  socket: /tmp/mysql.sock

找到了!

將 config/database.yml 中的host: localhost更改為host: 127.0.0.1以使 rails 通過 TCP/IP 而不是本地套接字連接。

development:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx

您的 mysql 服務器可能沒有運行。 下面解釋如何啟動服務器。 這是 mysql 下載附帶的 README 文件的摘錄。

安裝后,您可以通過在終端窗口中運行以下命令來啟動 MySQL。 您必須具有管理員權限才能執行此任務。

如果您已安裝啟動項,請使用以下命令:

 shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
 (ENTER YOUR PASSWORD, IF NECESSARY)
 (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)

如果不使用啟動項,請輸入以下命令序列:

 shell> cd /usr/local/mysql
 shell> sudo ./bin/mysqld_safe
 (ENTER YOUR PASSWORD, IF NECESSARY)
 (PRESS CONTROL-Z)
 shell> bg
 (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)

這些是解決此問題的選項:

選項 1:將您的主機更改為 127.0.0.1

staging:
  adapter: mysql2
  host: 127.0.0.1
  username: root
  password: xxxx
  database: xxxx
  socket: your-location-socket

選項 2:您似乎有 2 個連接到服務器 MySql。 要找到您的套接字文件位置,請執行以下操作:

mysqladmin variables | grep socket

對我來說:

mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' exists!

或者

mysql --help 

我收到此錯誤是因為我在 OS X 版本 10.9.5 中為 PHP 應用程序安裝了 XAMPP。 在此處選擇默認套接字位置之一。

我選擇默認 Rails 應用程序:

socket: /tmp/mysql.sock

對於我的 PHP 應用程序,我安裝了 XAMPP,所以我在這里設置了我的套接字:

socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

OS X 中的 OTHERS 套接字位置

對於 MAMPP:

socket: /Applications/MAMP/tmp/mysql/mysql.sock

對於 MySQL 的軟件包安裝程序:

socket: /tmp/mysql.sock

對於與 Mac OS X 服務器捆綁的 MySQL:

socket: /var/mysql/mysql.sock

對於 Ubuntu:

socket: /var/run/mysqld/mysql.sock

選項 3:如果所有這些設置都不起作用,您可以刪除您的套接字位置:

staging:
  # socket: /var/run/mysqld/mysql.sock

我希望這對你有幫助。

“/tmp/mysql.sock”將在您啟動 MySQL 服務器時自動創建。 所以請記住在啟動 rails 服務器之前這樣做。

我在 OSX 上安裝 MAMP 后,MySQL 套接字位於/Applications/MAMP/tmp/mysql/mysql.sock 我使用locate mysql.sock來查找我的 MySQL 套接字位置。

所以我的config/database.yml看起來像:

development:
  adapter: mysql2
  host: localhost
  username: root
  password: xxxx
  database: xxxx
  socket: /Applications/MAMP/tmp/mysql/mysql.sock

如果您使用的是 Mac OSX,

MySQL Unix 套接字的默認位置在 Mac OS X 和 Mac OS X Server 上有所不同,具體取決於您選擇的安裝類型

按安裝類型划分的 Mac OS X 上的 MySQL Unix 套接字位置

  • 來自 MySQL 的軟件包安裝程序 ------------------/tmp/mysql.sock

  • 來自 MySQL 的壓縮包 -------------------------------/tmp/mysql.sock

  • 與 Mac OS X 服務器捆綁的 MySQL -------/var/mysql/mysql.sock

因此,只需將socket: /tmp/mysql.sock database.yml更改為指向正確的位置,具體取決於您使用的操作系統和安裝類型

Mac OS X 上 MySQL 套接字的默認位置是/var/mysql/mysql.sock

我遇到了同樣的問題,但沒有一個答案能一步一步地說明我需要做的事情。 發生此錯誤是因為您的套接字文件尚未創建。 您所要做的就是:

  1. 啟動你的 mysql 服務器,這樣你的/tmp/mysql.sock被創建了,為此你運行: mysql server start
  2. 完成后,轉到您的應用程序目錄並編輯config/database.yml文件並添加/編輯socket: /tmp/mysql.sock條目
  3. 再次運行rake:dbmigrate ,一切都應該正常運行

我發現問題是我只有一個生產環境。 我沒有開發或測試環境。

通過添加 'RAILS_ENV=production' 來給出命令

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

有效

如果您通過 XAMPP 運行 MYSQL:

  1. 打開 XAMPP mysql 配置文件(在 OSX 上):

    /Applications/XAMPP/etc/my.cnf

  2. 復制套接字路徑:

    socket = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

  3. 打開rails項目的數據庫配置文件:myproject/config/database.yml

  4. 將套接字配置添加到開發數據庫配置中:

-->

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: difiuri_falcioni
  pool: 5
  username: root
  password:
  host: localhost
  socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
  1. 重啟 Rails 服務器

享受 :)

你有這樣的問題:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Ans: $ sudo service mysql start

在我的機器上 mysqld 服務停止了,這就是為什么它給我同樣的問題。

1:- 轉到終端並輸入

sudo service mysqld restart

這將重新啟動 mysqld 服務並在所需位置創建一個新的 sock 文件。

如果您在 Ubuntu 或其他 Linux 上通過 XAMPP 或 LAMPP 運行 MYSQL,請嘗試:

socket: /opt/lampp/var/mysql/mysql.sock

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM