本节针对启动服务器的问题提供故障排除建议。有关 Windows 系统的其他建议,请参阅第 2.3.5 节,“Microsoft Windows MySQL 服务器安装故障排除”。
如果您在启动服务器时遇到问题,可以尝试以下操作:
检查错误日志以查看服务器未启动的原因。日志文件位于数据目录中(通常
C:\Program Files\MySQL\MySQL Server 5.7\data
在 Windows 上,/usr/local/mysql/data
对于 Unix/Linux 二进制分发版和/usr/local/var
Unix/Linux 源代码分发版)。在数据目录中查找名称格式为
and 的文件host_name
.err
,其中host_name
.loghost_name
是您的服务器主机的名称。然后检查这些文件的最后几行。用于tail
显示它们:$> tail host_name.err $> tail host_name.log
指定您正在使用的存储引擎所需的任何特殊选项。您可以创建一个
my.cnf
文件并为您计划使用的引擎指定启动选项。如果您打算使用支持事务表 (InnoDB
,NDB
) 的存储引擎,请确保在启动服务器之前按照您想要的方式配置它们。如果您正在使用InnoDB
表,请参阅 第 14.8 节,“InnoDB 配置”以获得指南和 第 14.15 节,“InnoDB 启动选项和系统变量”以获得选项语法。尽管存储引擎为您省略的选项使用默认值,但 Oracle 建议您查看可用选项并为默认值不适合您的安装的任何选项指定明确的值。
确保服务器知道在哪里可以找到 数据目录。mysqld服务器使用此目录作为其当前目录。这是它希望找到数据库的地方,也是它希望写入日志文件的地方。服务器还将 pid(进程 ID)文件写入数据目录中。
编译服务器时,默认数据目录位置是硬编码的。要确定默认路径设置是什么,请使用 和 选项调用mysqld 。如果数据目录位于系统的其他位置 ,请在命令行或选项文件中使用mysqld或mysqld_safe选项 指定该位置。否则,服务器无法正常工作。作为该 选项的替代方法,您可以指定mysqld
--verbose
--help
--datadir
--datadir
安装 MySQL 的基本目录的位置,--basedir
mysqld 会在那里查找该data
目录。要检查指定路径选项的效果,请使用这些选项调用 mysqld,后跟
--verbose
和--help
选项。例如,如果将位置更改 为安装mysqld的目录,然后运行以下命令,它显示了使用基目录启动服务器的效果/usr/local
:$> ./mysqld --basedir=/usr/local --verbose --help
您也可以指定其他选项,例如
--datadir
as well,但--verbose
必须--help
是最后一个选项。一旦确定了所需的路径设置,就可以在没有
--verbose
和 的情况下启动服务器--help
。如果mysqld当前正在运行,您可以通过执行以下命令找出它使用的路径设置:
$> mysqladmin variables
或者:
$> mysqladmin -h host_name variables
host_name
是 MySQL 服务器主机的名称。确保服务器可以访问 数据目录。数据目录及其内容的所有权和权限必须允许服务器读取和修改它们。
如果在启动 mysqld
Errcode 13
时得到(这意味着 ) ,这意味着数据目录或其内容的权限不允许服务器访问。在这种情况下,您更改涉及的文件和目录的权限,以便服务器有权使用它们。您也可以将服务器启动为 ,但这会引发安全问题,应该避免。Permission denied
root
将位置更改为数据目录并检查数据目录的所有权及其内容以确保服务器具有访问权限。例如,如果数据目录是
/usr/local/mysql/var
,请使用此命令:$> ls -la /usr/local/mysql/var
如果数据目录或其文件或子目录不属于您用于运行服务器的登录帐户,请将其所有权更改为该帐户。如果帐户名为
mysql
,请使用以下命令:$> chown -R mysql /usr/local/mysql/var $> 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.7 节“在一台机器上运行多个 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.8.3 节,“DBUG 包”。