Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Troubleshooting Problems Starting the MySQL Server

2.9.2.1 解决启动MySQL服务器的问题

本节提供了启动服务器时遇到的问题的故障排除建议。对于Windows系统的附加建议,请参阅第2.3.4节,“解决Microsoft Windows MySQL服务器安装问题”

如果您在启动服务器时遇到问题,以下是一些要尝试的事情:

  • 检查错误日志,以了解服务器为什么无法启动。日志文件位于数据目录(通常在Windows上为C:\Program Files\MySQL\MySQL Server 8.3\data,在Unix/Linux二进制分布式系统上为/usr/local/mysql/data,在Unix/Linux源代码分布式系统上为/usr/local/var)。在数据目录中查找名称以host_name.errhost_name.log形式的文件,其中host_name是您的服务器主机名称。然后检查这些文件的最后几行。使用tail命令来显示它们:

    $> tail host_name.err
    $> tail host_name.log
  • 指定您要使用的存储引擎所需的任何特殊选项。您可以创建一个my.cnf文件,并指定启动选项以供引擎使用。如果您要使用支持事务表的存储引擎(InnoDBNDB),请确保在启动服务器之前正确配置它们。如果您使用InnoDB表,请参阅第17.8节,“InnoDB配置”以获取指南和第17.14节,“InnoDB启动选项和系统变量”以获取选项语法。

    尽管存储引擎使用默认值来填充您遗漏的选项,但Oracle建议您查看可用的选项,并指定明确的值以供安装使用。

  • 确保服务器知道数据目录的位置。mysqld服务器使用该目录作为当前目录。这是它期望找到数据库和写入日志文件的地方。服务器还将进程ID(pid)文件写入数据目录。

    默认数据目录位置是在编译服务器时硬编码的。要确定默认路径设置,请使用mysqld带有--verbose--help选项。如果数据目录位于系统的其他位置,请使用--datadir选项指定该位置,以便mysqldmysqld_safe命令行或在选项文件中。否则,服务器将无法正常工作。作为--datadir选项的替代方案,您可以使用mysqld指定MySQL安装的基本目录的位置,以便mysqld在那里查找data目录。

    要检查指定路径选项的效果,请使用mysqld命令,后跟随选项。例如,如果您更改目录到mysqld安装的目录,然后运行以下命令,它将显示使用基本目录/usr/local启动服务器的效果:

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

    您也可以指定其他选项,例如,但必须是最后的选项。

    一旦您确定了要使用的路径设置,就可以在不使用的情况下启动服务器。

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

    $> mysqladmin variables

    或:

    $> mysqladmin -h host_name variables

    主机名是 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之前关闭该服务器。(如果另一个服务器正在运行,并且您真的想运行多个服务器,可以在第 7.8 节“在一台机器上运行多个 MySQL 实例”中找到相关信息。)

    如果没有其他服务器正在运行,请执行命令 telnet your_host_name tcp_ip_port_number。(默认的 MySQL 端口号是 3306。)然后按下 Enter 键几次。如果您没有收到错误消息,如 telnet: 无法连接到远程主机:连接被拒绝,那么其他程序正在使用 mysqld 尝试使用的 TCP/IP 端口。跟踪这个程序是什么,然后禁用它,或者告诉 mysqld 监听不同的端口使用 --port 选项。在这种情况下,指定相同的非默认端口号用于客户端程序连接到服务器时使用 TCP/IP。

    端口可能不可访问的另一个原因是您正在运行防火墙,阻止了对其的连接。如果是这样,请修改防火墙设置以允许对端口的访问。

    如果服务器启动但您无法连接到它,请确保在 /etc/hosts 中有一个条目,类似于这样:

    127.0.0.1       localhost
  • 如果您无法启动 mysqld,请尝试使用 --debug 选项创建跟踪文件以查找问题。请参阅 第 7.9.4 节,“DBUG 包”