问题描述基于debian9的云主机,按照官方安装说明安装mysql5.7后,本地(window10环境))使用navicat连接这个mysql报错,报错信息如下:2003Can'tconnecttoMySQLserveron'MyownIPaddressisnotspecified'(10061"Unknownerror")搜索解决办法用googletocan'tconnect200310061inurl:dev.mysql.com/doc/搜索关键字。这里指定inurl:dev.mysql.com/doc/是因为可以从官方那里得到尽可能多的官方文档信息,但是为什么会知道这个网址呢?搜索mysql官网后,最上面有一个很大的导航栏。如果我们要查找相关信息,就必须切换到DOCUMENTATION标签。现在URL变成了https://dev.mysql.com/doc/我的搜索结果如图可以看到第一个搜索结果是关于mysql8.0版本的,我们用的是5.7版本,先不看目前。第二个结果是mysqlconnector,跟我们说的关系不大,就不看了。第三篇是关于Troubleshooting(处理重大问题;解决疑难问题)ProblemsConnectingtoMySQL,好像跟我们的问题关系很大,所以先看这个。官方文档第一点的意思是:确认mysql服务器正在运行。按照官方文档给出的验证方式,确认mysql服务器正在运行。第二点“您正在尝试使用与服务器正在侦听的不同的TCP/IP端口、命名管道或Unix套接字文件进行连接。”---谷歌翻译===>“您正在尝试使用不同于服务器正在侦听的TCP/IP端口、命名管道或Unix套接字文件。“如果你不明白你在这里看到的是什么,那么当你看到下一句时,你应该能够大致理解你想说的话。”要在调用客户端程序时更正此问题,请指定--port选项以指示正确的端口号"---GoogleTranslate===>"要在调用客户端程序时更正此问题,请指定--port选项toindicatethecorrectportnumber”这个就是说确认我们的端口是正确的。然后我们检查mysql服务器是否在监听3306端口。这里官方文档没有给出说明,也是“作者写的文档anexpert”——专家总是不写小白认为必要的,而是自然而然地想到的。使用netstat-nlp|grep3306,如果你不明白这个命令,你需要学习netstat和|和grep,只是自己用搜索引擎搜索一下,网上的资料还是很多的,简单来说,这条命令的前半部分是检查当前服务器的网络状态,然后Pass|找到前半部分的内容half作为参数传递给下半部分,下半部分从内容中筛选出3306这一行。结果如下tcp00127.0.0.1:33060.0.0.0:*LISTEN8635/mysqld这表示有一个mysqld在监听3306端口,只要我们在navicat中连接的时候设置端口为3306就表示这一步没有问题。第三点mysqlserver在启动的时候会有一些参数进行配置,注意是否启用了--skip-networking`参数,或者参数--bind-address=127.0.0.1,这些参数会导致mysql服务器只接收本地访问请求,拒绝外网访问。Actual上面,从第二点,我们终于看到了这里的127.0.0.1:3306和--bind-address=127.0.0.1。有经验的应该已经明白是配置参数有问题了。那么如何修改配置参数呢??这里,官方文档提供了这两个重要参数的描述文档的超链接,实际上指向的是同一个页面。ParameterDescriptionDocument进入参数说明文档后,直接翻到顶层,因为我们有两个目的:1:检查我们的mysql服务器是否真的配置了这样的参数导致我们的问题;2:如果是这样,还是说Hereyougo,让我们看看如何配置参数。所以这个参数我们不用去详细研究,直接到最上面看看有没有设置参数的说明。返回顶部并查看第一段当您启动mysqld服务器时,您可以使用第4.2.2节“指定程序选项”中描述的任何方法指定程序选项。最常见的方法是在选项文件或命令行中提供选项。但是,在大多数情况下,最好确保服务器每次运行时都使用相同的选项。确保这一点的最佳方法是将它们列在选项文件中。请参阅第4.2.2.2节,“使用选项文件”。该部分还描述了选项文件格式和语法。这一段的意思是:“可以在启动mysql服务器的时候指定配置参数,但是我们通常希望每次都使用相同的参数启动,因此,在大多数情况下,参数都是写在一个文件中的。”要了解此文件的工作原理,请参阅第4.2.2.2节“使用选项文件”。既然如此,请点击指向新文档的超链接。或者开门见山:大多数MySQL程序可以从选项文件(有时称为配置文件)中读取启动选项。选项文件提供了一种指定常用选项的便捷方式,这样就无需在每次运行程序时都在命令行中输入它们。对于MySQL服务器,MySQL提供了一些预配置的选项文件。要确定程序是否读取选项文件,请使用--help选项调用它。(对于mysqld,使用--verbose和--help。)如果程序读取选项文件,帮助消息会指示它查找哪些文件以及它识别哪些选项组。第一段老调重弹,说大部分mysql服务器在启动时都是从文件中读取启动配置参数。mysql提供了一些预设参数。别急着按超链接跳到这里,下一段话不多,第二段说,为了判断mysql服务器是否读取了配置文件作为启动参数配置,用--help参数调用,如果mysql服务器读取了配置文件,则帮助信息(即是的,因为--help和输出信息)会指明mysql服务器在哪里寻找文件,涉及到哪个配置组。现在我们直接看mysql在我们机器上使用的文件,这里的文件里都有哪些配置,肯定比跳转第一段说的预设配置参数效率高。所以运行mysql--help>/tmp/mysqloptions.txt。因为输出内容很大,所以输出到一个文件中。看看这个文件,开头是介绍,不要看。然后说mysql命令可以用什么参数运行,略过。跳过之后,我们会发现我们想要看到的:默认选项是按照给定的顺序从以下文件中读取的:/etc/my.cnf/etc/mysql/my.cnf~/.my.cnf然后一一查看,在我的电脑上,/etc/my.cnf和~/.my.cnf不存在,而/etc/mysql/my.cnf有以下内容:#Copyright(c)2016,Oracleand/oritsaffiliates。版权所有。##这个程序是免费软件;您可以根据#自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改#它;许可证的第2版。##该程序的分发是希望它有用,#但没有任何保证;甚至没有#适销性或特定用途适用性的默示保证。有关详细信息,请参阅#GNU通用公共许可证。##你应该已经收到一份GNU通用公共许可证#以及这个程序;如果没有,请写信给FreeSoftware#Foundation,Inc.,51FranklinSt,FifthFloor,Boston,MA02110-1301USA!includedir/etc/mysql/conf.d/!includedir/etc/mysql/mysql.conf.d前面的#明明是注释,但是注意这里的includedir,说实话,我也不知道这里是什么!想表达什么,我一开始以为是否定的意思,所以不介绍这些目录了,但是既然前面提到的三个文件都不存在,我的问题确实没有解决,那我们就来看看吧。在/etc/mysql/conf.d/下,有两个文件mysql.cnf和mysqldump.cnf,这两个文件都是打开的,没有出现问题相关的参数。在/etc/mysql/mysql.conf.d/目录下,有一个mysql.cnf文件。打开后,哇,我看到了一个大宝贝,如下:error=/var/log/mysql/error.log#默认我们只接受来自localhostbind-address=127.0.0.1的连接#建议禁用符号链接以防止各种安全风险symbolic-links=0看倒数第三行,bind-address=127.0.0.1,问题的罪魁祸首就在这里,注释掉就好了。然后servermysqlrestart这时候我们在windows主机上使用navicat连接云服务器上的mysql,会发现我们的错误信息变了:HostisnotallowedtoconnecttothisMySQLserver。这是因为我们在远程尝试使用root用户登录,而mysql限制了root用户允许远程登录。解决这个错误不是本文的重点,这里顺便把最后一个小缺陷的解决方法贴出来。首先登录云服务器上的mysql服务器,在mysql中选择mysql数据库(USEmysql),更新root用户:updateusersethost='%'whereuser='root';。现在就可以成功使用navicat管理云mysql了。
