问题描述
我的问题开始于我无法在我的mysql安装上以root用户身份登录。我试图在没有打开密码的情况下运行mysql …但每当我运行命令时
# mysqld_safe --skip-grant-tables &
我永远不会得到提示。我试图关注these instructions to recover the password。
屏幕看起来像这样:
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
我没有得到提示开始键入SQL命令来重置密码。
当我通过按CTRL
+ C
杀死它时,我收到以下消息:
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!
如果我重试命令并保留足够长的时间,我会得到以下一系列消息:
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#
但是如果我尝试以root身份登录:
# mysql -u root
我收到以下错误消息:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
我检查过并且/var/run/mysqld/mysqld.sock
文件不存在。该文件夹,但不是文件。
另外,我不知道这是否有帮助,但是我跑了find / -name mysqld
,它提出了:
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
我是Linux和MySQL的新手,所以我不知道这是否正常。但我会包含这些信息以防它有所帮助。
我终于决定卸载并重新安装mysql。
apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
以与上面相同的顺序再次重新安装所有软件包后,在phpmyadmin安装期间,我得到了同样的错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
所以我再次尝试卸载/重新安装。这次,在我卸载软件包之后,我还手动将所有mysql文件和目录重命名为mysql.bad
各自的位置。
/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
然后我尝试再次重新安装mysql-server
和mysql-client
。但我注意到它没有提示我输入密码。是不是应该要求管理员密码?
最佳解决方法
要查找系统上运行的所有套接字文件:
sudo find / -type s
我的Mysql服务器系统在/var/lib/mysql/mysql.sock
打开了套接字
找到套接字的打开位置后,使用套接字文件的路径在/etc/my.cnf文件中添加或编辑该行:
socket=/var/lib/mysql/mysql.sock
有时,启动命令行可执行文件的系统启动脚本指定标志--socket=path
。此标志可以覆盖my.cnf位置,这将导致找不到my.cnf文件指示的插座。然后,当您尝试运行mysql命令行客户端时,它将读取my.cnf以查找套接字,但由于它与服务器创建的不同,因此无法找到它。所以,除非你关心套接字所在的位置,否则只需更改my.cnf即可。
然后,停止mysqld进程。您如何做到这一点因系统而异。
如果您是linux系统中的超级用户,如果您不知道Mysql安装程序使用的特定方法,请尝试以下操作之一:
-
service mysqld stop
-
/etc/init.d/mysqld stop
-
mysqladmin -u root -p shutdown
-
有些系统没有设置优雅的方法来阻止mysql(或者由于某种原因mysql没有响应)你可以强制终止mysql:
-
一步:
pkill -9 mysqld
-
两步(最不喜欢):
-
使用
pgrep mysql
或ps aux | grep mysql | grep -v grep
查找mysql的进程ID -
假设进程ID为
4969
,则以kill -9 4969
终止
-
-
执行此操作后,您可能希望在/var/run/mysqld/
中查找pid文件并将其删除
确保套接字上的权限是这样的,即任何用户mysqld正在运行,因为它可以读/写它。一个简单的测试是打开它以完全读/写,看看它是否仍然有效:
chmod 777 /var/run/mysqld/mysqld.sock
如果这样可以解决问题,则可以根据安全设置根据需要定制套接字的权限和所有权。
此外,运行mysqld进程的用户必须可以访问套接字所在的目录。
次佳解决方法
试试这个命令,
sudo service mysql start
第三种解决方法
由于多次安装mysql而发生此错误。运行命令:
ps -A|grep mysql
使用以下方法终止进程:
sudo pkill mysql
然后运行命令:
ps -A|grep mysqld
同时运行以下命令终止此过程:
sudo pkill mysqld
现在您已完全设置,只需运行以下命令:
service mysql restart
mysql -u root -p
有很好的工作mysql了
第四种方法
解决方案更容易。
-
首先,您必须找到(在终端中使用“sudo find /-type s”)
mysql.sock
文件所在的位置。就我而言,它是在/opt/lampp/var/mysql/mysql.sock
中 -
启动终端并发出
sudo Nautilus
这将启动具有超级用户权限的文件管理器 -
从Nautilus导航到
mysql.sock
文件所在的位置 -
右键单击该文件,然后选择“生成链接”
-
将链接文件重命名为
mysqld.sock
,然后右键单击该文件并将其剪切 -
转到
/var/run
并创建一个名为mysqld
的文件夹并输入 -
现在右键单击并粘贴链接文件
-
瞧!您现在将在
/var/run/mysqld/mysqld.sock
上拥有一个mysqld.sock
文件:)
第五种方法
安装后只需启动MySQL服务:
对于Ubuntu:
sudo service mysql start;
对于CentOS或RHEL:
sudo service mysqld start;
第六种方法
好吧,只需复制并粘贴这些代码:这应该在终端,服务器内部,当你的mysql数据库没有正确安装时,以及当你收到这个错误时:’Can’t通过套接字连接到本地MySQL服务器’/var/run/mysqld/mysqld.sock'(2)’ 。
停止MySql
sudo /etc/init.d/mysqld stop
重启或启动它
sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start
建立这样的链接并将其提供给系统
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
运行安全安装,指导您配置mysql所需的所有过程
/usr/bin/mysql_secure_installation
第七种方法
我遇到了同样的错误,发现这是由于软件包的升级,所以在重启系统后我解决了错误。
我认为由于sql库/包更新发生了错误,所以如果你正在做一些升级尝试这个:)
第八种方法
Ubuntu上有一个带有MySQL 5.6和5.7的错误,只要MySQL服务停止或重新启动,var/run/mysqld/
就会消失。这可以防止MySQL运行。找到这个解决方法,这不是完美的,但至少它在停止/重启后运行:
mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/
第九种方法
这个问题有很多原因,但有时只是重新启动mysql服务器,它将解决问题。
sudo service mysql restart
第十种方法
用户加载步骤的答案对我有用。有时需要在/etc/mysql/my.cnf
中编辑文件添加到客户端的行
[client]
password = your_mysql_root_password
port = 3306
host = 127.0.0.1
socket = /var/lib/mysql/mysql.sock