最近新配置了一台新服务器用于生产环境,为了使整个系统生命周期长一些,我在配置环境时候安装的都是最新版的稳定系统/软件,比如操作系统选的Debian10, PHP和MySQL选的都是版本8。在安装MySQL时候遇到了之前类似的问题,就是默认root用户不知为何在预配置阶段密码设置无效,在安装后经过测试是空密码。我之前在5.7时候由于遇到过root账户不能远程登录的问题,当时记录了一些解决方法,可是其中的某些步骤提示语法错误,经过查询得知在MySQL8之后之前设置密码的语法已经被淘汰了,现在给空root账户设置密码步骤如下:
首先通过如下命令用root用户名和空密码登录数据库:
sudo mysql -u root
然后通过下边命令给root账户修改密码:
use mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd'; flush privileges; exit;
命令成功执行后可以查看一下是否可以用新密码登陆:
sudo mysql -u root -p
理论上现在已经可以通过sudo结合root用户名和密码在BASH里边登录数据库了。当时此时root账户可能不能通过phpMyAdmin或者外部工具登录(修正:这是由于root 用户使用 unix_socket 身份验证插件,只有在以系统 root 身份调用 mysql 命令或将 sudo 添加到命令时,才能以 root 身份连接到数据库,如果验证插件是其他比如我现在的Caching sha2 authentication,也是可以在phpmyadmin使用root登录的),这是从MySQL 5.7开始的安全策略原因,详细介绍以及解决方案可以看刚刚提到的那篇博文记录。
另外 Debian 10 的默认软件源中并不包含 MySQL 软件包,它已被 MariaDB 替代。我这次安装参考了不少教程,列在这里以表感谢:
Reference:
https://blog.shuspieler.com/1090/
https://www.digitalocean.com/community/tutorials/how-to-install-the-latest-mysql-on-debian-10
https://www.jianshu.com/p/59a9bcc136c2
https://stackoverflow.com/questions/50691977/how-to-reset-the-root-password-in-mysql-8-0-11