# 2.10.2.1 解决启动 MySQL 服务器的问题

本节提供有关启动服务器问题的故障排除建议。有关 Windows 系统的其他建议,请参阅第 2.3.5 节,“Microsoft Windows MySQL 服务器安装故障排除”.

如果您在启动服务器时遇到问题,可以尝试以下方法:

  • 检查错误日志看看为什么服务器不启动。日志文件位于数据目录(通常C:\Program Files\MySQL\MySQL 服务器 8.0\data在 Windows 上,/usr/local/mysql/数据对于 Unix/Linux 二进制发行版,以及/usr/local/var对于 Unix/Linux 源代码发行版)。在数据目录中查找具有表单名称的文件*主机名*。呃*主机名*。日志, 在哪里*主机名*是您的服务器主机的名称。然后检查这些文件的最后几行。采用尾巴显示它们:

    $> tail host_name.err
    $> tail host_name.log
    
  • 指定您正在使用的存储引擎所需的任何特殊选项。您可以创建一个我的.cnf文件并为您计划使用的引擎指定启动选项。如果您要使用支持事务表的存储引擎(InnoDB,新开发银行),请确保在启动服务器之前按照您想要的方式配置它们。如果您正在使用InnoDB表,见第 15.8 节,“InnoDB 配置”对于指南和第 15.14 节,“InnoDB 启动选项和系统变量”对于选项语法。

    尽管存储引擎对您忽略的选项使用默认值,但 Oracle 建议您查看可用选项并为默认值不适合您的安装的任何选项指定显式值。

  • 确保服务器知道在哪里可以找到数据目录.这mysqld服务器将此目录用作其当前目录。这是它期望找到数据库和期望写入日志文件的地方。服务器还将pid(进程ID)文件写入数据目录。

    编译服务器时,默认数据目录位置是硬编码的。要确定默认路径设置是什么,请调用mysqld--详细- 帮助选项。如果数据目录位于系统的其他位置,请使用--数据目录选项mysqld要么mysqld_安全的,在命令行或选项文件中。否则,服务器将无法正常工作。作为替代--数据目录选项,您可以指定mysqld安装 MySQL 的基本目录的位置--basedir, 和mysqld寻找数据那里的目录。

    要检查指定路径选项的效果,请调用mysqld这些选项后跟--详细- 帮助选项。例如,如果您将位置更改为所在的目录mysqld安装好了然后运行下面的命令,就可以看到用base目录启动服务器的效果了/usr/本地

    $> ./mysqld --basedir=/usr/local --verbose --help
    

    您可以指定其他选项,例如--数据目录也一样,但是--详细- 帮助必须是最后的选择。

    确定所需的路径设置后,无需启动服务器--详细- 帮助.

    如果mysqld当前正在运行,您可以通过执行以下命令找出它正在使用的路径设置:

    $> mysqladmin variables
    

    要么:

    $> mysqladmin -h host_name variables
    

    *主机名*是 MySQL 服务器主机的名称。

  • 确保服务器可以访问数据目录.数据目录及其内容的所有权和权限必须允许服务器读取和修改它们。

    如果你得到错误代码 13(意思是没有权限) 启动时mysqld,这意味着数据目录或其内容的权限不允许服务器访问。在这种情况下,您更改所涉及文件和目录的权限,以便服务器有权使用它们。您也可以将服务器启动为,但这会引发安全问题,应该避免。

    将位置更改为数据目录并检查数据目录及其内容的所有权,以确保服务器具有访问权限。例如,如果数据目录是/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访问它在正常操作期间使用的目录。

  • 验证服务器要使用的网络接口是否可用。

    如果出现以下任一错误,则表示其他一些程序(可能是另一个mysqldserver) 正在使用 TCP/IP 端口或 Unix 套接字文件mysqld正在尝试使用:

    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 实例”.)

    如果没有其他服务器在运行,则执行命令远程登录 *你的主机名* *tcp_ip_port_number*.(默认的 MySQL 端口号是 3306。)然后按 Enter 几次。如果您没有收到类似的错误消息telnet:无法连接到远程主机:连接被拒绝, 其他一些程序正在使用 TCP/IP 端口mysqld正在尝试使用。追踪这是什么程序并禁用它,或者告诉mysqld监听不同的端口- 港口选项。在这种情况下,当使用 TCP/IP 连接到服务器时,为客户端程序指定相同的非默认端口号。

    端口可能无法访问的另一个原因是您运行的防火墙阻止了与它的连接。如果是这样,请修改防火墙设置以允许访问该端口。

    如果服务器启动但您无法连接到它,请确保您在/etc/hosts看起来像这样:

    127.0.0.1       localhost
    
  • 如果你不能得到mysqld首先,尝试创建一个跟踪文件以使用--调试选项。看第 5.9.4 节,“DBUG 包”.