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

时间:2011-02-10 21:51:15

标签: mysql

在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

53 个答案:

答案 0 :(得分:262)

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

  

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

这可能是权限问题

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

      

    ps -ef | grep mysql

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

      

    kill -9 PID

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

  2. 检查/usr/local/var/mysql/

    的所有权
      

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

    如果是root所有者,则应更改mysqlyour_user

      

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

答案 1 :(得分:192)

您是否按照brew install mysql的说明进行了操作?

设置数据库以使用以下方式作为您的用户帐户运行:

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”身份运行,您可能需要sudo

sudo mysql_install_db ...options...

使用以下命令手动启动mysqld:

mysql.server start

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

答案 2 :(得分:126)

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

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

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

这很有效,因为dev.work.err_mysql:wheel拥有,而不是我自己的用户名。 列出错误文件也可能已经修复了它。

答案 3 :(得分:83)

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

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

答案 4 :(得分:30)

这对我有用......

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

答案 5 :(得分:24)

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

  1. 看看mysql错误日志文件。如果它提到类似"请确认您还没有使用相同数据或日志文件的其他mysqld进程。" ,那么您需要正确关闭该进程。

  2. 查看运行mysql的进程,使用以下命令:lsof -i:3306

  3. 您的输出应如下所示:

    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
    2.   

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

      1. 现在mysql应该启动没有问题:mysql.server start

答案 6 :(得分:24)

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

答案 7 :(得分:15)

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

这是因为我最初以{strong> root 而不是我自己开始mysql.server

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

答案 8 :(得分:13)

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

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

它对我有用。

答案 9 :(得分:13)

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

答案 10 :(得分:9)

对我有用的解决方案是: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/*

答案 11 :(得分:8)

对我来说,修复很简单:

top

显示mysqld已经在运行

sudo killall mysqld 

然后允许该过程开始

答案 12 :(得分:8)

尝试在MacOS X 10.7.5上进行升级时出现此问题。

不幸的是,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

答案 13 :(得分:7)

对我来说,解决方案是覆盖/更正/ 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文件”

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

所以我刚刚编辑了/etc/my.cnf并在[mysqld]部分下面添加了一个指令来明确地将mysql的数据目录指向var(正如我通常所期望的那样),并且在这之后,mysqld启动就好了。要添加的指令如下所示:

datadir = / usr / local / mysql / var

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

答案 14 :(得分:7)

我正在使用,

我使用自制软件安装MySQL('brew install 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目录中运行它并没有为它提供足够的上下文来运行它。

答案 15 :(得分:6)

如果您的系统具有多个版本的Mysql,则您很可能会遇到此PID错误

我们可以从杀死所有MySQL进程开始
sudo killall mysqld

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

转到文件夹 /usr/local/mysql-8.0.21-macos10.15-x86_64 并启动SQL Server
sudo chown -R mysql mysql-8.0.21-macos10.15-x86_64(输入您的笔记本电脑密码) 如果给出以下输出...则解决了PID问题

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

答案 16 :(得分:6)

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

brew reinstall mysql

然后在下面 要启动,请立即启动mysql并在登录时重新启动:

brew services start mysql

答案 17 :(得分:5)

以安全模式启动Mysql

/usr/local/mysql/bin/mysqld_safe start

OR

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

或通过

检查错误
tail -f /usr/local/mysql/data/XXXXX-XXXXX-Pro.local.err

答案 18 :(得分:5)

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

ps auxf | grep mysql

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

答案 19 :(得分:4)

在这里发布的几个答案的帮助下,我找到了问题

首先我跑

sudo -i

所以我可以拥有root权限。

我删除了xxxx.err文件

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

我在SafeMode中启动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

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

希望这可以帮助其他人...关键是阅读错误并记录并发现什么是错误的...

答案 20 :(得分:4)

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

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

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

答案 21 :(得分:4)

这对我有用:

在装有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

答案 22 :(得分:3)

有同样的问题,对我来说,在安装mysqld之前正在进行brew删除。似乎brew在卸载之前不会停止服务。

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

答案 23 :(得分:3)

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

好吧,我认为OP已经修复了这一点......但希望这可以指出其他人在正确的方向上看到这个错误。

答案 24 :(得分:3)

我希望这对你有用。

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

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

答案 25 :(得分:3)

试试这个..

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

答案 26 :(得分:2)

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

答案 27 :(得分:2)

简单....

修复2002 MySQL Socket错误

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

sudo mkdir / var / mysql

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

做得好:))

这帮了我很多! 我从http://coolestguidesontheplanet.com/

上的人那里获取了这个指南

答案 28 :(得分:2)

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

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

  1. 确保文件夹和文件归运行mysql.server start
  2. 的用户所有
  3. 确保其他人不拥有mac.err或mac.pid。
  4. Start是正确的用户。

答案 29 :(得分:2)

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

我尝试了上述大部分答案,但没有成功。

  1. 检查错误日志的位置。它将在错误行的末尾提及。
  2.   

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

    1. 打开该文件(/var/lib/mysql/111318.vps-11.com.err)并在底部找到lates行。就我而言,有
    2.   

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

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

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

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

        1. (重新)启动你的mysql

答案 30 :(得分:2)

我遇到了同样的问题。移动我的/etc/my.cnf文件为我工作。我收到了信息here

答案 31 :(得分:1)

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

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

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

现在重启mysql服务器

答案 32 :(得分:1)

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

我在el capitan上使用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

答案 33 :(得分:1)

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

答案 34 :(得分:1)

我正在尝试重新安装mysql,实际上我忘了从旧安装中停止服务器。要解决此问题,请ps -ax | grep mysql,然后kill [whatever PIDs]。但是,再一次,对每个人来说都是不同的。与其他答案一样,转到/usr/local/var/mysql/并检查您的.err日志文件。

答案 35 :(得分:1)

就我而言,当我尝试启动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!

答案 36 :(得分:0)

我在交换服务器IP后遇到了这个问题。数据库在此之前工作正常。 /etc/my.cnf中有一个我需要更新的条目:

bind-address = xxx.xxx.xxx.xx

那里有旧的IP地址。

答案 37 :(得分:0)

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

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

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

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

答案 38 :(得分:0)

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

  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文件。

答案 39 :(得分:0)

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

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

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

答案 40 :(得分:0)

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

答案 41 :(得分:0)

重新启动并删除所有* 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起作用。

答案 42 :(得分:0)

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

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

mysqld --tc-heuristic-recover=ROLLBACK

答案 43 :(得分:0)

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

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

感谢。

答案 44 :(得分:0)

/etc/selinux/config

中停用selinux

SELINUX=disabled并重启服务器

答案 45 :(得分:0)

在小牛队,这script帮助了我:

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

然后我根据https://stackoverflow.com/a/25883967/221781

重设密码

答案 46 :(得分:0)

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

答案 47 :(得分:0)

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

答案 48 :(得分:0)

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

答案 49 :(得分:0)

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

然后我做了mysql.server启动,一切正常。

答案 50 :(得分:0)

在我的情况下,问题是,mysql数据目录被意外移动到错误的目录(/ var / log,而不是/ var / lib)。将数据移回/ var / lib / mysql并重新启动服务器后,所有内容再次恢复正常。

答案 51 :(得分:-1)

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

  

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

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

rm -f *.err ib*

答案 52 :(得分:-3)

$ open /usr/local/var/mysql

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

$ brew install mysql

再次安装。

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

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