在阿里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 '新的密码';
改好之后一路畅通至写完此文。
以上。