You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下替换MySQL 5.7.41为MariaDB 10.3.38后服务启动异常求助

Ubuntu 20.04下替换MySQL 5.7.41为MariaDB 10.3.38后服务启动异常求助

嗨,Markus,我来帮你梳理下这个问题的根源和解决办法:

首先,虽然systemctl status mariadb显示服务是active (running)的,但报错来自/etc/mysql/debian-start脚本——这个脚本是MariaDB在Debian/Ubuntu系统里自带的启动后维护脚本,会自动执行数据库升级检查、初始化等操作。它尝试以无密码的方式用root@localhost登录,但你的MariaDB root用户目前仅设置了密码认证,所以触发了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的错误。

解决步骤

  1. 登录MariaDB:用你目前能正常访问的命令登录:

    mariadb -u root -p<password>
    
  2. 为root用户添加Unix Socket认证方式:执行以下SQL语句,这样既保留你现有的密码登录方式,又允许本地系统root用户通过Unix Socket无密码登录(debian-start脚本会用这个方式):

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket OR mysql_native_password USING '*9FA783C4FXXXXXX1ED0640ACBFDF68A2B354E18A';
    FLUSH PRIVILEGES;
    

    注意:USING后面的哈希值要保留你现有SHOW GRANTS结果里的那个密码哈希,不要替换成明文密码。

  3. 重启MariaDB服务并验证:

    sudo systemctl restart mariadb
    sudo systemctl status mariadb
    

    查看日志部分,应该不会再出现那个Access denied的错误了,debian-start脚本也能正常完成后续的维护操作。

补充说明

这个问题的本质是MySQL 5.7和MariaDB在Debian/Ubuntu环境下的默认认证逻辑差异:MySQL 5.7默认给root用户设置密码认证,而MariaDB的系统维护脚本默认依赖Unix Socket认证(允许本地系统root用户无需密码直接登录数据库root)。替换后你沿用了MySQL的密码认证方式,但没配置Socket认证,导致维护脚本登录失败。

备注:内容来源于stack exchange,提问作者Clueless

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 16:24:31