【问题标题】:centos: Another MySQL daemon already running with the same unix socketcentos: 另一个 MySQL 守护进程已经使用相同的 unix 套接字运行
【发布时间】:2013-12-22 19:46:37
【问题描述】:

启动mysqld服务时出现奇怪的错误:

Another MySQL daemon already running with the same unix socket.

我尝试列出正在运行的服务并停止它们,但在启动 mysqld 服务时发生了同样的错误。

我可以尝试删除 mysqld 并重新安装,但这也会删除数据库吗?

【问题讨论】:

    标签: mysql sockets unix centos6


    【解决方案1】:

    为防止问题发生,您必须从命令行正常关闭服务器,而不是关闭服务器。

    # 立即关闭 -h

    这将在关闭机器之前停止正在运行的服务。

    基于 Centos,当你遇到这个问题时,另一种方法是移动 mysql.sock:

    # mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak
    
    # service mysqld start
    

    重新启动服务会创建一个名为 mqsql.sock 的新条目

    【讨论】:

    • 上面的第二个建议对我有用。一定是因为我没有优雅地关闭服务器。做# reboot 并没有解决问题。从未尝试过shutdown -h now
    • "shutdown -h now" 和 boot 并没有为我解决这个问题,但是 "CentOS" 选项就像一个魅力。
    • 执行# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak 然后# shutdown -h now 应该会正常。
    • 移动 sock 文件也对我有用。我最大的问题是是如何发生的。我以前从未见过这个问题。
    • 有谁知道这个问题是怎么发生的?
    【解决方案2】:

    TL;DR:

    以 root 身份运行,一切就绪:

    rm $(grep socket /etc/my.cnf | cut -d= -f2)  && service mysqld start
    

    加长版:

    您可以通过在/etc/my.conf 中手动查找 MySQL 的套接字文件的位置,或者直接使用

    grep socket /etc/my.cnf | cut -d= -f2
    

    很可能是/var/lib/mysql/mysql.sock。然后(当然,以 root 身份,或以 sudo 为前缀)删除该文件:

    rm /var/lib/mysql/mysql.sock
    

    然后启动 MySQL 守护进程:

    service mysqld start
    

    删除mysqld 根本不会解决问题。问题是 CentOS & RedHat 在崩溃后不会清理sock 文件,所以你必须自己做。 (当然)也建议​​避免关闭系统电源,但有时您无法避免,因此此过程将解决问题。

    【讨论】:

    • cut -d= -f2 位可能出现错误,因为您希望在 = 符号之后出现一个值,但 = 传递给的值-d 选项:换句话说,= 用作cut 的分隔符。
    • 如果您使用的是 Ubuntu,请尝试将 /etc/my.cnf 替换为 /etc/mysql/my.cnf
    • 我建议使用比包含单词 socket 的任何行更具体的内容,至少 grep '^socket[[:space:]]=' /etc/my.cnf,否则您最终可能会删除您不想要的内容。
    【解决方案3】:

    我已经找到解决这个问题的任何人的方法 将套接字目录更改为 my.cnf 文件中的新位置

    socket=/var/lib/mysql/mysql2.sock
    

    service mysqld start

    或 GeckoSEO 回答的快速方式

    # mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak
    
    # service mysqld start
    

    【讨论】:

    • 我刚刚删除了mysql.sock文件,然后重启了服务。
    【解决方案4】:

    我对此的解决方案是硬关机后遗留在 /var/lib/mysql/ 目录中的 mysql.sock。 mysql在不运行的时候还以为已经在运行了。

    【讨论】:

    • 是的,你是对的,我关闭了系统然后出现了这个问题,所以你有一个解决方案,当我启动服务器时不显示这个错误
    【解决方案5】:

    只需向您的操作系统供应商打开一份错误报告,要求他们将套接字放在 /var/run 中,以便在重新启动时自动将其删除。在不干净的重新启动后保留此套接字是一个错误,/var/run 是这类文件的位置。

    【讨论】:

      【解决方案6】:

      为了自动清理 .sock 文件,将这些行放在文件 /etc/init.d/mysqld 紧跟在“start)”代码块之后

      test -e /var/lib/mysql/mysql.sock
      SOCKEXIST=$?
      
      ps cax | grep mysqld_safe
      NOPIDMYSQL=$?
      
      echo NOPIDMYSQL $NOPIDMYSQL
      echo SOCKEXIST $SOCKEXIST
      
      if [ $NOPIDMYSQL -eq 1 ] && [ $SOCKEXIST -eq 0 ] ; then
          echo "NOT CLEAN"
          rm -f /var/lib/mysql/mysql.sock
          echo "FILE SOCK REMOVED"
      else
          echo "CLEAN"
      fi
      

      它对我有用。我不得不这样做,因为我没有 UPS,而且我们经常遇到电源故障。

      问候。

      【讨论】:

      • 以上是我们要走的路,因为它发生在我们无法控制的情况下,停电和 UPS 会在一段时间后死机。所以服务器必须恢复。我在 mysql 5.7 (centos 6) 安装上遇到了这个问题,但在 5.1 (centos 5) 上没有。我没有时间调查第一个问题出了什么问题,所以我将改进这个答案并使用它。测试 -e $socketfile if [ $? -当量0];那么
      • 看起来我花了 5 多分钟来准备 pastebin:这里是 pastebin.com/DpiSGrmh
      【解决方案7】:

      在操作系统重启期间 MySQL 服务未正确关闭有时可能会出现。 /var/lib/mysql/mysql.sock 已被留下。这可以防止“mysqld”启动。

      这些步骤可能会有所帮助:

      1:服务mysqld启动 killall -9 mysqld_safe mysqld 服务 mysqld 启动

      2: rm /var/lib/mysql/mysql.sock 服务 mysqld 启动

      【讨论】:

        【解决方案8】:

        要启动 MySQL 服务,你可以删除 '/var/lib/mysql/mysql.sock' 并重新启动 MySQL 服务:

        删除套接字文件:

        [root@server ~]# rm /var/lib/mysql/mysql.sock
        rm: remove socket `/var/lib/mysql/mysql.sock'? yes
        

        启动 MySQL 服务:

        [root@server~]# service mysqld start
        Starting mysqld:                                           [  OK  ]
        

        它将帮助您解决问题。

        【讨论】:

          【解决方案9】:

          这是由于mysql服务异常终止而发生的。删除或备份/var/lib/mysql/mysql.sock 文件并重启mysql。

          如果有任何问题请告诉我..

          【讨论】:

            【解决方案10】:

            我刚刚解决了这个问题,但没有任何建议能解决我的问题。虽然我无法在启动时启动 MySQL,并且在日志中发现了相同的消息(“另一个 MySQL 守护程序已经在使用相同的 unix 套接字运行”),但我在到达控制台后就能够启动该服务。

            在我的配置文件中,我找到了以下行:bind-address=xx.x.x.x。我随机决定将其注释掉,启动时的错误消失了。因为绑定地址提供了安全性,在某种程度上,我决定进一步探索它。我使用的是机器的 IP 地址,而不是 IPv4 环回地址 - 127.0.0.1

            简而言之,通过使用127.0.0.1 作为bind-address,我能够修复此错误。我希望这对那些遇到此问题但无法使用上述详细答案解决的人有所帮助。

            【讨论】:

              猜你喜欢
              • 2013-06-06
              • 1970-01-01
              • 2012-10-25
              • 2020-07-23
              • 2014-07-03
              • 2023-03-02
              • 2013-12-17
              • 1970-01-01
              • 2019-04-07
              相关资源
              最近更新 更多