细数本地连阿里云上mysql8遇到的坑

时间:2021-07-29 20:12:52

  最近两个月忙成狗,给了自己一个冠冕堂皇的不记录博客的借口,今天咬牙记录一篇本地连阿里云mysql遇到的各种坑;

  昨天利用妹妹的学生身份买了台廉价的阿里ECS,购买成功后的第一反应当然是把本地的mysql迁移到服务器上以减轻我这个11年的老年机的负担了,
话不多说,直接在服务器上敲起来,wget,yum命令一敲mysql8顺利安装!

  接下来就是修改密码了,思路大概就是在my.cnf(一般在/etc下)添加skip-grant-tables免密登录,然后重启mysql,然后再输入mysql -u root -p命
令按两次回车直接进mysql了;这里我遇到了第一个坑,脑残的我把skip-grant-tables加到my.cnf的注释里了,然后怎么也跳不过去,真是自作自受了;

  上面的步骤都成功了以后,可以输入select host, user, authentication_string, plugin from mysql.user;查看mysq自带的用户表,其中host表示允许用户登录的 ip,% 表示可以远程;user和authentication_string分别表示用户名和

密码,plugin表示加密方式;我们可以将root的默认密码滞空,update mysql.user set authentication_string='' where user='root'; 然后通过exit退出mysql命令行,接着去把刚开始在my.cnf加的skip-grant-tables给注释掉,重启mysql

接着用mysql -u root -p登录,遇到输入密码直接回车,因为刚已经把密码滞空了;进入mysql命令行以后使用ALTER user 'root'@'localhost' IDENTIFIED BY '新密码';设置新密码,需要注意的是设置的新密码默认是有复杂度校验的

如果不想校验可以输入set global validate_password.policy=0;执行成功就可以输入简单的密码了

  接下来就是重点了,也是让我连个数据库而浪费了一上午的元凶所在,以上标红的字段一般就是坑之所在了;下面分三点依次解析:

  1、要使远程连接user表中root用户对应的host的值应改为"%"

  2、然后就是修改加密方式了,命令ALTER mysql.USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';然后刷新权限FLUSH PRIVILEGES;

    不出意外的话,第一个alter命令就会失败,因为我root对应的host已经改成%号了,而百度到的所有修改加密方式的都是ALTER mysql.USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';这又是我自己挖的

坑了,好在纠结半天后终于发现原因了,不然真是冤死了;有两个解决办法,可以把alter中的localhost改为%或者直接将@'localhost'去掉,还可以将1/2两步对调先改加密方式再改%就可以避免我这种苦逼的问题了;

  3、最后设置密码这块是一样的,如果你是最后将root用户对应的host的值应改为"%"的应该就不会有什么问题,而如果跟我一样首先就设置成%了,那么ALTER user 'root'@'localhost' IDENTIFIED BY '新密码';也会执行失败,解决办法和

2一样;

  数据库这块我们设置完后还要去阿里云上配个安全组,将3306端口开发出来,管理控制台==>云服务器ECS==>实例,然后选中需要操作的实例点击管理==>点击本实例安全组==>点击配置规则,最后点击添加安全组规则;其中端口范围:3306/3306;授权对象0.0.0.0/0就好;

  下面总结一下本地连阿里云ecs上mysql的一些步骤:

    1、确定本地能ping通你自己ecs的公网ip

    2、修改ecs上mysql对应用户密码的加密方式以及使其支持远程连接

    3、在ecs上开发3306端口

  这样基本上应该就能连接了,反正我是 踩了各种坑后终于圆满了,现在填好希望以后不会再踩了!