我有 linux root 密码。那台机器上有 MySQL 服务器。其中一个站点的 ini 被重写,现在无法访问 mysql 数据库。我没有 mysql root 来更改数据库用户的密码。服务器所有者现在正在休假,所以我不能要求他给我 mysql root。我可以重置 mysql root 密码,但我不想。
我需要:
- 将当前 mysql root 密码哈希保存在某处
- 重置
- 以 mysql root 身份执行操作(重置数据库的用户密码)
- 恢复旧的 root 密码
第1点和第4点该如何做?
答案1
共同点密码重置程序通过创建一个重置 root 密码的 init 文件来执行。然后重新启动服务器,并选择强制服务器以 root 用户身份使用 root 权限运行该脚本。
示例脚本显示您重置 root 密码,但是没有理由不能简单地让脚本重置您想要重置的用户的密码。
因此,如果您有能力重新启动 mysql 服务器并指定 init 文件,则可以跳过步骤 1、2 和 4,只需以 root 身份运行脚本即可。实际上,您完全没有必要接触 root 帐户。
答案2
警告:需要重新启动 mysql 才能执行步骤 1-3
无需...即可完成此操作。
- 使用另一个 my.cnf
- 编辑当前的 my.cnf
- 超级特权
登录 Linux Box 后,为了使用密码为自己创建临时 root 用户t3mpp@assw0rd
,请执行以下步骤
步骤 01)service mysql restart --skip-networking --skip-grant-tables
步骤 02)在 Linux 提示符下,输入mysql
并按回车键
步骤 03) 运行此 SQL 命令
SELECT COUNT(1) RootLocalhostExists FROM mysql.user
WHERE user='root' AND host='localhost';
- 如果
RootLocalhostExists
为 0,则在此处停止。在我的答案中留下评论。 - 如果
RootLocalhostExists
为 1,则继续执行步骤 04。
步骤 04)执行以下 SQL 命令
CREATE TABLE mysql.user2 LIKE mysql.user;
INSERT INTO mysql.user2 SELECT * FROM mysql.user
WHERE user='root' AND host='localhost';
UPDATE mysql.user SET PASSWORD=PASSWORD('t3mpp@assw0rd')
WHERE user='root' AND host='localhost';
步骤 05)service mysql restart
这将完成您的步骤 1-3。
密码恢复
要恢复原始 mysql 根目录,请执行以下操作(不需要重启 MySQL):
步骤 01)在 Linux 提示符下,输入mysql -uroot -pt3mpp@assw0rd
并按回车键
步骤 02)执行以下 SQL
DELETE FROM mysql.user WHERE user='root' AND host='localhost';
INSERT INTO mysql.user SELECT * FROM mysql.user2;
DROP TABLE mysql.user2;
FLUSH PRIVILEGES;
EXIT
就是这样。
试一试 !!!
答案3
如果你的 mysql 服务器在 debian(或 ubuntu 或类似系统)上运行,那么你可能可以使用用户debian-sys-maint
而不是 mysql root 用户。查看/etc/mysql/debian.cnf
它具有超级权限,可以更改用户密码。