MySQL root 用户认证错误与 mysql_secure_installation 故障排除
问题描述
在 Ubuntu 20.04 系统上安装 MySQL 后,执行 sudo mysql_secure_installation
命令时遇到以下错误:
... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
这个错误表明 MySQL 服务器使用的认证插件不支持传统的密码设置方式,需要使用替代方法来配置 root 用户密码。
根本原因
从 MySQL 8.0 开始,默认的身份验证插件从 mysql_native_password
改为 caching_sha2_password
。mysql_secure_installation
工具在某些情况下可能无法正确处理新的认证方式,导致密码设置失败。
解决方案
方法一:手动更改 root 用户认证方式
-- 首先以无密码方式登录 MySQL
sudo mysql
-- 在 MySQL 提示符下执行以下命令
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password BY '你的新密码';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出 MySQL
EXIT;
# 现在可以正常运行安全安装脚本
sudo mysql_secure_installation
执行上述步骤后,mysql_secure_installation
会识别到已设置的密码,您可以选择使用现有密码选项完成安全配置。
注意
更改认证方式后,您需要使用 mysql -u root -p
并输入密码来登录,不能再使用 sudo mysql
无密码登录。
方法二:使用 ALTER USER 直接设置密码(推荐)
如果您希望保持 caching_sha2_password
认证插件(MySQL 8.0+ 的默认且更安全的选项),可以使用以下方法:
-- 登录 MySQL
sudo mysql
-- 直接设置 root 密码而不更改认证插件
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
-- 刷新权限
FLUSH PRIVILEGES;
方法三:重新配置 MySQL 服务器
如果上述方法无效,可以考虑重新配置 MySQL 服务器:
# 重新配置 MySQL 包
sudo dpkg-reconfigure mysql-server-8.0
此过程会引导您设置 root 密码并完成基本配置。
验证解决方案
完成配置后,请验证 MySQL 安装是否正常工作:
# 使用密码登录测试
mysql -u root -p
# 检查认证插件
SELECT user, plugin FROM mysql.user WHERE user = 'root';
预防措施
为避免此类问题,在安装 MySQL 时可以考虑预先设置 root 密码:
# 使用 debconf-set-selections 预设密码
echo "mysql-server-8.0 mysql-server/root_password password 你的密码" | sudo debconf-set-selections
echo "mysql-server-8.0 mysql-server/root_password_again password 你的密码" | sudo debconf-set-selections
# 然后安装 MySQL
sudo apt-get install mysql-server
总结
MySQL 8.0 引入的认证插件变更导致 mysql_secure_installation
工具在某些情况下无法正常工作。通过手动使用 ALTER USER
语句设置 root 密码,可以解决此问题并顺利完成 MySQL 的安全配置。
最佳实践建议
- 使用强密码并定期更换
- 保持 MySQL 版本更新以获得最新的安全修复
- 定期备份重要数据
- 考虑使用 MySQL 的审计功能监控数据库访问