10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册
PDF(美版)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 236.9 kb
手册页(Zip)- 348.5 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

6.2.17 MySQL连接问题

如果您在尝试连接MySQL服务器时遇到问题,下面的项目描述了一些您可以采取的纠正问题的操作过程。

  • 确保服务器正在运行。如果不是,客户端无法连接到它。例如,如果尝试连接到服务器失败,出现如下消息之一,其中一个原因可能是服务器未运行:

    mysql服务器连接错误host_name' (111) $> mysql ERROR 2002: cannot connect to local mysql server through socket '/tmp/mysql. '袜子”(111)
  • 可能是服务器正在运行,但您试图使用TCP/IP端口、命名管道或Unix套接字文件连接,而不是服务器正在侦听的端口。要在调用客户机程序时纠正此问题,请指定——港口选项来指示正确的端口号,或者——套接字选项来指示正确的命名管道或Unix套接字文件。要查找套接字文件的位置,可以使用以下命令:

    $> netstat -ln | grep mysql
  • 确保服务器没有被配置为忽略网络连接,或者(如果您正在尝试远程连接)没有被配置为仅在其网络接口上监听本地。如果服务器启动时使用skip_networking启用系统变量时,它根本不接受TCP/IP连接。如果服务器启动时使用bind_address系统变量设为127.0.0.1,它只监听本地环回接口上的TCP/IP连接,不接受远程连接。

  • 检查确保没有防火墙阻止对MySQL的访问。您可以根据正在执行的应用程序或MySQL用于通信的端口号(默认为3306)来配置防火墙。在Linux或Unix下,检查您的IP表(或类似的)配置以确保端口没有被阻塞。在Windows操作系统下,ZoneAlarm或Windows Firewall等应用程序可能需要配置为不阻塞MySQL端口。

  • 必须正确设置授权表,以便服务器可以使用它们进行访问控制。对于某些发行版类型(如Windows上的二进制发行版,Linux上的RPM和DEB发行版),安装过程会初始化MySQL data目录,包括mysql包含授权表的系统数据库。对于不这样做的发行版,必须手动初始化数据目录。详细信息请参见第2.10节,“安装后的设置和测试”

    要确定是否需要初始化授权表,请查找mysql目录下的。(数据目录通常命名为数据var并且位于MySQL安装目录下。)确保您有一个名为用户。MYDmysql数据库目录。如果不是这样,初始化数据目录。在这样做并启动服务器之后,您应该能够连接到服务器。

  • 重新安装后,如果您尝试以如果不使用密码,您可能会收到以下错误消息。

    $> mysql -u root错误1045(28000):访问拒绝用户'root'@'localhost(使用密码:NO)

    这意味着在安装过程中已经分配了根密码,必须提供这个密码。看到第2.10.4节“保护MySQL初始帐户”关于密码可能被分配的不同方式,以及在某些情况下如何找到它。如果需要重置root密码,请参见第B.3.3.2节“如何重置Root密码”。找到或重置密码后,请以使用——密码(或- p)选项:

    $> mysql -u root -p输入密码

    但是,服务器将允许您以如果你已经初始化MySQL使用mysqld——initialize-insecure(见第2.10.1节“初始化数据目录”详情)。这是一个安全风险,所以您应该为账户;看到第2.10.4节“保护MySQL初始帐户”的指令。

  • 如果您已将现有的MySQL安装更新到新版本,您是否执行了MySQL升级过程?如果没有,就这样做。当添加新功能时,授权表的结构偶尔会发生变化,因此在升级后,您应该始终确保表具有当前结构。有关说明,请参见第2.11节“升级MySQL”

  • 如果客户端程序在尝试连接时收到以下错误消息,这意味着服务器希望使用比客户端能够生成的格式更新的密码:

    mysql客户端不支持服务器请求的认证协议;考虑升级MySQL客户端

    有关如何处理此问题的信息,请参见第6.4.1.3节,“从Pre-4.1版本的密码哈希和mysql_old_password插件迁移”

  • 请记住,客户机程序使用选项文件或环境变量中指定的连接参数。如果您没有在命令行中指定默认连接参数,而客户机程序似乎正在发送不正确的默认连接参数,请检查任何适用的选项文件和您的环境。例如,如果你得到拒绝访问当您运行没有任何选项的客户端时,请确保您没有在任何选项文件中指定旧密码!

    方法调用选项文件,可以禁止客户端程序使用选项文件——已选择。例如:

    $> mysqladmin——no-defaults -u root version

    中列出了客户端使用的选项文件第4.2.2.2节“使用选项文件”。中列出了环境变量第4.9节,“环境变量”

  • 如果出现以下错误,则表示您使用了不正确的密码:

    $> mysqladmin -u root -pxxxx用户'root'@'localhost'访问被拒绝(使用密码:YES)

    如果在没有指定密码的情况下出现上述错误,则说明在某个选项文件中列出了不正确的密码。试——已选项,如前一项所述。

    有关更改密码的信息,请参见第6.2.10节“分配帐户密码”

    如果你已经丢失或忘记了密码,看到第B.3.3.2节“如何重置Root密码”

  • 本地主机是本地主机名的同义词,如果未显式指定主机,它也是客户端尝试连接的默认主机。

    你可以使用——主机= 127.0.0.1选项显式地命名服务器主机。这将建立到本地的TCP/IP连接mysqld服务器。也可以通过指定a来使用TCP/IP——主机选项,使用本地主机的实际主机名。在这种情况下,主机名必须在用户即使您在与服务器相同的主机上运行客户端程序,也可以在服务器主机上的表行。

  • 拒绝访问错误消息告诉您尝试以谁的身份登录、尝试从中连接的客户端主机以及是否使用了密码。通常,你应该有一行用户表,该表与错误消息中给出的主机名和用户名完全匹配。例如,如果您得到一条错误消息,其中包含使用密码:NO,这意味着您试图在没有密码的情况下登录。

  • 如果你得到拒绝访问连接到数据库时出现错误mysql - uuser_name,你可能有问题用户表格通过执行以下命令来检查这一点Mysql -u root Mysql并发出以下SQL语句:

    SELECT * FROM user;

    结果应该包括一行宿主用户列匹配您的客户端主机名和MySQL用户名。

  • 如果当您尝试从运行MySQL服务器的主机以外的主机连接时出现以下错误,则意味着数据库中没有行用户带a的桌子宿主匹配客户端主机的值:

    宿主不允许连接到这个MySQL服务器

    您可以通过为尝试连接时使用的客户端主机名和用户名的组合设置一个帐户来解决这个问题。

    如果您不知道正在连接的机器的IP地址或主机名,则应该用“%”随着宿主的列值。用户表格尝试从客户端机器连接后,使用选择用户()查询,看看你是如何真正连接的。然后改变“%”用户将表行转换为日志中显示的实际主机名。否则,您的系统将变得不安全,因为它允许使用给定用户名从任何主机进行连接。

    在Linux上,可能发生此错误的另一个原因是,您使用的是二进制MySQL版本,该版本使用不同版本的glibc库比你正在使用的那个。在这种情况下,您应该升级操作系统或glibc,或下载MySQL版本的源代码发行版并自己编译它。编译和安装源RPM通常很简单,所以这不是一个大问题。

  • 如果你在尝试连接时指定了一个主机名,但是得到一个错误消息,其中主机名没有显示或者是一个IP地址,这意味着MySQL服务器在试图将客户端主机的IP地址解析为一个名称时得到了一个错误:

    $> mysqladmin -u root -pxxxx- hsome_hostname用户“root”@被拒绝访问(使用密码:YES)

    如果你试着连接并得到以下错误,这意味着您在用户带a的桌子用户的列值“根”mysqld无法解析客户端的主机名:

    用户“@”未知被拒绝访问

    这些错误表明DNS有问题。要修复它,请执行mysqladmin flush hosts重置内部DNS主机缓存。看到第5.1.11.2节,“DNS查找和主机缓存”

    一些永久的解决方案是:

    • 确定DNS服务器出了什么问题并修复它。

    • 在MySQL授权表中指定IP地址,而不是主机名。

    • 将客户机机器名的条目放入设置在Unix或\ windows \主机在Windows上。

    • 开始mysqldskip_name_resolve启用系统变量。

    • 开始mysqld——skip-host-cache选择。

    • 在Unix上,如果您在同一台机器上运行服务器和客户端,则连接到本地主机。连接到本地主机, MySQL程序尝试使用Unix套接字文件连接到本地服务器,除非有指定的连接参数以确保客户端进行TCP/IP连接。有关更多信息,请参见第4.2.4节“使用命令选项连接MySQL服务器”

    • 在Windows上,如果您在同一台机器上运行服务器和客户端,并且服务器支持命名管道连接,则连接到主机名(时期)。连接使用命名管道而不是TCP/IP。

  • 如果Mysql -u root但工作mysql - hyour_hostname- u根结果拒绝访问(your_hostname是本地主机的实际主机名),您可能没有为您的主机在正确的名称用户表格这里的一个常见问题是宿主的值用户表行指定非限定主机名,但系统的名称解析例程返回完全限定的域名(反之亦然)。例如,如果您与host发生争执“冥王星”用户但是你的DNS告诉MySQL你的主机名是“pluto.example.com”,行不工作。控件中添加一行用户表,其中包含主机的IP地址作为宿主列值。(或者,您可以向用户带a的桌子宿主包含通配符的值(例如,“pluto. %”)。然而,使用宿主以结尾的值不安全的,是推荐!)

  • 如果mysql - uuser_name但工作mysql - uuser_namesome_db如果没有,您还没有授予指定用户对数据库的访问权限some_db

  • 如果mysql - uuser_name在服务器主机上执行时有效,但是mysql - hhost_name- uuser_name在远程客户端主机上执行时不起作用,说明您尚未启用从远程主机为给定用户名访问服务器。

  • 如果你不明白为什么你会拒绝访问,从用户表所有具有宿主包含通配符的值(行中包含“%”“_”字符)。插入新行是一个非常常见的错误宿主=“%”用户=some_user,认为这使您能够指定本地主机从同一台机器连接。这不起作用的原因是默认特权包含一行宿主=“localhost”用户=。因为这一行有a宿主价值“localhost”这比“%”,在连接时优先使用它,而不是新行本地主机!正确的过程是插入第二行宿主=“localhost”用户=some_user,或删除带有的行宿主=“localhost”用户=。删除行后,请记住发出冲洗的特权语句重新加载授权表。另请参阅第6.2.5节,访问控制,阶段1:连接验证

  • 如果您能够连接到MySQL服务器,但得到一个拒绝访问消息选择……到输出文件加载数据声明,你的行在用户表中没有文件特权启用。

  • 如果您直接更改授权表(例如,使用插入,更新,或删除语句),并且您的更改似乎会被忽略,请记住,您必须执行冲洗的特权语句或mysqladmin flush-privileges命令,使服务器重新加载特权表。否则,直到下次重新启动服务器时,您的更改才会生效。记住,在你改变后带字符的密码更新语句时,在刷新特权之前不需要指定新密码,因为服务器还不知道您已经更改了密码。

  • 如果您的特权似乎在会话中发生了变化,那么可能是MySQL管理员更改了它们。重新加载授权表会影响新的客户端连接,但也会影响现有连接,如第6.2.9节“特权变更何时生效”

  • 如果在使用Perl、PHP、Python或ODBC程序时遇到访问问题,请尝试使用mysql - uuser_namedb_namemysql - uuser_name- p密码db_name。如果您能够使用mysql客户端,问题在于您的程序,而不是访问权限。(中间没有间隔- p和密码;你也可以用——密码=密码指定密码的语法。如果你使用- p——密码选项,MySQL会提示您输入密码。)

  • 用于测试目的,启动mysqld的服务器——skip-grant-tables选择。然后,您可以更改MySQL授权表并使用秀奖助金语句检查你的修改是否有预期的效果。当您对更改感到满意时,执行mysqladmin flush-privileges告诉他们mysqld重新加载特权的服务器。这使您可以开始使用新的授权表内容,而无需停止和重新启动服务器。

  • 如果其他方法都失败了,启动mysqld带有调试选项的服务器(例如,debug = d,一般情况下,查询)。这将打印关于尝试连接的主机和用户信息,以及关于发出的每个命令的信息。看到第5.8.3节“DBUG包”

  • 如果您对MySQL授权表有任何其他问题,请在MySQL社区Slack,总是提供MySQL授权表的转储。可以转储表, mysqldump mysql命令。要提交错误报告,请参见第1.6节,“如何报告bug或问题”。在某些情况下,您可能需要重新启动mysqld——skip-grant-tables运行, mysqldump