Reputation: 4603
I am getting the following error when I try to connect to mysql:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Is there a solution for this error? What might be the reason behind it?
Upvotes: 322
Views: 1131606
Reputation: 57
please use socket detail if you are not using default socket path.
for mariadb
mariadb-secure-installation --socket=/u002/mysql/data/mysql.sock
for mysql
mysql-secure-installation --socket=/u002/mysql/data/mysql.sock
Upvotes: 0
Reputation: 2971
so it tells you that they cannot find the socket file at '/var/lib/mysql/mysql.sock'
what you'll do is you need to connect the mysql.sock file to it most probably it is at /tmp/mysql.sock
if the file doesn' exist create it using
touch /tmp/mysql.sock
and then execute
sudo ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
note if there is no mysql directory inside /var/lib
create it
mkdir mysql
refresh your app
Upvotes: -2
Reputation: 550
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' it can be solve by two way
Method 1: To do link you can use
ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock
Method 2: To mention socket file for client and server, you need to set socket file path like below for both client and server file. server file name could be server.cnf and client file name could be client.cnf. Inside that file you will find a section like [client] or [server] . You have to put update socket file path for both server and client to communicate..
client.cnf
[client]
socket=/mydata/db/mysql/mysql.sock
server.cnf
[server]
socket=/mydata/db/mysql/mysql.sock
My preference instead of method-1 use method-2. Because link is a dependent file if somehow it is deleted then you will get trouble. Since you know better option that link you should use it.
Upvotes: 0
Reputation: 671
I'm using MyXQL to access the database in Elixir. My actual error was using /tmp/mysql.sock, when the /etc/my.conf was using /var/lib/mysql/mysql.sock.
The solution for me was to set an environment variable in the Elixir setup:
export MYSQL_UNIX_PORT=/var/lib/mysql/mysql.sock
so that MyXQL would not use its default location.
The principle of this solution is that you can redirect MyXQL to another location to avoid this type of problem.
Upvotes: 0
Reputation: 7
Ubuntu16.04, if mysql server is running and the configure in /etc/mysql like this:
[mysqld] socket = /var/run/mysqld/mysqld.sock
Then Navicat15 localhost default setting is: "/var/lib/mysql/mysql.sock"
You can edit in advance like this:
Upvotes: -2
Reputation: 668
I don't find any solutions from all the answers above, I do have mariadb installation that was installed from source in Debian 11 (not from Debian apt package). So whenever I trigger mysql command in terminal, I will get this error:
ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)
and the mysql error log only shows the same error socket above which was hard for me to know the reason behind this
What I did was to remove mailutils
package in my distro that has mariadb dependencies files in it.
So, I just need to trigger these 2 commands
apt -y remove mailutils
apt -y autoremove
and when I run mysql command in terminal, I don't have that socket error anymmore
Upvotes: 0
Reputation: 28564
I came to this issue when i reinstall mariadb with yum, which rename my /etc/my.cnf.d/client.cnf
to /etc/my.cnf.d/client.cnf.rpmsave
but leave /etc/my.cnf unchanged.
For I has configed mysqld's socket in /etc/my.cnf
, and mysql's socket in /etc/my.cnf.d/client.cnf
with customized path.
So after the installation, mysql client cannot find the mysql's socket conf, so it try to use the default socket path to connect the msyqld, which will cause this issue.
Here are some steps to locate this isue.
ps -aef | grep mysqld
$ps -aef | grep mysqld | grep -v grep
mysql 19946 1 0 09:54 ? 00:00:03 /usr/sbin/mysqld
netstat -ln | grep mysql
$netstat -ln | grep mysql
unix 2 [ ACC ] STREAM LISTENING 560340807 /data/mysql/mysql.sock
[client]
socket=/data/mysql/mysql.sock
You also can edit the mysqld's socket, but you need to restart or reload mysqld.
Upvotes: 1
Reputation: 626
I have the same problem and when I digged into the log:
sudo tail -f /var/log/mysqld.log
InnoDB: mmap(137363456 bytes) failed; errno 12
200610 6:27:27 InnoDB: Completed initialization of buffer pool
200610 6:27:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
200610 6:27:27 [ERROR] Plugin 'InnoDB' init function returned error.
200610 6:27:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
200610 6:27:27 [ERROR] Unknown/unsupported storage engine: InnoDB
200610 6:27:27 [ERROR] Aborting
Clearly there's not enough memory and stopping InnoDB to start. I realized I never set up the swap file...
I followed this to set up the swap file and it works.
Upvotes: -1
Reputation: 1092
In my case, I was importing a new database, and I wasnt able to connect again after that. Finally I realized that was a space problem.
So you can delete the last database and expand you hard drive or what I did, restored a snapshot of my virtual machine.
Just in case someone thinks that is useful
Upvotes: 1
Reputation: 6814
Check if your mysqld service is running or not, if not run, start the service.
If your problem isn't solved, look for /etc/my.cnf
and modify as following, where you see a line starting with socket
. Take a backup of that file before doing this update.
socket=/var/lib/mysql/mysql.sock
Change to
socket=/opt/lampp/var/mysql/mysql.sock -u root
Upvotes: 14
Reputation: 164
Make sure you have enough space left in /var
. If Mysql demon is not able to write additional info to the drive the mysql server won't start and it leads to the error Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Consider using
expire_logs_days = 10
max_binlog_size = 100M
This will help you keep disk usage down.
Upvotes: 8
Reputation: 13831
MariaDB, a community developed fork of MySQL, has become the default implementation of MySQL in many distributions.
So first you should start,
$ sudo systemctl start mariadb
If this fails rather try,
$ sudo systemctl start mysqld
Then to start mysql,
$ mysql -u root -p
As of today, in Fedora the package is named mariadb
And in Ubuntu it is called mariadb-server
.
So you may have to install it if its not already installed in your system.
Upvotes: 10
Reputation: 27611
If you are on a recent RHEL, you may need to start mariadb (an open source mysql db) instead of the mysql db:
yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start
You should then be able to access mysql in the usual fashion:
mysql -u root -p
Upvotes: 24
Reputation: 7884
This might be a stupid suggestion but make 100% sure your DB is still hosted at localhost. For example, if a Network Admin chose (or changed to) Amazon DB hosting, you will need that hostname instead!
Upvotes: 1
Reputation: 10711
If you are in the shell of sf.net, try:
mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p
Change {LETTER} and {GROUP ID} as shown in your MySQL Database of project admin profile.
Upvotes: 0
Reputation: 1022
if you change files in /var/lib/mysql [ like copy or replace that ], you must set owner of files to mysql this is so important if mariadb.service restart has been faild
chown -R mysql:mysql /var/lib/mysql/*
chmod -R 700 /var/lib/mysql/*
Upvotes: 4
Reputation: 1547
Please ensure you have installed MySQL server correctly, I met this error many times and I think it's complicated to debug from the socket, I mean it might be easier to reinstall it.
If you are using CentOS 7, here is the correct way to install it:
First of all, add the mysql community source
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
Then you can install it by yum install mysql-community-server
Start it with systemctl: systemctl start mysqld
Upvotes: 2
Reputation: 24759
Here's what worked for me:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Upvotes: 5
Reputation: 3180
Try first 2, 3 solutions. Error is stil popup & If you can not find /var/lib/mysql/mysql.sock
find /var/ -name mysql.sock
Check the space available in /var/
df
If the directory is full remove some unusefull files/directories
rm /var/cache/*
Probably your issue will sorted now.
Upvotes: 0
Reputation: 154101
One way to reproduce this error: If you meant to connect to a foreign server but instead connect to the non existent local one:
eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $
So you have to specify the host like this:
eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+-------------------------+
| Database |
+-------------------------+
| information_schema |
| mysql |
| performance_schema |
+-------------------------+
3 rows in set (0.00 sec)
mysql> exit
Bye
eric@dev ~ $
Upvotes: 4
Reputation: 2139
Ensure that your mysql service is running
service mysqld start
Then, try the one of the following following:
(if you have not set password for mysql)
mysql -u root
if you have set password already
mysql -u root -p
Upvotes: 213
Reputation: 2623
Make sure you started the server:
mysql.server start
Then connect with root user:
mysql -uroot
Upvotes: 6
Reputation: 51
This is a problem if you are running out of disk space. Solution is to free some space from the HDD.
Please read more to have the explanation :
If you are running MySQL at LINUX check the free space of HDD with the command disk free :
df
if you are getting something like that :
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 5162828 4902260 0 100% /
udev 156676 84 156592 1% /dev
/dev/sda3 3107124 70844 2878444 3% /home
Then this is the problem and now you have the solution!
Since mysql.sock wants to be created at the mysql folder which is almost always under the root folder could not achieve it because lack of space.
If you are periodicaly give the ls command under the mysql directory (at openSUSE 11.1 is at /var/lib/mysql) you will get something like :
hostname:/var/lib/mysql #
.protected IT files ibdata1 mysqld.log systemtemp
.tmp NEWS greekDB mysql mysqld.pid test
ARXEIO TEMP1 ib_logfile0 mysql.sock polis
DATING deisi ib_logfile1 mysql_upgrade_info restore
The mysql.sock file appearing and disappearing often (you must to try allot with the ls to hit a instance with the mysql.sock file on folder).
This caused by not enough disk space.
I hope that i will help some people!!!! Thanks!
Upvotes: 1
Reputation: 9671
It worked for me with the following changes
Whatever path for socket is mentioned in [mysqld] and same in [client] in my.cnf and restart mysql
[mysqld] socket=/var/lib/mysql/mysql.sock
[client] socket=/var/lib/mysql/mysql.sock
Upvotes: 2
Reputation: 9671
Just edit /etc/my.cnf
Add following lines to my.cnf
[mysqld]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
Restart mysql and connect again
mysql -u user -p password database -h host;
Upvotes: 24
Reputation: 2656
ran into this issue while trying to connect mysql in SSH client, found adding the socket path to the command helpful when switching between sockets is necessary.
> mysql -u user -p --socket=/path/to/mysql5143.sock
Upvotes: 0
Reputation: 2283
In my case I have moved socket file to another location inside /etc/my.cnf
from /var/lib/mysql/mysql.sock
to /tmp/mysql.sock
Even after restarting the mysqld service, I still see the error message when I try to connect.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
The problem is with the way that the client is configured. Running diagnostics will actually show the correct socket path. eg ps aux | grep mysqld
Works:
mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock
Does not Work:
mysql -uroot -p
mysql -uroot -p -hlocalhost
You can fix this problem by adding the same socket line under [client]
section inside mysql config.
Upvotes: 15
Reputation: 583
Note that while mysql reads the info of the location of the socketfile from the my.cnf file, the mysql_secure_installation program seems to not do that correctly at times.
So if you are like me and shuffle things around at installationtime you might get into the situation where you can connect to the database with mysql just fine, but the thing can not be secured (not using that script anyway).
To fix this the suggestion from sreddy works well: make a softlink from where the script would expect the socket to where it actually is. Example:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
(I use /tmp/ as a default location for sockets)
Upvotes: 1
Reputation: 31
My problem was that I installed mysql successfully and it worked fine.
But one day, the same error occurred.
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
And no mysql.sock file existed.
This sollution solved my problem and mysql was up and running again:
Log in as root:
sudo su -
Run:
systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service
Test as root:
mysql -u root -p
mysql should now be up and running.
I hope this can help someone else as well.
Upvotes: 0