When running rake db:migrate, I get this error:
Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
I've looked at other people's questions on here and none of their solutions have helped me, for example:
Solution One
mysql.server start
returns:
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/something.pid).
Solution Two
mysqladmin variables | grep socket
returns:
error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
Further notes:
I tried reinstalling mysql using homebrew, which was successful, and I'm still receiving the same errors:
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
I solved it!
First, go to database.yml
Change host: localhost to host: 127.0.0.1
That's it!
Edit: This works temporarily, but when I restarted my computer today it began throwing up the same errors. The fix was to just install mysql from the website, then my application could successfully connect to mysql again.
env:rails5 mysql5.7.32
As a supplement, I also encountered the problem 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)', but the reason for the error was caused by the socket files
database.yml
default: &default
socket: /tmp/mysql.sock
login mysql mysql -uroot -p then show variables like 'socket';
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
so change database.yml
default: &default
socket: /var/run/mysqld/mysqld.sock # The line can also be deleted
I got the same error in an Ubuntu server (with ruby 3.1.2 and rails 7.0.3) and fixed it by simply removing the line:
socket: /tmp/mysql.sock
from config/database.yml, which must have allowed the connection to be established according to defaults.
Another answer, type in terminal(zsh):
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
and then
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
should be ok.
I am currently trying to deploy my Rails 4 app to AWS, but each time I try to view the app on AWS, I get an application error. I check the logs and see:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
I've been reading several things, such as: this, but I haven't had any luck trying these various solutions and I'm driving myself crazy.
The app runs fine locally.
Here are some details:
I have Mysql and Mysql server installed
The service is running (again everything works as expected locally)
Here is the [client] portion of my.cnf, which is located at /etc/mysql/
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
I see some suggestions talking about mysqld, others mysql - I don't understand the difference.
Database.yml
development:
adapter: mysql2
encoding: utf8
database: wp_development
pool: 5
username: root
password: **Left out
host: localhost
I just downloaded MySql today, so I am on 5.5, the latest build. *I'm running Linux.
Can someone please point me toward a solution?
Thanks!
If you want to connect locally, you should add socket: /var/run/mysqld/mysqld.sock inside the development config in your database.yml.
Also, make sure your RAILS_ENV is correct when running your app on AWS. If it is not set, then it should be development. But I'm not sure how you are starting your app.
The reason could be the specified socket path in your Gemfile might be wrong.
First, to find your socket file:
mysqladmin variables | grep socket
For me, this gives:
| socket /var/run/mysqld/mysqld.sock
Then, add this line /var/run/mysqld/mysqld.sock to your config/database.yml in the socket field. See the below examples
Example: socket: /var/run/mysqld/mysqld.sock
Development Mode
development:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
socket: /var/run/mysqld/mysqld.sock # this line
Production Mode
production:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
socket: /var/run/mysqld/mysqld.sock # this line
Test Mode
test:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
socket: /var/run/mysqld/mysqld.sock # this line
When I tried to run rails s on remote server I got this issue.
Mysql working fine with "rails db"
Find your socket file using
mysqladmin variables | grep socket
And then add the socket file to your database.yml configuration
development:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
socket: <socket location>
Is the MySQL login/pass fine and is the mysql server running?
I have a standard Rails3 environment, 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
Error I get when running rake db:migrate to create database is:
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
config/database.yml has
development:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
sure it's something simple I'm missing.
First, to find your socket file:
mysqladmin variables | grep socket
For me, this gives:
| socket | /tmp/mysql.sock |
Then, add a line to your config/database.yml:
development:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
socket: /tmp/mysql.sock
Found it!
Change host: localhost in config/database.yml to host: 127.0.0.1 to make rails connect over TCP/IP instead of local socket.
development:
adapter: mysql2
host: 127.0.0.1
username: root
password: xxxx
database: xxxx
Your mysql server may not be running. Below explains how to start the server. This is an excerpt from the README file that comes with the mysql download.
After the installation, you can start up MySQL by running the following
commands in a terminal window. You must have administrator privileges
to perform this task.
If you have installed the Startup Item, use this command:
shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
(ENTER YOUR PASSWORD, IF NECESSARY)
(PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)
If you don't use the Startup Item, enter the following command sequence:
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)
These are options to fix this problem:
Option 1: change you host into 127.0.0.1
staging:
adapter: mysql2
host: 127.0.0.1
username: root
password: xxxx
database: xxxx
socket: your-location-socket
Option 2: It seems like you have 2 connections into you server MySql.
To find your socket file location do this:
mysqladmin variables | grep socket
for me gives:
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!
or
mysql --help
I get this error because I installed XAMPP in my OS X Version 10.9.5 for PHP application. Choose one of the default socket location here.
I choose for default rails apps:
socket: /tmp/mysql.sock
For my PHP apps, I install XAMPP so I set my socket here:
socket: /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
OTHERS Socket Location in OS X
For MAMPP:
socket: /Applications/MAMP/tmp/mysql/mysql.sock
For Package Installer from MySQL:
socket: /tmp/mysql.sock
For MySQL Bundled with Mac OS X Server:
socket: /var/mysql/mysql.sock
For Ubuntu:
socket: /var/run/mysqld/mysql.sock
Option 3: If all those setting doesn't work you can remove your socket location:
staging:
# socket: /var/run/mysqld/mysql.sock
I hope this help you.
"/tmp/mysql.sock" will be created automatically when you start the MySQL server. So remember to do that before starting the rails server.
With my installation of MAMP on OSX the MySQL socket is located at /Applications/MAMP/tmp/mysql/mysql.sock. I used locate mysql.sock to find my MySQL socket location.
So my config/database.yml looks like:
development:
adapter: mysql2
host: localhost
username: root
password: xxxx
database: xxxx
socket: /Applications/MAMP/tmp/mysql/mysql.sock
If you are on Mac OSX,
The default location for the MySQL Unix socket is different on Mac OS X and Mac OS X Server depending on the installation type you chose
MySQL Unix Socket Locations on Mac OS X by Installation Type
Package Installer from MySQL ------------------/tmp/mysql.sock
Tarball from MySQL -------------------------------/tmp/mysql.sock
MySQL Bundled with Mac OS X Server -------/var/mysql/mysql.sock
So just change your database.yml in socket: /tmp/mysql.sock to point to the right place depending on what OS and installation type you are using
The default location for the MySQL socket on Mac OS X is /var/mysql/mysql.sock.
I have had the same problem, but none of the answers quite gave a step by step of what I needed to do. This error happens because your socket file has not been created yet. All you have to do is:
Start you mysql server, so your /tmp/mysql.sock is created, to do that you run: mysql server start
Once that is done, go to your app directory end edit the config/database.yml file and add/edit the socket: /tmp/mysql.sock entry
Run rake:dbmigrate once again and everything should workout fine
I found that the problem is that I only have a production environment. I do not have a development or test environment.
By adding 'RAILS_ENV=production' to give the command
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
it worked
If you are running MYSQL through XAMPP:
Open XAMPP mysql configuration file (on OSX):
/Applications/XAMPP/etc/my.cnf
Copy the socket path:
socket = /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Open rails project's database configuration file:
myproject/config/database.yml
Add the socket config to the development database config:
-->
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
Restart rails server
Enjoy :)
You have problem with like this: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
Ans: $ sudo service mysql start
On my machine mysqld service stopped that's why it was giving me the same problem.
1:- Go to terminal and type
sudo service mysqld restart
This will restart the mysqld service and create a new sock file on the required location.
If you are running MYSQL through XAMPP or LAMPP on Ubuntu or other Linux, try:
socket: /opt/lampp/var/mysql/mysql.sock
I have installed RVM in my ubunut linux box and configured the Rails 3 app in that ... i can able to start app server... my problem is when i invoke http://localhost:3000 . i getting the follwing error
Mysql::Error (Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)):
I checked mysqld service is running well.
I checked my database.yml file .... the defined well
development:
adapter: mysql
encoding: utf8
reconnect: false
database: test_development
username: root
password: admin
socket: /var/run/mysqld/mysqld.sock
my installed mysql gem version is 2.8.1.... I really don't know what is the problem here....
Your mysql server might be started, it seems the socket leading to it isn't available at the path you're providing to it (/var/run/mysqld/mysqld.sock).
You must change this socket path to the appropriate one in your machine.
The best way to find it is the following in a console : sudo find / -name mysqld.sock
Then you'll get the path and you'll just have to change it in your configuration file.