繁体   English   中英

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

[英]MySQL server startup error 'The server quit without updating PID file'

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

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

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

应该是权限问题

  1. 检查是否有任何 mysql 实例正在运行

    ps -ef | mysql

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

    杀死 -9 PID

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

  2. 检查/usr/local/var/mysql/所有权

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

    如果它是root所有者,你应该改变它mysqlyour_user

    须藤 chown -R mysql /usr/local/var/mysql/

您是否按照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 文档:

对于 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

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

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

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

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

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

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

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

这对我有用...

检查所有正在运行的 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

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

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

它对我有用。

在不正确关闭后尝试启动 msql 时可能会发生此错误。

  1. 查看mysql错误日志文件。 如果它提到诸如“检查您是否已经有另一个使用相同数据或日志文件的 mysqld 进程”之类的内容。 ,那么您需要正确关闭该进程。

  2. 查看mysql正在运行的进程,使用这个命令: lsof -i:3306

您的输出应如下所示:

COMMAND  PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mysqld  4249 username   17u  IPv4 0x7843d9d130469c0b      0t0  TCP localhost:mysql (LISTEN)
  1. 终止运行mysql的进程: kill -15 4249

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

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

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

⚠️这会清除您的数据,请确保先对其进行备份。

如果没有人的答案帮助您,只需删除文件夹/usr/local/var/mysql然后再次安装 mysql brew reinstall mysql

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

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

修复方法是删除 err 日志文件(由_mysql拥有)。 重新开始就通过了。

对我来说,修复很简单:

top

表明mysqld已经在运行

sudo killall mysqld 

然后允许进程开始

对我来说,我不得不重新安装 mysql

brew reinstall mysql

然后在下面启动 mysql 现在并在登录时重新启动:

brew services start mysql

对我有用的解决方案在这里: https : //serverfault.com/questions/334284/cant-create-pid-file-on-mysql-server-permission-denied

更改我的一些权限似乎可以解决问题。 我正在使用 OS X 10.8.2 运行 2012 年中的 Macbook Air,并且 mysql 安装了自制软件。

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

我在用,

我使用自制软件('brew install mysql')安装了 MySQL。 它安装了几个依赖项,然后安装了 mysql。

当我试图启动它时,

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

我运行了这个命令,

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

和 MySQL 工作。

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

我在尝试在 MacOS X 10.7.5 上进行 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

对我来说,解决方案是覆盖/更正 /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 文件——它在“数据”目录中! 所以scripts/mysql_install_db 在/usr/local/mysql/var 中建立了阵营,但应用程序的其余部分似乎想要在/usr/local/mysql/data 中完成它的工作!

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

datadir = /usr/local/mysql/var

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

这对我有用:

在带有 Homebrew 的 Mac 上:

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

$ brew services

通过运行删除每个实例

$ brew uninstall <instance_name>

删除/usr/local/var/mysql中的Mysql目录:

$ rm -rf /usr/local/var/mysql

使用自制软件重新安装 mysql:

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

重新运行 mysql.server start

$ mysql.server start

如果你的系统有多个版本的 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 服务器
sudo ./mysql.server start (输入您的笔记本电脑密码)如果它给出以下输出... PID 问题已解决

@xxxx-M-R0SU support-files $ sudo ./mysql.server start Starting MySQL .. SUCCESS!

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

ps auxf | mysql

如果您得到任何 MySQL 进程,请使用 kill -9 PID 杀死该进程 ID,然后尝试启动 MySQL。

以安全模式启动Mysql

/usr/local/mysql/bin/mysqld_safe start

在 MAC 上 结束活动监视器应用程序中的任何mysqlmysqld任务(或其他)。

或检查你的错误

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

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

首先我跑

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

采取所有这些步骤后,我的数据库立即开始工作......

希望这可以帮助这里的其他人......关键是阅读错误并记录并找出错误所在......

不知何故,我搞砸了我对 El Capitan 的权限,并决定从头开始重新安装 MySQL。

我在 el capan 上使用 brew,并决定重新安装:

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

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

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

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

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

