【问题标题】:mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists用于 UNIX 套接字文件的 mysqld_safe 目录“/var/run/mysqld”不存在
【发布时间】:2017-06-28 10:16:49
【问题描述】:

使用 mysqld_safe 启动 mysql server 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.

如何解决?

【问题讨论】:

    标签: mysql sockets


    【解决方案1】:

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

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

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

    【讨论】:

    • 不,我没有手动进行任何更改。我将通过创建目录来尝试这个。感谢您的建议
    • 它发生在 mysql 5.7 上。当您停止 mysql 服务时,/var/run/mysqld 将被删除,并在您再次启动该服务时重新创建。
    • 两者都必须使用 sudo
    • @Capy - 赞成 - @Matt Clark - 您请编辑您的答案以包含即使 DIR 可能已创建但如果我们运行它将被删除的信息 - $ sudo /etc/init.d/mysql stop,谢谢
    • 如果您在执行这些步骤后仍然遇到相同的错误请注意sudo 将解决此问题,因为一旦mysql 停止并且没有sudo,它将无法访问此目录这些文件夹!!!
    【解决方案2】:

    当我使用代码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 root 帐户,你也应该这样做:

    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
    

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

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

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

    mysql>

    【讨论】:

    【解决方案3】:

    在 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
    

    【讨论】:

      【解决方案4】:

      发生在我身上。
      消息实际上不正确(而且英语很糟糕:-))。

      为了找出有问题的文件,我运行了这个命令(以 root 身份):
      sh -x /etc/init.d/mysqld start

      它打印了这个:

      错误:无法通过套接字“/mysql-dir/mysql.sock”连接到本地 MySQL 服务器
      检查 mysqld 是否正在运行并且套接字:'/mysql-dir/mysql.sock' 存在!

      所以似乎套接字文件需要预先存在,所以我这样做了,再次以 root 身份:

      cd /mysql 目录
      触摸 mysql.sock
      chown mysql:mysql mysql.sock

      然后:
      service mysqld start

      瞧!

      【讨论】:

        【解决方案5】:

        如果您的数据库没有任何数据,或者您有另一个数据库来恢复该数据,您可以尝试以下操作。您需要知道 Ubuntu 服务器的 root 密码,而不是 mysql 的 root 密码。

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

        【讨论】:

        • 但是,我认为这是只使用安全的 mysql 服务器。不是吗?这对这个问题没有影响。
        • 如果您忘记了root密码,这将无济于事,因为您必须先输入当前密码。
        【解决方案6】:

        查看此错误:https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1435823

        那里似乎有一个临时修复

        Create a newfile /etc/tmpfiles.d/mysql.conf:
        
        # systemd tmpfile settings for mysql
        # See tmpfiles.d(5) for details
        
        d /var/run/mysqld 0755 mysql mysql -
        
        After reboot, mysql should start normally.
        
        

        【讨论】:

          猜你喜欢
          • 2015-02-02
          • 2023-03-08
          • 2020-02-10
          • 2017-11-08
          • 2016-02-17
          • 1970-01-01
          • 2012-08-13
          相关资源
          最近更新 更多