可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
My problem started off with me not being able to log in as root any more on my mysql install. I was attempting to run mysql without passwords turned on... but whenever I ran the command
# mysqld_safe --skip-grant-tables &
I would never get the prompt back. I was trying to follow these instructions to recover the password.
The screen just looks like this:
root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
and I don\'t get a prompt to start typing the SQL commands to reset the password.
When I kill it by pressing CTRL + C, I get the following message:
error: \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2)\'
Check that mysqld is running and that the socket: \'/var/run/mysqld/mysqld.sock\' exists!
If I retry the command and leave it long enough, I do get the following series of messages:
root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
[1]+ Done mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#
But then if I try to log in as root by doing:
# mysql -u root
I get the following error message:
ERROR 2002 (HY000): Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2)
I checked and /var/run/mysqld/mysqld.sock
file doesn\'t not exist. The folder does, but not the file.
Also, I dunno if this helps or not, but I ran find / -name mysqld
and it came up with:
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
I\'m new to Linux and MySQL, so I don\'t know if this is normal or not. But I\'m including this info just in case it helps.
I finally decided to uninstall and reinstall mysql.
apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
After reinstalling all packages again in the same order as above, during the phpmyadmin install, I got the same error:
ERROR 2002 (HY000): Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2)
So I tried again to uninstall/reinstall. This time, after I uninstalled the packages, I also manually renamed all mysql files and directories to mysql.bad
in their respective locations.
/var/lib/mysql
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql
Then I tried to reinstall mysql-server
and mysql-client
again. But I\'ve noticed that it doesn\'t prompt me for a password. Isn\'t it supposed to ask for an admin password?
回答1:
To find all socket files on your system run:
sudo find / -type s
My Mysql server system had the socket open at /var/lib/mysql/mysql.sock
Once you find where the socket is being opened, add or edit the line to your /etc/my.cnf file with the path to the socket file:
socket=/var/lib/mysql/mysql.sock
Sometimes the system startup script that launched the command line executable specifies a flag --socket=path
. This flag could override the my.cnf location, and that would result in a socket not being found where the my.cnf file indicates it should be. Then when you try to run the mysql command line client, it will read my.cnf to find the socket, but it will not find it since it deviates from where the server created one. So, Unless you care where the socket resides, just changing the my.cnf to match should work.
Then, stop the mysqld process. How you do this will vary by system.
If you\'re super user in the linux system, try one of the following if you don\'t know the specific method your Mysql setup uses:
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -u root -p shutdown
- Some systems aren\'t setup to have an elegant way to stop mysql (or for some reason mysql doesn\'t respond) and you can force terminate mysql with either:
- One step:
pkill -9 mysqld
- Two step (least preferred):
- Find the process id of mysql with either
pgrep mysql
or ps aux | grep mysql | grep -v grep
- Assuming the process id is
4969
terminate with kill -9 4969
After you do this you might want to look for a pid file in /var/run/mysqld/
and delete it
Make sure the permissions on your socket is such that whatever user mysqld is running as can read/write to it. An easy test is to open it up to full read/write and see if it still works:
chmod 777 /var/run/mysqld/mysqld.sock
If that fixes the issue, you can tailor the permissions and ownership of the socket as needed based on your security settings.
Also, the directory the socket resides in has to be reachable by the user running the mysqld process.
回答2:
Try this command,
sudo service mysql start
回答3:
This error occurs due to multiple installations of mysql.
Run the command:
ps -A|grep mysql
Kill the process by using:
sudo pkill mysql
and then run command:
ps -A|grep mysqld
Also Kill this process by running:
sudo pkill mysqld
Now you are fully set just run the following commands:
service mysql restart
mysql -u root -p
Have very well working mysql again
回答4:
The solution is way easier.
- First, you have to locate(in Terminal with \"sudo find / -type s\") where your
mysql.sock
file is located. In my case it was in /opt/lampp/var/mysql/mysql.sock
- Fire up Terminal and issue
sudo Nautilus
This starts your Files manager with super user privileges
- From Nautilus navigate to where your
mysql.sock
file is located
- Right click on the file and select Make Link
- Rename the Link File to
mysqld.sock
then Right click on the file and Cut it
- Go to
/var/run
and create a folder called mysqld
and enter it
- Now right click and Paste the Link File
- Voila! You will now have a
mysqld.sock
file at /var/run/mysqld/mysqld.sock
:)
回答5:
Just Need to Start MySQL Service after installation:
For Ubuntu:
sudo service mysql start;
For CentOS or RHEL:
sudo service mysqld start;
回答6:
Okay just copy and paste these codes: This should be done in the terminal, inside a server, when your mysql database is not properly installed, and when you are getting this error: \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2)\'.
Stop MySql
sudo /etc/init.d/mysqld stop
Restart it or start it
sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start
Make a link like this and give it to the system
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
Run a secure installation which guides all the process you need to do to configure mysql
/usr/bin/mysql_secure_installation
回答7:
I faced same error and found that it was due to upgradation of packages, So after restarting my system I resolved error.
I think due to sql libraries/ packages update that error occured, So try this if you are doing some upgrading :)
回答8:
There is a bug on Ubuntu with MySQL 5.6 and 5.7 where var/run/mysqld/
would disappear whenever MySQL service stopped or is rebooted. This prevents MySQL from running at all. Found this workaround, which isn\'t perfect, but at least it gets it running after stopping/reboot:
mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/
回答9:
There is a lots of reason for this issue, but sometimes just restart the mysql server, it will fix the issue.
sudo service mysql restart
回答10:
The answer of the user load step worked for me.
Sometimes is need edit the file in /etc/mysql/my.cnf
add line to client
[client]
password = your_mysql_root_password
port = 3306
host = 127.0.0.1
socket = /var/lib/mysql/mysql.sock
回答11:
*Error: \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2)\'
solutions
finally uninstall and reinstall mysql. **
- sudo apt-get remove mysql-server
- sudo apt-get remove mysql-client
- sudo apt-get remove mysql-common
- sudo apt-get remove phpmyadmin
then install again by
- sudo apt-get install mysql-server-5.6
After this operation, 164 MB of additional disk space will be used.
- Do you want to continue? [Y/n] Y press YES for complete installations
......
.......
At last you will get these lines....
Setting up libhtml-template-perl (2.95-1) ...
Setting up mysql-common-5.6 (5.6.16-1~exp1) ...
Processing triggers for libc-bin (2.19-0ubuntu6)
Processing triggers for ureadahead (0.100.0-16) ...
And then
root@ubuntu1404:~# mysql -u root -p (for every password first u
should use )
Enter password:
Note :Entered password should be same as the installation time
password of mysql(like .root,system,admin,rahul etc...)
Then type
USE rahul_db(database name);
Thanks.**
回答12:
you can find mysqld.sock
in /var/run/mysqld
if you have already installed mysql-server
by sudo apt-get install mysql-server
回答13:
Maybe someone facing this problem. I am using Mysql Workbench on Ubuntu 14 and got this error.
mysqldump: Got error: 2002: Can\'t connect to local MySQL server through socket \'/tmp/mysql.sock\' (2) when trying to connect
Find your socket file by running sudo find / -type s
, in my case it was /run/mysqld/mysqld.sock
So, I just created a link to this file in tmp
directory.
sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
回答14:
ERROR 2002 (HY000): Can\'t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock\' (2)
in /etc/my.cnf
add this lines:
[client]
socket=/var/lib/mysql/mysql.sock <= this path should be also same as is[mysqld]
And restart the service with:
service mysql restart
this worked for me
回答15:
Using XAMPP on ubuntu:
Create a folder called mysqld inside /var/run directory. You can accomplish that using the command sudo mkdir /var/run/mysqld
.
Create a symbolic link to mysql.sock file that is created by the XAMPP server when it is started. You can use the command sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock
.
Note: The mysql.sock file is created when the server is started and removed when the server is stopped, so sometimes the link you created might appear to be broken but it should work as long as you have started the server using either sudo /opt/lampp/lampp start
or any other means.
- Start the server if it\'s not already running and try executing your program again.
Good luck! I hope you\'ll get away with it this time.
回答16:
In My case two mysqld processes were running..
killed the optional processs by using
pkill -9 mysqld
回答17:
If you have a lot of databases and tables on your system, and if you have innodb_file_per_table
set in my.cnf, then your mysql server might have run out of opened objects / files (or rather the descriptors for these objects)
Set a new max number with
open-files-limit = 2048
and restart mysql.
This approach might help when the socket is not created at all, but really this might not not be the real problem, there is an underlying problem.
回答18:
I just had this problem on Ubuntu 14.10
Turns that mysql-server
was no longer installed (somehow it had been removed) but I couldn\'t just install it because there were some broken packages and dependency issues/conflicts.
In the end I had to reinstall mysql
sudo apt-get remove mysql-client
sudo apt-get install mysql-server
回答19:
This was mentioned a couple of times already, but this worked immediately for me:
service mysql restart
回答20:
Changing the host
to 127.0.0.1
worked for me.
Edit the file in /etc/mysql/my.cnf
and add the below mentioned line to the section: client
[client]
port = 3306
host = 127.0.0.1
socket = /var/lib/mysql/mysql.sock
After you are done with it. Execute the following command.
sudo service mysql start
回答21:
I run my MySQL on a virtual machine in Ubuntu, So what had happened was when I restarted my host and the VM, The IP had changed. I had configured mysql to run on IP 192.168.0.5 and now due to dynamic allocation of IP, my new IP was 192.168.0.8
If you have the same problem just check your ip with the command ifconfig
.
Check your MySQL binding with the command cat /etc/mysql/my.cnf | grep bind-address
If both IP are the Same, then reinstall your mysql server
If not, then change your IP in /etc/network/interfaces
using nano, vi, vim or anything of your preference.
I prefer sudo nano /etc/network/interfaces
and enter the following
auto eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0
Save the interfaces file, restart your interface sudo ifdown eth0
&& sudo ifup eth0
replace \"eth0\" with your network interface
Restart MySQL sudo service mysql stop
followed by sudo service mysql start
If you have the same issue as mine, You are good to go!
回答22:
I would also check the mysql configuration. I was running into this problem with my own server but I was a bit too hasty and misconfigured the innodb_buffer_pool_size for my machine.
innodb_buffer_pool_size = 4096M
It usually runs fine up to 2048 but I guess I don\'t have the memory necessary to support 4 gigs.
I imagine this could also happen with other mysql configuration settings.
回答23:
I had similar problem on a CentOS VPS. If MySQL won\'t start or keeps crashing right after it starts, try these steps:
1) Find my.cnf file (mine was located in /etc/my.cnf) and add the line:
innodb_force_recovery = X
replacing X with a number from 1 to 6, starting from 1 and then incrementing if MySQL won\'t start. Setting to 4, 5 or 6 can delete your data so be carefull and read http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html before.
2) Restart MySQL service. Only SELECT will run and that\'s normal at this point.
3) Dump all your databases/schemas with mysqldump one by one, do not compress the dumps because you\'d have to uncompress them later anyway.
4) Move (or delete!) only the bd\'s directories inside /var/lib/mysql, preserving the individual files in the root.
5) Stop MySQL and then uncomment the line added in 1). Start MySQL.
6) Recover all bd\'s dumped in 3).
Good luck!
回答24:
I uninstalled mysql in Ubuntu 16.04 https://askubuntu.com/questions/172514/how-do-i-uninstall-mysql
I reinstalled mysql
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-16-04
This seemed to work.
回答25:
on archlinux I faced this error and the problem was that the mysqld
-service wasn\'t running.
However I couldn\'t enable the mysql-service with systemctl start mysqld
as instructed in the Archlinux documentation. I think the error was something like
mysqld.service not found
I first needed to restart the system.
Then I entered the command again (and entered systemctl enable mysqld
) and now mysql
was able to find the created mysql.sock
.
回答26:
I had this type of problem when i resize the droplet on digitalocean. I had upgrade the mysql version and works for me. Here is the tutorial what i applied - https://serverpilot.io/community/articles/how-to-upgrade-mysql-5.5-to-5.6-on-ubuntu-14.04.html
回答27:
I tried almost all the listed solutions, none worked for me until I restarted the machine and then mysql server restarted when I issued the command \"service mysql restart\".
回答28:
In my case the problem was the bind addresses in /etc/mysql/my.cnf, then:
nano /etc/mysql/my.cnf
search bind addresses and remove the specific with the host ip (not the 127.0.0.1)
回答29:
The mysql.sock file is created when MariaDB starts and is removed when MariaDB is shutdown. It won\'t exist if MariaDB is not running.
maybe you didn\'t install MariaDB.
YOU COULD FOLLOW THE INSTRUCTION BELOW:
https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7
BEST
回答30:
Try the following at a terminal prompt:
sudo mysql
Once that lets you in, you can create a new user and grant privileges that you want on the specific database they need access to.
Mysql 5.7 changed some things and by default uses the auth_socket plugin (as opposed to mysql_native_password) for root to protect the account from getting hacked. You can override this by setting the plugin field for root, but unless you have a very good reason you probably shouldn\'t circumvent the protection. Especially when sudo mysql
is easier than mysql -u root -p
anyway.
I found out this info - of all places - from a Raspberry Pi help site. Worked like a charm after Lubuntu 18.04 annoyed the heck out of me for a couple hours.