好吧,我假设 OP 在这一点上已经修复了它……但希望这能指出其他人看到这个错误的方向是正确的。

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

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

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

简单....

修复 2002 MySQL Socket 错误

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

须藤 mkdir /var/mysql

须藤 ln -s /tmp/mysql.sock /var/mysql/mysql.sock

干得好:)

这对我有很大帮助! 我从http://coolestguidesontheplanet.com/上的人那里拿到了这份指南

尝试这个..

  1. 导航到问题的父目录cd YOURPATH/usr/local/mysql
  2. rm -rf *.local.err (删除文件)
  3. touch YOURUSERNAME.local.pid (生成新的* .local.pid文件,该错误是抱怨的)
  4. cd返回您的项目并使用mysql.server start重新启动mysql

我希望这对你有用。

检查错误日志后,我发现了这一点:

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 安装版本。

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

问题是权限问题,它无法启动,因为它无法写入 mac.err,因为它归其他人所有。

确保 /usr/local/var/mysql 文件夹归将启动 mysql 的用户所有。 如果我以 jack 身份启动 mysql,那一切都很好。 但是,如果您以 root 身份启动它,它将创建一个 jack 无法写入的 mac.err(由 root 拥有)文件,因此当您尝试以 jack 身份重新启动它时,它将失败。

  1. 确保文件夹和文件归运行 mysql.server start 的用户所有
  2. 确保其他人尚未拥有 mac.err 或 mac.pid。
  3. 开始是作为正确的用户。

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

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

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

现在重启mysql服务器

就我而言,我在vps cPanel上遇到了这个问题。

我尝试了以上大多数答案,但未成功。

  1. 检查您的错误日志在哪里。 将在错误行的末尾提及。

错误! 服务器退出而不更新PID文件(/var/lib/mysql/111318.vps-11.com.pid)。

  1. 打开该文件(/var/lib/mysql/111318.vps-11.com.err),然后在底部检查最新行。 就我而言,

[错误]致命错误:无法打开和锁定特权表:表'./mysql/db'被标记为已崩溃,应修复

  1. 如何解决此问题:通过命令恢复并修复表索引:

[〜]#myisamchk -r /var/lib/mysql/mysql/db.MYI

https://forums.cpanel.net/threads/mysql-is-not-running.407142/

  1. (重新)启动你的mysql

我试图重新安装 MySQL,但实际上我忘了从旧安装中停止服务器。 为了解决这个问题, ps -ax | grep mysql ps -ax | grep mysqlkill [whatever PIDs] 但是,话又说回来,这对每个人来说都是不同的。 就像其他答案所说的那样,转到/usr/local/var/mysql/并检查您的 .err 日志文件。

就我而言,当我尝试启动 MySQL 时,我收到了同样的错误: The server quit without updating PID file 这是我为修复它所做的(使用终端):

goto /usr/local/var/mysql
sudo rm -rf hostname.err # Delete .err file
cd /usr/local/mysql/support-files
sudo mysql.server start # Success!

删除pid文件,然后再次启动mysqld。

删除您在错误显示的目录中找到的 *.err 文件,并创建 mysql 抱怨的文件,重新启动 mysql。

我在重新启动并删除所有 *err 文件后遇到了这个问题。

在我看来,/usr/local/etc 中缺少 my.cnf.d 目录。

它创造了它

mkdir /usr/local/etc/my.cnf.d

只需将位于 /usr/local/etc 中的 my.cnf 和 my.cnf.default 复制粘贴到该目录中。

然后Mysql能够重新启动:

cd /usr/local/var/mysql 
mysql.server start

和 MYSQL 工作。

当您没有安装libaio.1库时,通常会出现此问题。 首先安装该软件包并重做 mysql_install_db 步骤。

可能与旧的 MySQL 进程有关。 您需要杀死它并重新启动。 有时可能是由于 MySQL 配置文件中的冲突。 尝试移动它并重新启动 MySQL。 检查以下网址以获取更多详细信息。

http://linuxadministrator.pro/blog/?p=225

谢谢。

/etc/selinux/config禁用 selinux

SELINUX=disabled并重新启动服务器

