10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 42.0 mb
PDF (A4)- 42.1 mb
手册(TGZ)- 266.5 kb
手册(Zip)- 376.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

6.2.22 MySQL连接问题处理

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

  • 确保服务器正在运行。如果不是,则客户端无法连接到它。例如,如果连接到服务器的尝试失败,并收到以下消息之一,一个原因可能是服务器没有运行:

    $> mysql ERROR 2003:无法连接mysql服务器host_name' (111) $> mysql ERROR 2002: Can't 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下,可能需要配置不阻止MySQL端口的应用程序,如ZoneAlarm或Windows Firewall。

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

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

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

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

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

    mysql -u root -p Enter password:

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

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

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

    mysql客户端不支持服务器请求的认证协议考虑升级MySQL客户端
  • 请记住,客户端程序使用选项文件或环境变量中指定的连接参数。如果您没有在命令行上指定默认连接参数,但客户端程序似乎正在发送错误的默认连接参数,请检查任何适用的选项文件和您的环境。例如,如果你得到拒绝访问当您运行一个没有任何选项的客户端时,请确保您没有在任何选项文件中指定旧密码!

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

    $> mysqladmin——no-defaults -u root版本

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

  • 如果您得到以下错误,这意味着您正在使用不正确的密码:

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

    如果在没有指定密码的情况下出现上述错误,则意味着您在某些选项文件中列出了错误的密码。试——已选项,如前一项所述。

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

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

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

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

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

  • 如果你得到一个拒绝访问连接数据库时发生错误mysql - uuser_name,您可能有问题用户表格执行Mysql -u root Mysql并发出以下SQL语句:

    SELECT * FROM user;

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

  • 如果在尝试从运行MySQL服务器的主机以外的主机进行连接时出现以下错误,则意味着用户有扶手的桌子宿主与客户端主机匹配的值:

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

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

    如果您不知道要连接的机器的IP地址或主机名,则应该与'%'随着宿主中的列值用户表格尝试从客户机进行连接后,使用选择用户()查询以查看您实际是如何连接的。然后更改'%'用户表行与日志中显示的实际主机名对应。否则,您的系统将不安全,因为它允许来自任何主机的给定用户名的连接。

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

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

    $> mysqladmin -u root -pxxxx- hsome_hostnameuser 'root'@ "(使用的密码是YES)

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

    用户" @'未知'被拒绝访问

    这些错误表明存在DNS问题。要修复它,请执行mysqladmin flush hosts重置内部DNS主机缓存。看到第5.1.12.3节“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地址作为宿主列值。(或者,您也可以向用户有扶手的桌子宿主值,其中包含通配符(例如,“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.6节,“访问控制,第一阶段:连接验证”

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

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

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

  • 如果您在使用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.9.4节“DBUG包”

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