从MariaDB迁移至MySQL 5.7后遇密码重置及列数异常问题求助
嘿,我来帮你搞定这个麻烦的问题!你遇到的状况完全是因为强制执行mysql_upgrade --force搞砸了——毕竟你是从MariaDB切换到MySQL 5.7的,这俩的系统表结构本来就有差异,强行升级直接把mysql.user表的结构给弄乱了,才会出现密码重置报错和表列数不对的问题。下面是一步步的修复流程:
修复步骤
1. 先停掉当前的MySQL服务
首先得把正在运行的MySQL进程停掉,不然没法进行后续操作:
sudo systemctl stop mysqld
2. 启动MySQL并跳过权限验证
这一步是让我们能不用密码直接登录MySQL,方便修复损坏的系统表,加上--skip-networking是为了避免临时开放权限时被外部连接蹭进来,更安全:
sudo mysqld_safe --skip-grant-tables --skip-networking &
3. 无密码登录MySQL
直接执行这条命令就能进去了,不用输密码:
mysql -u root
4. 修复损坏的mysql.user表
首先切换到mysql系统库:
USE mysql;
先试试简单的表修复命令:
REPAIR TABLE user;
如果执行完还是有问题,那就得重建系统表了(记得先备份重要数据!):
- 先备份当前的
mysql库(如果有自己的业务库也一起备份):mysqldump -u root mysql > mysql_backup.sql - 杀掉当前的MySQL进程:
sudo killall mysqld_safe mysqld - 重新初始化系统表,这会生成一个临时密码:
sudo mysqld --initialize --user=mysql - 去日志里找临时密码:
grep 'temporary password' /var/log/mysqld.log - 启动MySQL服务:
sudo systemctl start mysqld - 用临时密码登录,然后修改成你自己的密码:
输入临时密码后执行:mysql -u root -pALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
5. 验证修复效果
重新登录MySQL,试试切换数据库:
mysql -u root -p
执行:
USE mysql;
如果没报错,那就说明问题解决啦!
为啥会出这问题?
你之前卸载MariaDB装了MySQL 5.7本来是没问题的,但mysql_upgrade --force这个命令是用来在升级MySQL版本时更新系统表的,你跨了数据库类型(MariaDB→MySQL)强行执行,直接把MySQL 5.7的user表结构改成了不兼容的样子,自然就没法正常验证密码和操作数据库了。以后跨数据库类型切换后可别乱执行这个命令啦!
内容的提问来源于stack exchange,提问作者Rajat kumar Singh
相关产品推荐
相关产品推荐

