MySQL服务器启动错误'服务器退出而不更新PID文件'

Posted

技术标签:

【中文标题】MySQL服务器启动错误\'服务器退出而不更新PID文件\'【英文标题】:MySQL server startup error 'The server quit without updating PID file'MySQL服务器启动错误'服务器退出而不更新PID文件' 【发布时间】:2011-06-25 04:36:20 【问题描述】:

在Mac OS X v10.6 (Snow Leopard) 上,启动 mysql 会出现以下错误:

服务器退出但不更新 PID 文件

文件 my.cnf

[mysqld]
port            = 3306

socket          = /tmp/mysql.sock

skip-external-locking

key_buffer_size = 16K

pid-file=/var/run/mysqld/mysqld.pid

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

【问题讨论】:

以管理员用户身份运行。用 sudo /usr/local/mysql/support-files/mysql.server 开始 同样的问题。用 brew 安装 mysql 这里有同样的问题。也与 brew 一起安装。 我的mac上也遇到了这种情况,刚刚删除了错误日志,如'/usr/local/var/mysql/*.err',启动成功。 我在 mac 上也遇到了同样的错误。但我解决了。如果您是通过 .dmg 文件安装的,请转到系统偏好设置,然后单击 mysql 图标,然后单击启动 mysql 按钮。 【参考方案1】:

尝试查找后缀为“.err”的日志文件。应该有更多的信息。它可能在:

/usr/local/var/mysql/your_computer_name.local.err

可能是权限问题

    检查是否有任何 MySQL 实例正在运行

    ps -ef | grep mysql
    

    如果是,你应该停止它,或者终止进程:

    kill -9 PID
    

    其中PID 是上一个命令输出中用户名旁边显示的数字

    检查/usr/local/var/mysql/的所有权

    ls -laF /usr/local/var/mysql/
    

    如果它是root的所有者,您应该将其更改为mysqlyour_user

    sudo chown -R mysql /usr/local/var/mysql/
    

【讨论】:

我不得不 chown 到 mysql 用户而不是我的用户。 为我工作。我检查了错误文件并说这是因为文件权限。执行 chown 命令并工作。谢谢!! sudo chown -R my_user /usr/local/var/mysql/ 至少为我工作 根据我自己的经验 - 请注意,在您完成 sudo chown 之后,您当前没有一些 mysql 进程在另一个用户或 root 下运行。 ps -ef | grep mysql 将验证您没有在运行 - 否则您将无法启动它。 总救生员。我唯一的观察是 mysql 文件夹的文件路径可能会有所不同。【参考方案2】:

按照brew install mysql 的说明进行操作。

设置数据库以作为您的用户帐户运行

对于 MySQL 5.x:

unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

要在另一个文件夹中设置基表,或使用其他用户运行 mysqld,请查看mysqld_install_db 的帮助:

mysql_install_db --help

并查看 MySQL 文档:

4.4.3 mysql_install_db — Initialize MySQL Data Directory 2.10.4 Securing the Initial MySQL Accounts

对于 MySQL 8.x:

unset TMPDIR
mysqld --initialize-insecure --log-error-verbosity --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

确保上面的数据目录/usr/local/var/mysql 是空的。如有必要,请备份。

例如,要以用户“mysql”运行,您可能需要sudo

sudo mysql_install_db ...options...

手动启动mysqld:

mysql.server start

注意:如果失败,您可能忘记运行上面的前两个步骤

【讨论】:

如果即使按照输出中的步骤操作后仍重复出现相同的错误,请从与 *.pid 文件相同的目录中删除 *.err 文件。 mahdiyusuf.com/post/21022913180/… 我尝试按照这些说明操作一百万次,但从未成功。我试图通过不清理 brew doctor 警告我的所有事情来“作弊”,因为我认为它们没有任何区别。最后,清理并遵循 brew doctor 的建议使得运行上述设置成为可能。所以给路过的其他人留个言;不要试图欺骗 brew doctor 并认为你知道得更多! 当我酿造医生并向我自己的用户添加写权限时,我仍然有很多问题。 sudo chown -R your_user /usr/local/var/mysql/ 就像@Tombart 的回答:) mysqld_install_db 命令给了我错误mysql_install_db: [ERROR] unknown variable 'tmpdir=/tmp' mysql_install_db 在 mysql 8.0 中被删除【参考方案3】:

我在我的 Mac 机器上遇到了同样的问题(正确地遵循了 brew install 建议的所有安装步骤)。

