在阿里ECS上搭建LAMP并建站的踩坑记录

感谢阿里的开发者成长计划,我的另一个站点暂时有了容身之所。

此处不详细记录每一步,只记录一些“有意思”的地方。

环境配置

  • Debian 10.4
  • Apache 2.4.38
  • MySQL 8.0.22
  • PHP 7.3.19

以上安装都“比较”顺利。

MySQL 8.0

直到开始安装typecho,一直报数据库连接不上,我检查了账号密码端口和安全策略,没有问题,本地也能登陆。使用navicat链接,发现报:

MySQL-1698 : Access denied for user 'root'@'我的IP'

发现是没有开启mysql远程登录。查看一下user表,错误起因如下:

select user, host, plugin from mysql.user;
 +------------------+-----------+-----------------------+
 | user             | host      | plugin                |
 +------------------+-----------+-----------------------+
 | root             | localhost | auth_socket           |
 | mysql.infoschema | localhost | caching_sha2_password |
 | mysql.session    | localhost | caching_sha2_password |
 | mysql.sys        | localhost | caching_sha2_password |
 +------------------+-----------+-----------------------+
 4 rows in set (0.00 sec)

其host改为全部,pulgin改为mysql_native_password即可解决,遂尝试修复。起作用的命令如下:

update mysql.user set host='%', plugin='mysql_native_password' where user='root';

但要命的是,关于host,我搜索出来的命令执行时报语法错误(至今未发现原因):

GRANT ALL PRIVILEGES ON \*.\* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;

关于plugin的命令(语法错误):

update mysql.user set authentication_string=PASSWORD('你的密码'), plugin='mysql_native_password' where user='root';

不知为何他要动一下root密码……

由于MySQL8.0的版本已经移除了password(),所以我直接执行时报语法错误。又看到有说用sha1()代替password()即可,我手贱试了一下。此时我完全不知道MySQL8.0之后有过重大更新,就包括密码的加密方式。此前用password()可用sha1()代替,但之后就不是了,至少我现在用的8.0.22就不是。于是我把root密码改成了我也不知道是什么东西。当我发现这一点时,幸好还没退出,为了避免不能登录,就先把密码清除掉,设为空字符串。

MySQL 8.0以上设置密码方法如下:

alter user'root'@'%' identified by '新的密码';

改好之后一路畅通至写完此文。

以上。

posted @ 2021-01-17 11:40  不到乌江  阅读(36)  评论(0编辑  收藏  举报