我在 Ubuntu 12.04 LTS(Precise Pangolin)上安装了 LAMP,然后在 phpMyAdmin 上设置了 root 密码。我忘记了密码,现在无法登录。当我尝试通过终端更改密码时,我得到:
ERROR 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
我怎样才能解决这个问题?我无法打开、卸载或重新安装 LAMP。
我曾经遇到过这个问题并通过安装 mysql-server
解决了它,因此请确保您已安装 mysql-server
,而不是 mysql-client
或其他东西。
该错误意味着文件 /var/run/mysqld/mysqld.sock
不存在,如果您没有安装 mysql-server
,则该文件将不存在。所以在这种情况下,安装它
sudo apt-get install mysql-server
但是如果 mysql-server
已经安装并且正在运行,那么您需要检查配置文件。
配置文件是:
/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf
在 /etc/my.cnf
中,套接字文件配置可能是 /tmp/mysql.sock
,而在 /etc/mysql/my.cnf
中,套接字文件配置可能是 /var/run/mysqld/mysqld.sock
。所以,删除或重命名/etc/mysql/my.cnf
,让mysql使用/etc/my.cnf
,那么问题就解决了。
尝试这个:
mysql -h 127.0.0.1 -P 3306 -u root -p <database>
另外(查看它是否正在运行):
telnet 127.0.0.1 3306
可能只是 /etc/somewhere
中的 my.cnf
文件中的错误配置(取决于 Linux distribution)。
/etc/my.cnf
并评论 #bind-address = 127.0.0.1
Reference 1 Reference 2。然后我可以连接。在此之后,我意识到我现在遇到了这个 2002 年的错误,它把我带到了这个答案,现在它又可以工作了。当然,我同意你的解释,解释为什么只输入 mysql
而没有 -h
会引发错误。
mysql -h localhost
不起作用。确保使用答案中指定的 mysql -h 127.0.0.1
。
我看到了所有这些答案,但没有一个提供重置密码的选项,也没有接受的答案。实际的问题是他忘记了密码,所以他需要重置,而不是查看它是否正在运行(安装与否),因为这些答案中的大多数暗示。
重置密码
请按照以下步骤操作(如果您真的忘记了密码会很有帮助,并且您可以随时尝试,即使您目前不在这种情况下):
停止 mysql sudo /etc/init.d/mysql stop 或者对于其他发行版本: sudo /etc/init.d/mysqld stop 以安全模式启动 MySQL sudo mysqld_safe --skip-grant-tables & 使用 root mysql 登录 MySQL - u root 选择要使用的mysql数据库使用mysql;重置密码 -- MySQL version < 5.7 update user set password=PASSWORD("mynewpassword") where User='root'; -- MySQL 5.7,mysql.user 表“password”字段->“authentication_string”更新用户集 authentication_string=password('mynewpassword') where user='root';刷新权限 刷新权限;重启服务器 quit 停止并再次启动服务器 Ubuntu 和 Debian: sudo /etc/init.d/mysql stop ... sudo /etc/init.d/mysql start
在 CentOS、Fedora 和 RHEL 上:
sudo /etc/init.d/mysqld stop
...
sudo /etc/init.d/mysqld start
使用新密码登录 mysql -u root -p 输入新密码并再次享受您的服务器,就像什么都没发生一样
这取自 Reset a MySQL root password。
repair table user use_frm
就为我解决了这个问题。 - stackoverflow.com/questions/4297592/…
update user set authentication_string=password('mynewpassword') where user='root';
passowrd()
参数的情况下提供新密码值的小修改。
我尝试了以下步骤:
以超级用户身份登录或使用 sudo 打开 /etc/mysql/my.cnf 使用 gedit 找到 bind-address,并将其值更改为数据库服务器主机的 IP 地址。对我来说,它是 localhost 或 127.0.0.1 保存并关闭文件。回到终端执行 sudo service mysql start
它对我有用。
在我的情况下,磁盘已满,mysqld 无法再启动。
尝试重启mysql服务。
> service mysql restart
或者
> service mysql stop
> service mysql start
如果它不能识别 stop
命令,那么它肯定是磁盘空间。您应该在分区 mysql
中分配一些空间或使磁盘更大。
检查磁盘空间
> df -h
我通过执行以下命令解决了这个问题:
mysql.server start
如果您在 Mac 上并使用 brew 安装 mysql,只需使用:
brew services start mysql
我有一个类似的问题。 mysql 无法启动:
sudo service mysql start
start: Job failed to start
如果我禁用 apparmor:
sudo aa-complain /etc/apparmor.d/*
问题消失了。问题是 mysqld 试图访问 /run/mysqld/mysqld.sock 但 apparmor 配置文件只授予 /var/run/mysqld/mysqld.sock 权限(/var/run 符号链接到 /run,所以这些实际上是相同)。不知道为什么 mysqld 不使用 var 路径,因为这是在所有配置文件中设置的,但是您可以通过将以下内容添加到 /etc/apparmor.d/usr.sbin.mysqld 来解决问题
/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,
我通过终止 mysql
进程解决了这个问题:
ps -ef | grep mysql
kill [the id]
然后我再次启动服务器:
sudo /etc/init.d/mysql restart
但 start
也可以:
sudo /etc/init.d/mysql start
然后我以 admin
的身份登录,我就完成了。
不知何故,MySQL 服务器进程没有创建套接字,或者客户端在错误的位置寻找套接字。
我的第一个建议是检查 MySQL 服务器是否正在运行。第二个建议可能是,MySQL 服务器是否在另一台主机上运行?如果是这样,请将 -h <hostname>
标志添加到终端中的 MySQL 客户端。
如果 MySQL 确实在运行,并且在本地运行,请检查您的 my.cnf
文件。应该有一条线
socket = /var/run/mysqld/mysqld.sock
看看这是否与您在帖子中提到的套接字位置相匹配。
根据经验,我会说最有可能的情况是您的 MySQL 服务器根本没有运行,或者没有在与您从终端运行 MySQL 客户端的主机上运行。
在我不得不重新启动生产服务器后,我刚刚遇到了同样的问题。我在 DigitalOcean 液滴上运行 Debian 8.1 (Jessie)。
这是我为解决我的问题所做的:
检查文件 /var/run/mysqld/mysqld.sock 是否存在。如果没有,请通过输入 touch /var/run/mysqld/mysqld.sock 手动创建它(这是我必须做的)。所以 MySQL 进程可以使用这个文件。通过输入 chown mysql /var/run/mysqld/mysqld.sock 更改所述文件的所有权。完成“2”后,通过输入 service mysql restart 或 /etc/init.d/mysql restart 重新启动 MySQL 服务。
完成以上步骤后,我的问题就解决了。我很少遇到这个问题,可能有更好的方法,所以如果需要的话,一定要提供建设性的反馈:)。
检查 my.cnf 中的 "bind-adress"
参数。
否则尝试使用以下命令:
mysql -h 127.0.0.1 -P 3306 -u root -p
-h 代表主机 127.0.0.1,即 localhost
-P(注意 -P 为大写)为端口 3306,即 MySQL 的默认端口
您的 mysql-server 可能没有运行。通过在终端中键入 mysql.server start
确保它运行。
我想每当你得到错误
错误 2002 (HY000): 无法通过套接字 '/var/lib/mysql/mysql.sock' 连接到本地 MySQL 服务器
我建议首先检查您的 mysql
守护程序是否正在运行...大多数情况下它不会默认运行。您可以通过/etc/init.d/mysqld status
查看。
如果它没有运行,请先启动它:
.../etc/init.d/mysqld start.
我敢打赌它会 110% 工作。
sudo /etc/init.d/mysql start
也是正确的解决方案,因为不支持 upstart 服务:github.com/Microsoft/WSL/issues/745
service mysqld start
如果您使用 Amazon EC2,并且您在实例上遇到此问题,那么您只需执行以下操作:
sudo yum install mysql-server
sudo service mysqld restart
Amazon EC2 没有安装服务器(仅安装了客户端),因此如果出现这种情况,您需要在您的实例上安装它,然后尝试
mysql -u root -p
检查是否有效。
而不是使用本地主机:
mysql -u myuser -pmypassword -h localhost mydatabase
使用 127.0.0.1
mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase
(另请注意,-p 和 mypassword 之间没有空格)
享受 :)
127.0.0.1
有效而 localhost
无效?!
这对我有用:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysql restart
这将创建一个链接。
确保你有重要数据库的备份,然后尝试卸载 MySQL 相关的东西:
apt-get remove --purge mysql\*
然后再次安装:
apt-get install mysql-server mysql-client
这对我有用,并且保留了数据。
如果 PHP MySQL 显示错误,您可能需要重新安装 PHP MySQL:
apt-get install php5-fpm php5-mysql
我也面临同样的问题,如果您的 mysql server
默认情况下未运行,它将在几秒钟后再次停止,因此您再次运行 ($ sudo service mysql start
) 命令,如果知道,您可以更改。
对于那个使用命令
$ sudo service mysql start
(如果需要,请输入用户密码,因为我们使用 sudo
)然后运行
$ sudo mysql -u root -p (put user password if required )
现在你有了你的数据库
我也遇到了这个问题,但我只是这样做了:
sudo service mysql restart
它对我有用。
看来您的 MYSQL 已停止。使用以下命令再次启动 MySQL
sudo service mysql start
我找到了解决方案
在触发之前命令:mysql_secure_installation
第 1 步:sudo systemctl stop mariadb
第 2 步:sudo systemctl start mariadb
第 3 步:mysql_secure_installation
然后它会询问 root 密码,您只需按 Enter 并设置新的 root 密码。
如果您的安装是最近的,您应该确认您的安装是否是安装服务器... as mysql-server-5.5 .. 也许您只安装了“mysql” .. 这只是客户端而不是服务器。
如果您在 Linux 机器上安装了 XAMPP,请尝试将 my.cnf
文件从 /opt/lampp/etc/my.cnf
复制到 /etc/my.cnf
。
然后,再次运行 mysql -u root
...您现在应该拥有正确的套接字并能够运行 MySQL 客户端。
在我的情况下,默认端口 3306 正在被其他进程使用,因此它没有启动。在我停止其他服务并执行 sudo service mysql start
后,它运行良好。顺便说一句,您可以使用 sudo lsof -Pn -iTCP:3306
之类的东西来查看谁可能正在使用该端口。
就我而言,它通过一些研发工作:
我可以使用连接到 MySQL
root-debian#mysql -h 127.0.0.1 -u root -p
但它不适用于 mysql -u root -p
。
我在 my.cnf 中没有找到任何 bind-address
。因此,我对 my.cnf
中的参数 socket=/var/lib/mysql/mysqld.sock
进行了注释,这导致我出现登录问题。
重启服务后一切正常:
root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)
就我而言,当我运行时,似乎我真的无法杀死 mysql 进程
sudo service mysql stop
ps -ef | grep mysql
mysql 进程一直在那里,看起来它正在阻塞套接字文件,并且新的 mysql 进程无法自己创建它。
所以这有帮助
cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
现在我可以使用登录数据库
mysql -u root
然后更新root密码:
UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;
PS:我在更新 root 密码时遇到了问题,似乎是“auth_socket”插件的问题,所以我必须创建具有完全权限的新用户
insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y", `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y", `Repl_client_priv` = "Y", `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y", `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";
这将创建没有密码的用户“super”,然后您可以连接 mysql -u super
use mysql;
<br>你现在可以使用 <br> UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
在 Debian 服务器 Jessie 上,我的工作解决方案是简单地做
service mysql restart
service mysql reload
作为根用户
我用重启mysql解决了这个问题
/etc/init.d/mysql stop
和
/etc/init.d/mysql start
而已。
拳头,尝试重新启动它
服务 mysql 停止
服务 mysql 启动
如果上面没有解决问题,现在让我们去......
完全卸载 MySQL
sudo apt-get remove --purge mysql\*
重新安装它
sudo apt install mysql-server mysql-client
测试它是否运行
sudo mysql
安装php驱动
sudo apt install php7.4 php7.4-fpm php7.4-mysql php7.4-cgi php7.4-cli php7.4-common
您可以用 php7.x 或 php8.0.12 或更高版本替换 php7.4 非常好!
❗️小心,如果不保存数据,您将丢失数据。如果可能,请备份您的数据。
根据经验,我说您需要先检查服务器是否正在运行,然后再尝试配置 MySQL。最后的解决方案是重新安装 MySQL。
sudo apt-get install mysql-server
在 ubuntu 上安装 mysqletc/mysql/mysql.conf.d/mysqld.cnf
中。它是存在/var/run/mysqld/mysqld.sock
的唯一文件