删除错误文件为我修复了它:

sudo rm -rf /usr/local/var/mysql/dev.work.errdev.work 是我的主机名)

这很有效,因为 dev.work.err_mysql:wheel 所有,而不是我自己的用户名。 CHOWN 错误文件也可能会修复它。

【讨论】:

这也解决了我的问题,重启 mysql 后无法再工作,给了我同样的问题,但是删除了 _mysql:admin 拥有的错误日志解决了这个问题 这似乎是最有帮助的,让我意识到我不应该使用 SUDO 启动此服务,而是在我自己的用户帐户下运行它。 这对于那些使用 Homebrew 安装 MySQL 的人来说是一个很好的答案 经过数周尝试不同的事情后,当我删除错误文件时,一切都开始工作了。谢谢 我不必删除它,只需将其 chown 回我的帐户,因为某处 _mysql 帐户接管了它。【参考方案4】:

重启后我遇到了同样的问题。这是我修复它的方法:

sudo chown -R _mysql /usr/local/var/mysql

【讨论】:

非常感谢 - 不过不要忘记备份内容,以防万一您弄乱了权限 谢谢。我在 Ubuntu 中遇到了 Lampp 的问题。我将整个 lampp 文件夹从 /opt 复制到新服务器。当我尝试启动 mysql 时,我收到一条消息:服务器退出而不更新 PID 文件。去 lampp/var/ 并执行 chown -R mysql mysql/ 这对我有用! 谢谢,你是我的英雄;) 非常感谢伙计!拯救了这一天! 在 El Capitan 上有效:sudo chown -R _mysql /usr/local/mysql/data【参考方案5】:

这对我有用...

检查所有正在运行的 MySQL 进程:

$ ps aux | grep mysql

USER     PID    %CPU  %MEM 
_mysql   5970   0.0   0.4 ...

然后使用以下命令杀死上述命令中列出的所有进程:

$ sudo kill -9 [PID]

用上面列表中的单个 PID 替换 [PID],例如5970.

对您在第一个命令中看到的所有行执行此操作。

然后你可以再次启动你的 MySQL 服务器:

mysql.server start

【讨论】:

或使用pkill mysql杀死所有匹配“mysql”的进程(-9在大多数情况下是不必要的)。 杀死指定ID的所有进程并重新启动【参考方案6】:

尝试删除 ib_logfile0ib_logfile1 文件,然后再次运行 MySQL:

rm /usr/local/var/mysql/ib_logfile0
rm /usr/local/var/mysql/ib_logfile1

它对我有用。

【讨论】:

我还删除了同一目录中的 .err 文件,这对我有用。 好吧。这很简单,真的对我有用。但是,就我而言,我只将其重命名为 ib_log*.bak 它对我有用,尝试了所有其他解决方案,没有任何效果,它在删除 ib_logfile* 文件后有效。 很好的解决方案,其他答案帮不了我 天啊!这也对我有用!这将是我第三次失去所有数据库!非常感谢!【参考方案7】:

在 MySQL 被错误关闭后尝试启动它时可能会出现此错误。

    查看 MySQL 错误日志文件。如果它提到类似“检查您没有使用相同数据或日志文件的另一个 mysqld 进程。”,那么您需要正确关闭该进程。

    查看 MySQL 正在哪个进程上运行。使用命令lsof -i:3306(默认port number for MySQL is 3306)。

    您的输出应如下所示:

    COMMAND   PID      USER  FD   TYPE  DEVICE             SIZE/OFF NODE NAME
    mysqld   4249  username  17u  IPv4  0x7843d9d130469c0b      0t0 TCP  localhost:mysql (LISTEN)
    

    终止运行mysql的进程:kill -15 4249

    Kill -15 向进程发送信号以释放它锁定的所有资源并在之后终止进程。

    现在 MySQL 应该可以正常启动了:mysql.server start

【讨论】:

这对我在 High Sierra 仍然有效,不管它值多少钱。 lsof 命令可能需要 sudo:sudo lsof -i:3306。否则,输出可能为空。【参考方案8】:

⚠️ 这将删除您的数据,因此请确保先备份。

如果没有人回答你,只需删除文件夹 /usr/local/var/mysql,然后使用 brew reinstall mysql 再次安装 MySQL。

【讨论】:

警告这意味着清除所有数据库。 我之前安装了更高版本的mysql,比我安装mysql5.7 出现了这个问题。只需删除 /usr/local/var/mysql 并 brew reinstall mysql@.57 解决它。 先将/usr/local/var/mysql下的dbs移动到另一个文件夹。安装成功并启动mysql服务后,尝试将需要的db移回来。【参考方案9】:

我的错误文件还告诉我,该端口可能正在被另一个进程使用,但只需运行 sudo mysql.server start 即可解决我的问题。

【讨论】:

是的...这对我也有用...上面没有任何效果 我按照说明在某处读到了在 Mac 上启动 MySQL 的方法是“sudo /usr/local/mysql/support-files/mysql.server start”。这产生了错误“服务器退出而不更新 pid 文件”,这就是我进入此页面的方式。在尝试了许多答案后,我找到了“sudo mysql.server start”,它起作用了。谢谢。【参考方案10】:

我最近遇到了这个问题,但是它之前工作过,然后停止了。

这是因为我最初以 root 而不是我自己的身份启动 mysql.server

修复方法是删除错误日志文件(由_mysql 拥有)。再次启动它就通过了。

【讨论】:

谢谢!我在搜索一个小时后遇到了同样的问题,然后发现了您的答案。【参考方案11】:

对我来说,修复很简单。

top

表明mysqld已经在运行了。

sudo killall mysqld 

然后允许进程启动。

【讨论】:

这个答案仍然有帮助。【参考方案12】:

对我来说,我不得不重新安装 MySQL:

brew reinstall mysql

然后下面已经启动了现在启动 MySQL 并在登录时重新启动:

brew services start mysql

【讨论】:

【参考方案13】:

对我有用的解决方案在这里:Can't create PID file on MySQL server, permission denied

更改我的一些权限似乎可以解决问题。我正在使用Mac OS X v10.8.2(Mountain Lion)运行 2012 年中期的 MacBook Air,并且使用Homebrew 安装了 MySQL。

