本节提供有关启动服务器问题的故障排除建议。有关Windows系统的其他建议,请参见第2.3.5节“对Microsoft Windows MySQL Server安装进行故障排除”。
如果您在启动服务器时遇到问题,请尝试以下操作:
-
检查错误日志以查看为什么服务器无法启动。日志文件位于数据目录中(对于Unix / Linux二进制发行版和Unix / Linux源发行版, 通常
C:\Program Files\MySQL\MySQL Server 8.0\data在Windows上)。看看数据目录与形式的文件名的文件 和 ,其中是您的服务器的主机名。然后检查这些文件的最后几行。使用显示它们:/usr/local/mysql/data``/usr/local/var``*host_name*.err``*host_name*.loghost_nametailshell> tail host_name.err shell> tail host_name.log -
指定您正在使用的存储引擎所需的任何特殊选项。您可以创建
my.cnf文件并为计划使用的引擎指定启动选项。如果你要使用的存储引擎,支持事务表(InnoDB,NDB),请确保您有他们在启动服务器之前配置你想要的方式。如果使用InnoDB表,请参见第15.8节“ InnoDB配置”以获取指导,并 参见 第15.14节“ InnoDB启动选项和系统变量”以获取选项语法。尽管存储引擎将默认值用于您忽略的选项,但是Oracle建议您检查可用选项,并为默认值不适合您安装的所有选项指定显式值。
-
确保服务器知道在哪里可以找到 数据目录。在mysqld的服务器使用此目录作为其当前目录。它在这里期望找到数据库,并在这里期望写入日志文件。服务器还将pid(进程ID)文件写入数据目录中。
编译服务器时,默认数据目录位置是硬编码的。要确定默认路径设置是什么,请使用 和 选项调用mysqld。如果数据目录位于系统的其他位置,请在命令行或选项文件中使用mysqld或mysqld_safe选项 指定该位置 。否则,服务器将无法正常工作。作为选项的替代 ,您可以指定mysqld
--verbose--help--datadir--datadirMySQL的基本目录的位置--basedir, mysqld在该目录下 查找data目录。要检查指定路径选项的效果,请先调用 mysqld,然后再使用
--verbose和--help选项。例如,如果将位置更改为安装了mysqld的目录, 然后运行以下命令,则显示使用以下基本目录启动服务器的效果/usr/local:shell> ./mysqld --basedir=/usr/local --verbose --help您可以指定其他选项,例如
--datadir为好,但--verbose并--help一定是最后的选择。确定所需的路径设置后,请在不使用
--verbose和的 情况下启动服务器--help。如果mysqld当前正在运行,则可以通过执行以下命令找出正在使用的路径设置:
shell> mysqladmin variables要么:
shell> mysqladmin -h host_name variableshost_name是MySQL服务器主机的名称。 -
确保服务器可以访问 数据目录。数据目录及其内容的所有权和权限必须允许服务器读取和修改它们。
如果在启动mysqld时得到
Errcode 13(表示Permission denied) ,则意味着数据目录或其内容的特权不允许服务器访问。在这种情况下,您可以更改所涉及文件和目录的权限,以便服务器有权使用它们。您也可以使用来启动服务器 ,但这会引发安全问题,应避免使用。root将位置更改为数据目录,并检查数据目录及其内容的所有权,以确保服务器具有访问权限。例如,如果数据目录为
/usr/local/mysql/var,则使用以下命令:shell> ls -la /usr/local/mysql/var如果数据目录或其文件或子目录不属于您用于运行服务器的登录帐户所有,请将其所有权更改为该帐户。如果该帐户名为
mysql,请使用以下命令:shell> chown -R mysql /usr/local/mysql/var shell> chgrp -R mysql /usr/local/mysql/var即使拥有正确的所有权,如果您的系统上运行着其他安全软件来管理对文件系统各个部分的应用程序访问,则MySQL可能仍无法启动。在这种情况下,请重新配置该软件以使 mysqld能够访问其在正常操作期间使用的目录。
-
验证服务器要使用的网络接口是否可用。
如果发生以下任何一个错误,则意味着某些其他程序(也许是另一个mysqld 服务器)正在使用mysqld试图使用的TCP / IP端口或Unix套接字文件 :
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...使用ps确定是否正在运行另一个mysqld服务器。如果是这样,请在再次启动mysqld之前关闭服务器 。(如果另一台服务器正在运行,而您确实要运行多台服务器,则可以在第5.8节“在一台计算机上运行多个MySQL实例”中找到有关如何执行此操作的信息 。)
如果没有其他服务器在运行,请执行命令 。(默认的MySQL端口号是3306。)然后按Enter键两次。如果没有收到类似的错误消息 ,则其他程序正在使用mysqld试图使用的TCP / IP端口。跟踪这是什么程序并禁用它,或者使用该选项告诉 mysqld侦听另一个端口。在这种情况下,使用TCP / IP连接到服务器时,请为客户端程序指定相同的非默认端口号。
telnet *your_host_name* *tcp_ip_port_number*``telnet: Unable to connect to remote host: Connection refused--port端口可能无法访问的另一个原因是您正在运行的防火墙阻止了与该端口的连接。如果是这样,请修改防火墙设置以允许访问该端口。
如果服务器启动但无法连接到服务器,请确保其中有一个如下所示的条目
/etc/hosts:127.0.0.1 localhost -
如果无法启动mysqld,请尝试使用该
--debug选项制作一个跟踪文件以查找问题 。请参见 第5.9.4节“ DBUG软件包”。




