在 Linux Mint 上运行的 MySQL 5.7.17(无法启动 mysqld_safe --skip-grant-privileges

在 Linux Mint 上运行的 MySQL 5.7.17(无法启动 mysqld_safe --skip-grant-privileges

意外删除了 root 的 MySQL 5.7.17 (linux) 权限。我仍然可以以 root 身份登录。只是做不了什么。我在网上搜索了好几天,想找到启动 mysql_safe --skip-grant-privileges 的方法,但所有建议都不起作用。

MySQL 文档中的一篇文章建议使用不同的路径来替换mysql_safe。看起来非常复杂,我不能冒险用另一个不起作用的东西搞砸我的系统。

我还有大约一周的时间,然后需要让系统重新运行。想知道我是否可以删除 MySQL 并重新安装,新安装后是否可以访问表?

答案1

B.5.3.2.2 重置 Root 密码:Unix 和类 Unix 系统

在 Unix 上,使用以下步骤重置 MySQL 'root'@'localhost' 帐户的密码。要更改具有不同主机名部分的 root 帐户的密码,请修改说明以使用该主机名。

这些说明假设您将从通常用于运行它的 Unix 登录帐户启动 MySQL 服务器。例如,如果您使用 mysql 登录帐户运行服务器,则应在使用说明之前以 mysql 身份登录。或者,您可以以 root 身份登录,但在这种情况下,您必须使用 选项启动 mysqld --user=mysql。如果您以 root 身份启动服务器而不使用--user=mysql,服务器可能会在数据目录中创建 root 拥有的文件(例如日志文件),这些文件可能会导致将来服务器启动时出现权限相关问题。如果发生这种情况,您需要将文件的所有权更改为 mysql 或将其删除。

Log on to your system as the Unix user that the MySQL server runs as (for example, mysql).

Stop the MySQL server if it is running. Locate the .pid file that contains the server's process ID. The exact location and name of this file depend on your distribution, host name, and configuration. Common locations are /var/lib/mysql/, /var/run/mysqld/, and /usr/local/mysql/data/. Generally, the file name has an extension of .pid and begins with either mysqld or your system's host name.

Stop the MySQL server by sending a normal kill (not kill -9) to the mysqld process. Use the actual path name of the .pid file in the following command:

shell> kill `cat /mysql-data-directory/host_name.pid`

在 cat 命令中使用反引号(而不是正引号)。这会导致 cat 的输出被替换到 kill 命令中。

创建一个文本文件,其中包含一行密码分配语句。将密码替换为您要使用的密码。

MySQL 5.7.6 及更高版本:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.5 及更早版本:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

保存文件。本示例假设您将文件命名为 /home/me/mysql-init。该文件包含密码,因此不要将其保存在其他用户可以读取的地方。如果您不是以 mysql(服务器运行时的用户)身份登录,请确保该文件具有允许 mysql 读取它的权限。

使用特殊的 --init-file 选项启动 MySQL 服务器:

shell> mysqld --init-file=/home/me/mysql-init &

服务器--init-file在启动时执行该选项命名的文件的内容,改变'root'@'localhost'账户密码。

可能还需要其他选项,具体取决于您通常如何启动服务器。例如,--defaults-file在 之前可能需要--init-file

After the server has started successfully, delete /home/me/mysql-init.

您现在应该能够使用新密码以 root 身份连接到 MySQL 服务器。停止服务器并正常重新启动。

如果 ALTER USER 语句无法重置密码,请尝试使用以下语句重复该过程以直接修改用户表:

UPDATE mysql.user
    SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
    WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

B.5.3.2.3 重置 Root 密码:通用指令

前面的部分提供了专门针对 Windows 和 Unix 及类 Unix 系统的密码重置说明。或者,在任何平台上,您都可以使用 mysql 客户端重置密码(但这种方法不太安全):

Stop the MySQL server if necessary, then restart it with the --skip-grant-tables option. This enables anyone to connect without a password and with all privileges, and disables account-management statements such as ALTER USER and SET PASSWORD. Because this is insecure, you might want to use --skip-grant-tables in conjunction with --skip-networking to prevent remote clients from connecting.

Connect to the MySQL server using the mysql client; no password is necessary because the server was started with --skip-grant-tables:

shell> mysql

在 mysql 客户端中,告诉服务器重新加载授权表,以便帐户管理语句起作用:

mysql> FLUSH PRIVILEGES;

然后更改 'root'@'localhost' 帐户密码。将密码替换为您要使用的密码。要更改具有不同主机名部分的 root 帐户的密码,请修改说明以使用该主机名。

MySQL 5.7.6 及更高版本:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.5 及更早版本:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

您现在应该能够使用新密码以 root 身份连接到 MySQL 服务器。停止服务器并正常重新启动(不使用 --skip-grant-tables 和--skip-networking选项)。

如果 ALTER USER 语句无法重置密码,请尝试使用以下语句重复该过程以直接修改用户表:

UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass')
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

上一页 首页 下一页

相关内容