2.10.2.1 对启动 MySQL Server 的问题进行故障排除
本节提供了有关启动服务器问题的疑难解答建议。有关 Windows 系统的其他建议,请参阅第 2.3.5 节“对 Microsoft Windows MySQL Server 安装进行故障排除”。
如果您在启动服务器时遇到问题,请尝试以下操作:
- 检查error log以查看为什么服务器无法启动。日志文件位于data directory(对于 Windows,通常为
C:\Program Files\MySQL\MySQL Server 5.7\data
,对于 Unix/Linux 二进制发行版,通常为/usr/local/mysql/data
,对于 Unix/Linux 源发行版,则为/usr/local/var
)。在数据目录中查找名称格式为host_name.err
和host_name.log
的文件,其中*host_name
*是服务器主机的名称。然后检查这些文件的最后几行。使用tail
显示它们:
shell> tail host_name.err
shell> tail host_name.log
- 指定您正在使用的存储引擎所需的任何特殊选项。您可以创建一个
my.cnf
文件,并为计划使用的引擎指定启动选项。如果要使用支持事务 table(InnoDB
,NDB)的存储引擎,请确保在启动服务器之前已按照所需的方式配置了它们。如果您使用的是InnoDB
table,请参见第 14.8 节“ InnoDB 配置”了解准则,并参见第 14.15 节“ InnoDB 启动选项和系统变量”了解选项语法。
尽管存储引擎将默认值用于您忽略的选项,但是 Oracle 建议您检查可用选项,并为默认值不适合您安装的所有选项指定显式值。
- 确保服务器知道在何处找到data directory。 mysqld服务器使用此目录作为其当前目录。在这里它期望找到数据库,并且在期望写入日志文件。服务器还将 pid(进程 ID)文件写入数据目录中。
编译服务器时,默认数据目录位置是硬编码的。要确定默认路径设置是什么,请使用--verbose和--help选项调用mysqld。如果数据目录位于系统的其他位置,请在命令行或选项文件中使用mysqld或mysqld_safe的--datadir选项指定该位置。否则,服务器将无法正常工作。作为--datadir选项的替代方法,您可以将--basedir指定到安装 MySQL 的基本目录的位置mysqld,然后mysqld在此处查找data
目录。
要检查指定路径选项的效果,请先调用mysqld,然后再调用--verbose和--help选项。例如,如果将位置更改为mysqld的安装目录,然后运行以下命令,则显示使用/usr/local
的基本目录启动服务器的效果:
shell> ./mysqld --basedir=/usr/local --verbose --help
您还可以指定其他选项,例如--datadir,但是--verbose和--help必须是最后一个选项。
确定所需的路径设置后,无需--verbose和--help即可启动服务器。
如果mysqld当前正在运行,则可以通过执行以下命令来找出其正在使用的路径设置:
shell> mysqladmin variables
Or:
shell> mysqladmin -h host_name variables
host_name
*是 MySQL 服务器主机的名称。
- 确保服务器可以访问data directory。数据目录及其内容的所有权和权限必须允许服务器读取和修改它们。
如果在启动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
即使拥有正确的所有权,如果您的系统上运行着其他安全软件来 Management 对文件系统各个部分的应用程序访问,则 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 实例”中找到有关如何运行的信息。)
如果没有其他服务器在运行,请执行命令telnet your_host_name tcp_ip_port_number
。 (默认的 MySQL 端口号是 3306.)然后按 Enter 键两次。如果未收到telnet: Unable to connect to remote host: Connection refused
之类的错误消息,则其他某个程序正在使用mysqld尝试使用的 TCP/IP 端口。跟踪这是什么程序并将其禁用,或者使用--port选项告诉mysqld监听其他端口。在这种情况下,使用 TCP/IP 连接到服务器时,请为 Client 端程序指定相同的非默认端口号。
端口可能无法访问的另一个原因是您正在运行的防火墙阻止了与该端口的连接。如果是这样,请修改防火墙设置以允许访问该端口。
如果服务器启动但无法连接到服务器,请确保在/etc/hosts
中有一个如下所示的条目:
127.0.0.1 localhost
- 如果无法启动mysqld,请尝试使用--debug选项制作跟踪文件以查找问题。参见第 28.5.3 节“ DBUG 软件包”。