UNIX套接字文件的mysqld_safe目录'/ var / run / mysqld'不存在


187

使用mysqld_safe启动mysql服务器5.7.17时,发生以下错误。

2017-02-10T17:05:44.870970Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.872874Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.874547Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

如何解决?

Answers:


501

在安装时未创建此目录似乎很奇怪-您是否在my.cfg中手动更改了套接字文件的路径?

您是否尝试过自己简单地创建此目录,然后重新启动服务?

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

2
不,我没有手动进行任何更改。我将通过创建目录来尝试此操作。感谢您的建议
Rajadip

14
它发生在mysql 5.7上。当您停止mysql服务时,/ var / run / mysqld将被删除并在您再次启动该服务时重新创建。
Capy 2015年

2
必须同时使用sudo
Kasun Rajapaksha

1
@Capy-赞成-@Matt Clark-您请编辑答案以包括以下信息:即使可能已经创建了DIR,但是如果我们运行DIR,则应将其删除- $ sudo /etc/init.d/mysql stop谢谢
Rohit Dhankar

如果按照以下步骤操作仍然出现相同的错误,请注意,sudo由于此目录一旦mysql停止就被删除,没有此目录sudo,将无法访问这些文件夹,因此将解决此问题!!!
Jadeye

71

当我使用代码mysqld_safe --skip-grant-tables &但出现错误时:

用于UNIX套接字文件的mysqld_safe目录'/ var / run / mysqld'不存在。

$ systemctl stop  mysql.service
$ ps -eaf|grep mysql
$ mysqld_safe --skip-grant-tables &

我解决了:

$ mkdir -p /var/run/mysqld
$ chown mysql:mysql /var/run/mysqld

现在我使用相同的代码mysqld_safe --skip-grant-tables &并得到

mysqld_safe使用/ var / lib / mysql中的数据库启动mysqld守护程序

如果我使用,$ mysql -u root我会得到:

服务器版本:5.7.18-0ubuntu0.16.04.1(Ubuntu)

版权所有(c)2000、2017,Oracle和/或其分支机构。版权所有。

Oracle是Oracle Corporation和/或其分支机构的注册商标。其他名称可能是其各自所有者的商标。

输入“帮助;” 或'\ h'寻求帮助。键入“ \ c”以清除当前输入语句。

mysql>

现在该更改密码了:

mysql> use mysql
mysql> describe user;

读取表信息以完成表名和列名您可以关闭此功能以使用-A更快地启动

数据库已更改

mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('newpwd');

或者,如果您有一个可以从任何地方连接的mysql根帐户,则还应该执行以下操作:

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

替代方法:

   USE mysql
   UPDATE user SET Password = PASSWORD('newpwd')
   WHERE Host = 'localhost' AND User = 'root';

如果您拥有可以从任何地方访问的root帐户,则:

 USE mysql
 UPDATE user SET Password = PASSWORD('newpwd')
 WHERE Host = '%' AND User = 'root';`enter code here

现在需要quit从mysql停止/启动

FLUSH PRIVILEGES;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

现在再次使用mysql -u root -p并使用新密码来获取

mysql>


9
自MySQL 5.7.6以来,“密码”列已重命名为“ authentication_string”。在这里,您可以了解更多信息:bugs.mysql.com/bug.php?id=76655
IberoMedia

6

在CentOS中为我工作:

$ service mysql stop
$ mysqld --skip-grant-tables &
$ mysql -u root mysql

mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

$ service mysql restart

0

如果您的数据库没有任何数据,或者您还有其他地方可以还原该数据,则可以尝试以下操作。您将需要知道Ubuntu服务器的root密码,而不是mysql的root密码。

我们中的许多人很可能已经安装了“ mysql_secure_installation”,因为这是最佳实践。导航到mysql_secure_installation存在的bin目录。可以在Ubuntu系统上的/ bin目录中找到它。通过重新运行安装程序,将提示您是否更改根数据库密码。


但是,我认为这是只使用安全的mysql服务器,不是吗?在这个问题上没有区别。
拉贾迪普

如果您忘记了root密码,这将无济于事,因为您必须先输入当前密码。
Jistanidiot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.