本地连接不上远程服务器(ubuntu系统)上的mysql数据库的解决办法

最近刚把项目部署到服务器上,数据库也在服务器里面。在服务器上操作数据非常的不方便,因此如果本地能远程连接服务器上的mysql数据库的话,以后维护起来就会特别容易。我服务器上mysql的版本是5.7.28。
下面演示 为了连接远程服务器上的mysql,所经历的踩坑和出坑的历程↓↓↓↓

惨痛经历回顾

  • 使用navicat输入149.129.100.1323306root666666,先进性测试连接(Test Connection)。服务器上mysql的登陆密码为66666,用户名为root,这个是没有问题的。这里有个误区:我以为我输入的root是服务器上mysql的登陆用户名,我以为我输入的666666是服务器上mysql的登陆密码,实际上是没有任何关系的,你输入的用户名和密码是被授权过的,用户名可以是阿猫,密码可以是阿狗,和服务器上的root,666666并不冲突。走出这个误区,你对远程登录mysql就理解的非常到位了
    image.png
  • 结果报错Password authentication failed
    image.png
  • 然后就去远程服务器 登录mysql数据数据库。明明已经实现了:任何主机或ip地址,只要名为root都可以访问这个个远程服务器上的mysql,也做了授权处理,但是本地就是无法连接远程的mysql。


    image.png

柳暗花明

  • 经过仔细排查发现,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;命令少了设置登陆远程数据库密码的命令。应该改成GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'forever18' WITH GRANT OPTION; 这样的话,本地就可以以root作为用户名,forever18作为密码访问远程服务器上的mysql数据库了。
    因此在服务器里面登录mysql数据库,然后重新赋予root用户权限,命令如下:
    image.png
  • 最终访问远程的mysql数据库成功


    image.png

核心注意点:

我以为 任何主机A(例如本地访问) 远程登录服务器上的mysql数据库所用到的用户名和密码,就是 远程服务器上登录mysql的用户名root和密码666666。实际上是,本地访问 远程的mysql数据库所用到的用户名和密码 是由服务端授权给主机A的,需要执行事例中的GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'forever18' WITH GRANT OPTION; 这句代码来执行授权操作。
强烈注意:666666是在服务器中登陆mysql的密码; forever18是本地远程登录mysql的密码。同理,虽然两个都为root,但此root非彼root,一个是在服务器中登陆mysql的用户名,另一个是在本地远程登录mysql的用户名
因此本地访问 远程的mysql数据库所用到的用户名和密码 不是 远程的mysql数据库的用户名和密码,这两个用户名和密码没有任何的关系
出了上面的这个问题,我的这篇文章应该是有些问题的,MySQL 8.0.15版本,给用户分配访问权限,有时间我得解决下

写在最后
如果写的有问题,还请批评指正,不胜感激

你可能感兴趣的:(本地连接不上远程服务器(ubuntu系统)上的mysql数据库的解决办法)