前段时间按网上教程在windows系统虚拟机上装了一个mysql,但是安装成功后,发现只能在虚拟机上登录,无法通过远程登录。
而且在本机,也只能不指定-h时才可以登录,如果用mysql -u root -h 127.0.0.1,也会登录失败。
报错信息:ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to this MySQL server
127.0.0.1登录失败的原因,我查了一下网上资料,知道可能是由于mysql里面没有root@127.0.0.1的用户数据,只有root@localhost的用户数据,所以登录失败。
但即使我给系统加上了root@%的用户,并且赋了登录权限,还是登录不成功。
继续按网上的资料,确认防火墙也是打开状态,密码插件也改回旧版本的mysql_native_password,权限也刷新过,甚至服务也重启过,但还是不能登录。
当时查不到原因,只能暂时放弃。
这几天放假,我突然想到一个问题:我的mysql并不是安装在默认目录的,而且配置文件也不是放在mysql的安装目录,但我在启动mysql服务时,只使用了net start mysql,并没有指定配置文件目录,那么它是怎么发现我使用哪个配置文件呢?
进去service.msc,检查了一下mysql服务的详细信息,发现启动时确实是没指定配置文件的。于是猜测会不会是由于安装的配置文件(我安装时有指定配置文件)与启动配置文件不一样导致数据库出现异常。
尝试了一下在mysql服务加上启动参数,指定配置文件后重启,发现居然可以远程连接了!
但在服务管理页面参数配置不是永久的,只要一关闭服务参数就消失。每次都要进services.msc界面启动服务也是麻烦事,于是在网上找了一下,发现可以使用以下命令指定服务启动的参数:
sc start mysql --defaults-file=配置文件路径
不过奇怪的是问题居然无法重现,当我再次停了服务,以netstat start mysql启动服务时,发现客户端还是可以远程连接。
后来尝试了一下重装数据库,也没法重现之前的问题,不知道怎么回事。不过在重装过程中,我发现之前安装时犯了一个错误:
安装mysql服务时,我使用的命令是:
mysqld -install mysql
没有指定 --defaults-file=配置文件路径(网上的教程都是使用默认配置文件,不需要加上--defaults-file参数)
另外还有一点需要注意,一定要进行mysql安装目录下面的bin目录执行mysqld -install mysql --defaults-file=配置文件路径
不然生成的mysql服务可执行程序路径可能是错误的,并且这样做还有一个好处:--defaults-file=配置文件路径这个命令参数会附加到服务安装程序路径,这样就可以使用net命令管理服务了,不需要使用sc命令管理。
看网上介绍的mysql安装教程,非常简单,但我自己实际操作时却碰上了这个奇葩问题,前后花了几天时间,才把问题解决。难怪有一句古话说:“纸上得来终觉浅,绝知此事需躬行”