我在交换服务器 IP 后遇到了这个问题。 在此之前,数据库运行良好。 /etc/my.cnf 中有一个条目需要更新:

绑定地址 = xxx.xxx.xxx.xx

它有旧的IP地址。

我有同样的问题。 原因很简单。 我安装了2个mysql服务器。 一个来自 Mac Port,另一个来自下载的包。 所以我只是按照这里的说明从包中卸载了那个。 如何从 Mac OS X 卸载 MySQL? 之后,mysql运行良好。

这是 5.5 版本的问题

这是 my.cnf 的 [mysqld] 部分的示例:

 skip-character-set-client-handshake
 collation_server=utf8_unicode_ci
 character_set_server=utf8

参考: http : //dev.mysql.com/doc/refman/5.6/en/charset-server.html

我尝试删除所有 *.err 但仍然遇到相同的错误。 我在错误日志中得到了一个错误。

[错误] InnoDB:试图打开以前打开的表空间。 以前的表空间 erp/brand 在文件路径:./erp/brand.ibd 使用空间 ID:7。 无法在文件路径:./webdb1/system_user.ibd 处打开使用空间 ID:7 的表空间 webdb1/system_user

所以我删除了所有 ib* 文件并且它可以工作。

rm -f *.err ib*

在小牛队,这个脚本帮助了我:

bash <(curl -Ls http://git.io/eUx7rg)

然后我根据https://stackoverflow.com/a/25883967/221781重置密码

就我而言,问题是 mysql 数据目录被意外移动到错误的目录(/var/log,而不是/var/lib)。 将数据移回 /var/lib/mysql 并重新启动服务器后,一切又恢复正常。

在我的自制 mysql 安装中,我只需将位于 /usr/local/var/mysql/ 中的 ib_logfile0 和 ib_logfile1 移动到不同的目录。

然后我只是做了 mysql.server start 并且一切正常。

我通过运行解决了这个问题

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

这里 myUserName 是我当前的登录用户名

我必须在安全模式下检查我的错误文件才能找到根本原因:

  1. rm -f /usr/local/var/mysql/*.err
  2. mysqld_safe start
  3. cat mysql/*.err

这揭示了升级例程中的错误。 我试图修复它,但在网上找不到足够的信息。 之后我放弃并手动导出数据库:

  1. mysql.server start --upgrade=MINIMAL这样服务器就会启动
  2. mysqldump不会工作,因为它会尝试运行完整升级,但您可以使用 Sequel Pro、phpMyAdmin 等来导出。
  3. 停止服务器,将mysql文件夹重命名为mysql.broken ,然后进行全新安装以获得一个新的mysql文件夹。
  4. 启动mysql,手动导入之前导出的.sql文件。

我的回答不专业,看不懂。 我使用了CentOSMysql 的通用版本......当我以root用户启动 mysql 时,我的问题使用--user=root解决了:

user@host# /path/to/mysql/support-files/mysql.server start --user=root

如果您使用systemctl start mysql.service ,您需要更改/etc/systemd/system/mysql.service mysql.service文件:

.
.
.
ExecStart=/path/tp/mysql/support-files/mysql.server start --user=root
ExecStop=/path/to/mysql/support-files/mysql.server stop --user=root
.
.
.

尝试使用 sudo rm -rf /usr/local/var/mysql/HOSTNAME.err (HOSTNAME 是我的主机名)

如果您正在运行 MySQL Galera 集群,例如 Percona XtraDB Cluster,请检查数据目录中的wsrep_recovery.*文件(例如: /var/lib/mysql )。

在尝试启动被主机的 OOM 杀手杀死的节点时,我从 systemctl 收到了相同的消息,但在任何正常日志中都没有说明启动失败的原因。 wsrep 恢复文件有答案,就我而言,我需要使用以下标志启动 mysql:

mysqld --tc-heuristic-recover=ROLLBACK
$ open /usr/local/var/mysql

您只需删除finder中的文件夹,然后

$ brew install mysql

重新安装。

我已经从这个解决方案中解决了。

但此解决方案将删除您的数据库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM