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
的所有者,您应该将其更改为mysql
或your_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.err
(dev.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_logfile0
和 ib_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 应用程序中的任何 mysql
或 mysqld
任务(或其他)。
或者检查你的错误
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
然后(您也可以使用命令行),我将权限(一旦我将所有权授予 _mysql 和 mysql 用户)应用到所有包含的文件夹在 /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 错误