在构建AI基础设施,尤其是部署如MLflow、Kubeflow等需要数据库支持的MLOps平台时,MySQL是一个常见的选择。然而,许多用户在使用apt install mysql-server安装MySQL 8.0(尤其是在较新的Ubuntu/Debian系统上)后,会惊讶地发现安装过程并没有提示设置Root密码,导致无法使用传统的用户名密码方式登录。
这个问题并非安装失败,而是MySQL 8.0默认启用了强大的Socket Authentication (auth_socket)机制。这意味着只有拥有系统Root权限的用户才能通过Unix Socket连接数据库Root用户,以提高安全性。
本教程将指导您如何绕过Socket认证,设置一个标准的密码,并完成安全配置,使您的数据库可以被MLOps工具链正常访问。
Contents
步骤一:使用Socket认证登录MySQL
由于系统Root用户和数据库Root用户被关联起来,我们可以直接使用sudo权限登录数据库,无需密码。
******bash
sudo mysql
登录成功后,您将看到MySQL命令行提示符。
步骤二:检查Root用户的认证方式
在进入下一步设置密码之前,我们先确认Root用户的认证插件确实是auth_socket。
******sql
SELECT user, host, plugin FROM mysql.user WHERE user = ‘root’;
如果输出的plugin字段显示为auth_socket,则说明您正面临Socket认证问题。
步骤三:修改认证方式并设置密码
要让Root用户可以使用传统密码登录,我们需要将其认证插件从auth_socket更改为caching_sha2_password(MySQL 8.0推荐的默认插件)或mysql_native_password(如果您的应用程序或驱动程序较旧,需要更好的兼容性)。
推荐方案:使用caching_sha2_password
请将YourStrongNewPassword替换为您实际使用的复杂密码。
******sql
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘YourStrongNewPassword’;
— 刷新权限,确保设置立即生效
FLUSH PRIVILEGES;
— 退出MySQL
EXIT;
兼容性方案:使用mysql_native_password
如果您的MLOps工具(如某些旧版MLflow或自定义脚本)连接时出现认证错误,可以考虑使用兼容性更高的旧版认证方式。
******sql
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘YourStrongNewPassword’;
FLUSH PRIVILEGES;
EXIT;
步骤四:测试新的密码登录
退出MySQL命令行后,现在尝试使用新设置的密码登录:
******bash
mysql -u root -p
系统会提示您输入密码。如果登录成功,说明密码设置已生效。
步骤五:运行安全安装向导 (mysql_secure_installation)
虽然我们手动设置了密码,但为了确保您的AI基础设施数据库环境的安全性,强烈建议运行MySQL自带的安全配置脚本。此脚本将帮助您移除测试数据库、禁止远程Root登录等。
******bash
sudo mysql_secure_installation
根据提示,选择以下操作:
- VALIDATE PASSWORD COMPONENT (密码强度校验): 推荐开启。
- Change the password for root? (Root密码已设置,通常选择 No)
- Remove anonymous users? (推荐 Yes)
- Disallow root login remotely? (推荐 Yes,除非您明确知道需要在远程通过Root用户管理数据库)
- Remove test database and access to it? (推荐 Yes)
- Reload privilege tables now? (推荐 Yes)
完成以上步骤后,您的MySQL 8.0数据库就配置完毕,可以安全地作为您的AI基础设施或MLOps平台的后端服务数据库了。
汤不热吧