我在Ubuntu 12.04 LTS(精确的穿山甲)上安装了LAMP,然后在phpMyAdmin上设置了root密码。我忘记了密码,现在无法登录。当我尝试通过终端更改密码时,我得到:
错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)
我怎样才能解决这个问题?我无法打开LAMP,将其卸载或重新安装。
我在Ubuntu 12.04 LTS(精确的穿山甲)上安装了LAMP,然后在phpMyAdmin上设置了root密码。我忘记了密码,现在无法登录。当我尝试通过终端更改密码时,我得到:
错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)
我怎样才能解决这个问题?我无法打开LAMP,将其卸载或重新安装。
Answers:
我曾经遇到过这个问题,并通过安装解决了这个问题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
,套接字文件config可能是,/tmp/mysql.sock
而在/etc/mysql/my.cnf
套接字文件config中的可能是/var/run/mysqld/mysqld.sock
。因此,删除或重命名/etc/mysql/my.cnf
,让mysql使用/etc/my.cnf
,即可解决问题。
sudo apt-get install mysql-server
在ubuntu上安装mysql
尝试这个:
mysql -h 127.0.0.1 -P 3306 -u root -p <database>
另外(看看它是否正在运行):
telnet 127.0.0.1 3306
可能只是my.cnf
文件中的配置错误/etc/somewhere
(取决于Linux发行版)。
/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 -uroot
选择要使用的MySQL数据库
use mysql;
重设密码
-- MySQL version < 5.7
update user set password=PASSWORD("mynewpassword") where User='root';
-- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
update user set authentication_string=password('mynewpassword') where user='root';
冲洗特权
flush privileges;
重新启动服务器
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
输入新密码,然后再次使用服务器,就像什么也没发生
这取自“ 重置MySQL根密码”。
repair table user use_frm
对我来说就可以解决此问题。- stackoverflow.com/questions/4297592/...
update user set authentication_string=password('mynewpassword') where user='root';
我尝试了以下步骤:
super user
或使用sudo
/etc/mysql/my.cnf
使用gedit打开bind-address
,然后将其值更改为数据库服务器主机的IP地址。对我来说,这是localhost
或127.0.0.1
sudo service mysql start
它为我工作。
我有一个类似的问题。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,
以我为例,磁盘已满,并且mysqld无法启动。
尝试重新启动mysql服务。
> service mysql restart
要么
> service mysql stop
> service mysql start
如果无法识别stop
命令,则肯定是磁盘空间。您应该在分区中留出一些空间mysql
中分配或使磁盘更大。
使用以下命令检查磁盘空间
> df -h
我通过取消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 Droplet上运行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
或重新启动MySQL服务/etc/init.d/mysql restart
。
完成上述步骤后,我的问题已解决。我很少遇到这个问题,并且可能有更好的方法,因此如果需要的话,请务必提供建设性的反馈意见。
您的mysql服务器可能未运行。键入mysql.server start
终端以确保其运行。
检查"bind-adress"
my.cnf中的参数。
否则尝试使用以下命令:
mysql -h 127.0.0.1 -P 3306 -u root -p
-h代表host 127.0.0.1
,即localhost
-P(注意-P为大写)3306
,即MySQL的默认端口
这对我有用:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysql restart
这将创建一个链接。
如果您使用的是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
不?
如果您的安装是最新的,则应确认安装的是SERVER ...作为mysql-server-5.5。
如果您在Linux机器上安装了XAMPP,请尝试将my.cnf
文件从复制/opt/lampp/etc/my.cnf
到/etc/my.cnf
。
然后,mysql -u root
再次运行...现在,您应该具有正确的套接字,并且能够运行MySQL客户端。
就我而言,它是通过一些研发工作的:
我可以使用以下方式连接到MySQL
root-debian#mysql -h 127.0.0.1 -u root -p
但它不与 mysql -u root -p
。
我bind-address
在my.cnf中找不到任何内容。所以我outcommented参数socket=/var/lib/mysql/mysqld.sock
中my.cnf
这是害我一个问题登录。
重新启动服务后,一切正常:
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)
打开终端并输入:
sudo apt-get purge mysql-client-core-5.6
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get install mysql-client-core-5.5
sudo apt-get install mysql-server
MySQL数据库核心客户端和MySQL Server软件包都将是相同的5.5版本。MySQL客户端5.5和MySQL Server 5.5是Ubuntu 14.04中这些软件包的“最佳”版本,具体由软件包维护者确定。
如果您想安装MySQL Client 5.6和MySQL Server 5.6,也可以在Ubuntu软件中心中找到mysql-client-core-5.6和mysql-server-5.6软件包。重要的是,在任何情况下,客户端和服务器版本号均匹配。
这对我有用。
就我而言,当我运行时,似乎真的无法杀死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 passwod时遇到问题,似乎是“ 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;