本节提供了有关启动服务器时出现问题的故障排除建议。有关 Windows 系统的其他建议,请参阅第 2.3.4 节,“对 Microsoft Windows MySQL 服务器安装进行故障排除”。
如果启动服务器时遇到问题,请尝试以下操作:
检查错误日志,以了解服务器无法启动的原因。日志文件位于数据目录中(通常在 Windows 上为
C:\Program Files\MySQL\MySQL Server 9.0\data
,对于 Unix/Linux 二进制发行版为/usr/local/mysql/data
,对于 Unix/Linux 源代码发行版为/usr/local/var
)。在数据目录中查找名称格式为
和host_name
.err
的文件,其中host_name
.loghost_name
是您的服务器主机名。然后检查这些文件的最后几行。使用tail
命令显示它们。$> tail host_name.err $> tail host_name.log
指定您正在使用的存储引擎所需的任何特殊选项。您可以创建一个
my.cnf
文件,并为计划使用的引擎指定启动选项。如果您打算使用支持事务表的存储引擎(InnoDB
、NDB
),请确保在启动服务器之前按照您的意愿配置它们。如果您使用的是InnoDB
表,请参阅第 17.8 节,“InnoDB 配置”获取指南,并参阅第 17.14 节,“InnoDB 启动选项和系统变量”获取选项语法。尽管存储引擎对您省略的选项使用默认值,但 Oracle 建议您查看可用的选项,并为默认值不适合您的安装的任何选项指定显式值。
确保服务器知道在哪里可以找到数据目录。mysqld 服务器使用此目录作为其当前目录。这是它期望找到数据库和写入日志文件的地方。服务器还会将 pid(进程 ID)文件写入数据目录。
默认数据目录位置在编译服务器时已硬编码。要确定默认路径设置,请使用
--verbose
和--help
选项调用 mysqld。如果数据目录位于系统上的其他位置,请在命令行或选项文件中使用--datadir
选项为 mysqld 或 mysqld_safe 指定该位置。否则,服务器将无法正常工作。作为--datadir
选项的替代方法,您可以使用--basedir
选项为 mysqld 指定 MySQL 安装目录的父目录,mysqld 会在该目录下查找data
目录。要检查指定路径选项的效果,请使用这些选项调用 mysqld,并在后面加上
--verbose
和--help
选项。例如,如果您将位置更改为 mysqld 安装目录,然后运行以下命令,它将显示使用/usr/local
作为基本目录启动服务器的效果:$> ./mysqld --basedir=/usr/local --verbose --help
您也可以指定其他选项,例如
--datadir
,但--verbose
和--help
必须是最后的选项。确定所需的路径设置后,请在不带
--verbose
和--help
选项的情况下启动服务器。如果 mysqld 当前正在运行,您可以通过执行以下命令来找出它正在使用的路径设置:
$> mysqladmin variables
或者
$> mysqladmin -h host_name variables
host_name
是 MySQL 服务器主机名。确保服务器可以访问数据目录。数据目录及其内容的所有权和权限必须允许服务器读取和修改它们。
如果在启动 mysqld 时收到
Errcode 13
(表示权限被拒绝
),这意味着数据目录或其内容的权限不允许服务器访问。在这种情况下,您需要更改相关文件和目录的权限,以便服务器有权使用它们。您也可以以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。(如果另一个服务器正在运行,并且您确实希望运行多个服务器,则可以在 第 7.8 节“在一台机器上运行多个 MySQL 实例” 中找到有关如何执行此操作的信息。)
如果没有其他服务器正在运行,请执行命令
telnet
。(默认的 MySQL 端口号是 3306。)然后多次按 Enter 键。如果您没有收到类似您的主机名
tcp_ip_端口号
telnet: 无法连接到远程主机: 连接被拒绝
的错误消息,则表示其他程序正在使用 mysqld 尝试使用的 TCP/IP 端口。确定此程序是什么并将其禁用,或者使用--port
选项告诉 mysqld 侦听其他端口。在这种情况下,使用 TCP/IP 连接到服务器时,请为客户端程序指定相同的非默认端口号。端口可能无法访问的另一个原因是您运行的防火墙阻止了对该端口的连接。如果是这样,请修改防火墙设置以允许访问该端口。
如果服务器已启动但您无法连接到该服务器,请确保
/etc/hosts
中有一个如下所示的条目127.0.0.1 localhost
如果无法启动 mysqld,请尝试使用
--debug
选项创建跟踪文件以查找问题。请参阅 第 7.9.4 节“DBUG 软件包”。