在 Ubuntu 中,如果你忘记了 MySQL 数据库密码,可以通过以下步骤进行重置。
- 停止 MySQL 服务。
sudo systemctl stop mysql
- 启动 MySQL 服务,并跳过权限检查。
sudo mysqld_safe --skip-grant-tables &
此操作会启动 MySQL 服务并跳过权限检查,允许任何人以任何身份访问 MySQL 数据库。
可能会出现以下问题
(base) tanspring@tanspring-X570-UD:/var/log$ 2024-03-04T09:01:49.912250Z mysqld_safe Logging to syslog.
2024-03-04T09:01:49.914947Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2024-03-04T09:01:49.917133Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
报错指出不存在 /var/run/mysqld 目录用于 UNIX 套接字文件。
在这种情况下,你需要按照以下步骤解决问题:
创建 /var/run/mysqld 目录:
sudo mkdir -p /var/run/mysqld
确保该目录的权限正确设置:
sudo chown mysql:mysql /var/run/mysqld
然后重新运行命令:sudo mysqld_safe --skip-grant-tables &
登录 MySQL。
mysql -u root
使用以下命令更新 MySQL 用户的密码(在这里,
new_password
是你想设置的新密码)。
UPDATE mysql.user SET authentication_string = 'new_password' WHERE User = 'root';
FLUSH PRIVILEGES;
exit;
停止 MySQL 服务。
sudo systemctl stop mysql
启动 MySQL 服务。
sudo systemctl start mysql
出现一直启动不起来,查看日志 /var/log/mysql/error.err
2024-03-04T08:57:00.394904Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
2024-03-04T08:57:01.394985Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
这个错误表明无法获取 ./ibdata1
的锁定,可能有两种原因:
- 其他MySQL进程正在运行并占用了相同的 InnoDB 数据或日志文件。
- 上一次 MySQL 进程异常退出,导致文件锁没有正确释放。
首先,你可以尝试找出是否有其他 MySQL 进程正在运行。可以运行以下命令检查:
ps aux | grep mysql
如果看到类似于mysqld
或mysql
的进程,可以尝试将其关闭。可以使用以下命令终止进程:
sudo kill <进程ID>
再次重新启动 MySQL 服务,使用mysql -u root -p
,使用新设置的密码登录