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

[](<>)[](<>)[](<>)[](<>)

本节提供有关启动服务器问题的故障排除建议。有关 Windows 系统的其他建议，请参阅[第 2.3.5 节，“Microsoft Windows MySQL 服务器安装故障排除”](windows-troubleshooting.html).

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

-   检查[错误日志](glossary.html#glos_error_log)看看为什么服务器不启动。日志文件位于[数据目录](glossary.html#glos_data_directory)（通常`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`,[`新开发银行`](mysql-cluster.html))，请确保在启动服务器之前按照您想要的方式配置它们。如果您正在使用`InnoDB`表，见[第 15.8 节，“InnoDB 配置”](innodb-configuration.html)对于指南和[第 15.14 节，“InnoDB 启动选项和系统变量”](innodb-parameters.html)对于选项语法。

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

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

    编译服务器时，默认数据目录位置是硬编码的。要确定默认路径设置是什么，请调用[**mysqld**](mysqld.html)与[`--详细`](server-options.html#option_mysqld_verbose)和[`- 帮助`](server-options.html#option_mysqld_help)选项。如果数据目录位于系统的其他位置，请使用[`--数据目录`](server-system-variables.html#sysvar_datadir)选项[**mysqld**](mysqld.html)要么[**mysqld\_安全的**](mysqld-safe.html)，在命令行或选项文件中。否则，服务器将无法正常工作。作为替代[`--数据目录`](server-system-variables.html#sysvar_datadir)选项，您可以指定[**mysqld**](mysqld.html)安装 MySQL 的基本目录的位置[`--basedir`](server-system-variables.html#sysvar_basedir)， 和[**mysqld**](mysqld.html)寻找`数据`那里的目录。

    要检查指定路径选项的效果，请调用[**mysqld**](mysqld.html)这些选项后跟[`--详细`](server-options.html#option_mysqld_verbose)和[`- 帮助`](server-options.html#option_mysqld_help)选项。例如，如果您将位置更改为所在的目录[**mysqld**](mysqld.html)安装好了然后运行下面的命令，就可以看到用base目录启动服务器的效果了`/usr/本地`：

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

    您可以指定其他选项，例如[`--数据目录`](server-system-variables.html#sysvar_datadir)也一样，但是[`--详细`](server-options.html#option_mysqld_verbose)和[`- 帮助`](server-options.html#option_mysqld_help)必须是最后的选择。

    确定所需的路径设置后，无需启动服务器[`--详细`](server-options.html#option_mysqld_verbose)和[`- 帮助`](server-options.html#option_mysqld_help).

    如果[**mysqld**](mysqld.html)当前正在运行，您可以通过执行以下命令找出它正在使用的路径设置：

    ```
    $> mysqladmin variables
    ```

    要么：

    ```
    $> mysqladmin -h host_name variables
    ```

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

-   确保服务器可以访问[数据目录](glossary.html#glos_data_directory).数据目录及其内容的所有权和权限必须允许服务器读取和修改它们。

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

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

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

    如果出现以下任一错误，则表示其他一些程序（可能是另一个[**mysqld**](mysqld.html)server) 正在使用 TCP/IP 端口或 Unix 套接字文件[**mysqld**](mysqld.html)正在尝试使用：

    ```
    Can't start server: Bind on TCP/IP port: Address already in use
    Can't start server: Bind on unix socket...
    ```

    采用**ps**确定你是否有另一个[**mysqld**](mysqld.html)服务器运行。如果是这样，请在启动前关闭服务器[**mysqld**](mysqld.html)再次。（如果另一台服务器正在运行，并且您真的想运行多个服务器，您可以在[第 5.8 节，“在一台机器上运行多个 MySQL 实例”](multiple-servers.html).)

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

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

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

    ```
    127.0.0.1       localhost
    ```

-   如果你不能得到[**mysqld**](mysqld.html)首先，尝试创建一个跟踪文件以使用[`--调试`](server-options.html#option_mysqld_debug)选项。看[第 5.9.4 节，“DBUG 包”](dbug-package.html).