chmod 0755 /var
chown root:wheel /var/tmp
sudo chmod 0771 /usr/local/var/mysql/*

【讨论】:

【参考方案14】:

我正在使用

带有OS X v10.7.3.x (Lion) 的全新 MacBook Pro GCC 通过OS X GCC installer

我使用Homebrew('brew install mysql')安装了 MySQL。它安装了几个依赖项,然后是 MySQL。

当我尝试启动它时,

mysql.server start

Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/west.local.pid).

我运行了这个命令,

/usr/local/Cellar/mysql/5.5.25/scripts/mysql_install_db

MySQL 可以工作。

请注意,您需要从 MySQL 目录的顶层运行 mysql_install_db(例如,usr/local/Cellar/mysql/5.5.25)。直接在 /scripts 目录中运行它并没有为它提供足够的上下文来运行它。

【讨论】:

使用 5.5.28 为我工作并在 OSX 10.7.5 上进行 brew【参考方案15】:

我在Mac OS X v10.7.5 (Lion) 上尝试 brew upgrade 时遇到了这个问题。

不幸的是,MySQL 也从 5.5.14 升级到了 5.6.10。我试了新版本,还是不行。

我决定回到原来的设置并做了一个

brew switch mysql 5.5.14

这并没有解决问题。我在其他地方阅读并做到了这一点,瞧!一切都回来了:)

cd /usr/local/var/mysql
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak

【讨论】:

第一次使用brew upgrade mysql 然后brew switch mysql 5.7.17 这是我以前的版本后,这对我有用。奇怪!【参考方案16】:

对我来说,解决方案是覆盖/更正 /etc/my/cnf 中的数据目录。

我按照自述文件中提供的说明从源代码构建了 MySQL 5.5.27:


# Preconfiguration setup
shell> groupadd mysql
shell> useradd -r -g mysql mysql
# Beginning of source-build specific instructions
shell> tar zxvf mysql-VERSION.tar.gz
shell> cd mysql-VERSION
shell> cmake .
shell> make
shell> make install
# End of source-build specific instructions

# Postinstallation setup
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data

# Next command is optional
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> bin/mysqld_safe --user=mysql &

# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

mysqld_safe 没有解释就自行终止了。运行/etc/init.d/mysql.server start 导致错误:

"服务器退出但不更新 PID 文件"

我注意到安装说明中有一些奇怪的地方。它已将目录“data”的所有权更改为 mysql,但未更改为“var”;这是不寻常的,因为多年来我不得不确保 var 目录是 mysql 可写的。所以我手动运行chown -R mysql /usr/local/mysql/var,然后尝试再次启动它。仍然没有运气。但更糟糕的是,var 目录中没有 .err 文件——它位于“data”目录中!所以 scripts/mysql_install_db 在 /usr/local/mysql/var 中建立了营地,但应用程序的其余部分似乎想在 /usr/local/mysql/data 中完成它的工作!

所以我刚刚编辑了 /etc/my.cnf 并在 [mysqld] 部分下添加了一个指令来明确地将 mysql 的数据目录指向 var(我通常期望它是任何方式),然后,mysqld启动就好了。添加的指令如下所示:

datadir = /usr/local/mysql/var

为我工作。希望对你有帮助。

【讨论】:

【参考方案17】:

如果您的系统有多个版本的 MySQL,那么您很可能会遇到此 PID 错误:

我们可以从杀死所有 MySQL 进程开始:

sudo killall mysqld

转到/usr/local 并选择您想要的 MySQL 版本,然后提供 MySQL 权限。就我而言,我需要版本 8。

sudo chown -R mysql mysql-8.0.21-macos10.15-x86_64

进入文件夹/usr/local/mysql-8.0.21-macos10.15-x86_64并启动SQL server:

sudo ./mysql.server start(输入您的笔记本电脑密码)

如果它给出以下输出... PID 问题解决了

sudo ./mysql.server start

Starting MySQL
.. SUCCESS!

【讨论】:

【参考方案18】:

这对我有用:

在带有Homebrew 的 Mac 上:

通过运行列出所有存在的MySQL实例

brew services

通过运行删除每个实例

brew uninstall <instance_name>

删除/usr/local/var/mysql中的MySQL目录

rm -rf /usr/local/var/mysql

使用 Homebrew 重新安装 MySQL:

brew install mysql
brew install mysql@<version> #Optional

重新运行mysql.server start

mysql.server start

【讨论】:

请注意,这种方法很难重新安装。这种方式将清除所有旧数据库。【参考方案19】:

似乎 MySQL 进程正在运行,因此您无法使用该端口。您可以使用以下命令检查正在运行的 MySQL 进程:

ps auxf | grep mysql

如果您有任何 MySQL 进程,请使用 kill -9 PID 终止该进程 ID,然后尝试启动 MySQL。

【讨论】:

这个答案是我的救星。【参考方案20】:

以安全模式启动 MySQL:

/usr/local/mysql/bin/mysqld_safe start

或者在 Mac 上,结束 Activity Monitor 应用程序中的任何 mysqlmysqld 任务(或其他)。

或者检查你的错误

tail -f /usr/local/mysql/data/XXXXX-XXXXX-Pro.local.err

【讨论】:

【参考方案21】:

借助此处发布的一些答案,我能够找到问题

首先我跑

sudo -i

所以我可以拥有 root 访问权限。

然后我删除了xxxx.err文件:

rm -rf /usr/local/mysql/data/xxxx.err

在我以安全模式启动 MySQL 后,

/usr/local/mysql/bin/mysqld_safe start

它将尝试启动并因错误而退出...将创建一个新的xxx.err文件,您需要阅读它以查看错误原因:

tail -f /usr/local/mysql/data/mysqld.local.err

在我的情况下,由于某种原因,它在/var/log/ 文件夹中缺少一些文件夹和文件......所以我创建了两个:

cd /var/log

mkdir mysql

touch mysql-bin.index

新建文件后,需要修改权限:

chown -R _mysql /var/log/mysql

当所有这些步骤都完成后,我的数据库立即开始工作......

关键是阅读错误并记录并找出问题所在......

【讨论】:

【参考方案22】:

不知何故,我搞砸了我对 Mac OS X v10.11 (El Capitan) 的权限,并决定从头开始重新安装 MySQL。

我在 El Capitan 上使用 Homebrew 并决定重新安装:

brew uninstall mysql
sudo rm -rf /usr/local/var/mysql
brew install mysql
mysql.server start # ... SUCCESS

全新安装的文件权限从 _mysql 更改为包含我的用户名:

ls -alh /usr/local/var/mysql
drwxr-xr-x   22 lfender  admin   748B Mar 22 09:58 .
# ... etc.

【讨论】:

警告:这将清除您的数据库,请确保它们已备份【参考方案23】:

在我的情况下,错误是由于错误日志文件的访问问题而发生的。

以下两个命令可以帮助我解决问题。

sudo chown <user> /usr/local/var/mysql/<my-host-name>.err
sudo chmod 666 /usr/local/var/mysql/<my-host-name>.err

【讨论】:

【参考方案24】:

错误日志在说什么?我收到了这个错误,它最终成为 my.cnf 文件中的旧无效设置,MySQL 错误日志指出了这一点。如果不是错误的配置设置,错误日志至少应该为您指明正确的方向。

【讨论】:

【参考方案25】:

检查您的驱动器中是否还有剩余空间。当我的驱动器中没有剩余空间时,我遇到了这个问题。

【讨论】:

要不是你提到我永远不会想到空间问题。你是救世主!【参考方案26】:

我希望这对你有用。

查看错误日志后发现:

120309 17:42:49 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
120309 17:42:50 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/mysql/data/ is case insensitive
120309 17:42:50 [Warning] You need to use --log-bin to make --binlog-format work.
120309 17:42:50 [Note] Plugin 'FEDERATED' is disabled.
120309 17:42:50 InnoDB: The InnoDB memory heap is disabled
120309 17:42:50 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120309 17:42:50 InnoDB: Compressed tables use zlib 1.2.3
120309 17:42:50 InnoDB: Initializing buffer pool, size = 16.0M
120309 17:42:50 InnoDB: Completed initialization of buffer pool
120309 17:42:50  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name /usr/local/mysql/data/ib_logfile0
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
120309 17:42:50 mysqld_safe mysqld from pid file /usr/local/mysql/data/lu1s.local.pid ended

为了解决这个问题,我给了整个 mysql 文件夹的所有权:

cd /usr/local
sudo chown mysql mysql
sudo chown mysql mysql-5.5.21-osx10.6-x86_64
sudo chown _mysql mysql
sudo chown _mysql mysql-5.5.21-osx10.6-x86_64

然后(您也可以使用命令行),我将权限(一旦我将所有权授予 _mysqlmysql 用户)应用到所有包含的文件夹在 /usr/local/mysql-5.5.21-osx10.6-x86_64 文件夹的“获取信息”菜单中。您不需要将其设置为别名,因为它只是一个别名。

文件夹的名称取决于你的 MySQL 安装版本。

【讨论】:

【参考方案27】:

我遇到了同样的问题。移动我的 /etc/my.cnf 文件对我有用。我得到了here的信息。

【讨论】:

【参考方案28】:

我遇到了同样的问题。对我来说,它在运行之前安装的 mysqld 时正在执行 brew remove。 Homebrew (brew) 似乎在卸载之前不会停止服务。

在检查 .err 文件后,我看到记录的错误表明,在终止旧服务后,另一个 MySQL 副本可能正在运行。然后我能够重新启动新的 MySQL 安装。

【讨论】:

是的,检查错误日志。就我而言,我运行ls -latr /usr/local/var/mysql/ 查找最新修改的文​​件,其中包含错误日志,然后运行tail -50 name.err 查看错误,这是配置中的问题。 感谢上帝,你是对的。我用ps aux | grep mysqld,然后用kill -9 [proccessid]终止进程,服务器启动成功【参考方案29】:

简单...

修复 2002 MySQL 套接字错误。

修复迫在眉睫的 2002 套接字错误 - 链接 MySQL 放置套接字的位置和 OS X 认为应该放置的位置。 MySQL 将它放在 /tmp 中,而 OS X 在 /var/mysql 中查找它。套接字是一种允许 MySQL 客户端/服务器通信的文件。

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

干得好 :) 这对我有很大的帮助

我从http://coolestguidesontheplanet.com/ 上的人那里得到了这份指南

【讨论】:

【参考方案30】:

将名为“ib_logfile”的日志文件移动到“/var/lib/mysql”并重启mysql。有时mysql会因为更新日志文件遇到困难而失败

mv /var/lib/mysql/ib_logfile* /some/tmp/folder/

你也可以删除ib_logfile,因为它会在mysql重启后自动创建

现在重启mysql服务器

【讨论】:

以上是关于MySQL服务器启动错误'服务器退出而不更新PID文件'的主要内容,如果未能解决你的问题,请参考以下文章

启动 pid-file 的 MySQL.Manager 退出而不更新 fi 错误

错误!服务器退出而不更新 PID 文件 XAMPP

OS X El Capitan 上的 MySQL 5.7.9:错误服务器退出而不更新 PID 文件

错误!服务器退出但不更新 PID 文件

mysql.server 启动时出现 PID 错误?

mysql.server 启动时出现 PID 错误?