如何使用--skip-grant-tables 启动 MySQL?

Posted

技术标签:

【中文标题】如何使用--skip-grant-tables 启动 MySQL?【英文标题】:How to start MySQL with --skip-grant-tables? 【发布时间】:2010-12-15 01:41:34 【问题描述】:

我将我的 root 用户锁定在我们的数据库之外。我需要将所有权限都还给 root 用户。我有我的密码,我可以登录 mysql。但是root用户没有所有权限。

【问题讨论】:

Mysql 有一个分步手册:Reset mysql root password 该页面中没有给出使用 --skip-grant-tables 启动 mysqld 的命令。我喜欢具有“复制粘贴”平滑度的文章! :) 命令:mysqld --skip-grant-tables @macdonjo mysql --skip-grant-tables 返回:mysql: unknown option '--skip-grant-tables' 如果就这么简单,我认为 OP 不会问这个问题。 @jefffabiny 命令“mysql”和“mysqld”不一样(注意“d”)。 mysqld --skip-grant-tables 按预期工作。 【参考方案1】:

如果这是一个windows盒子,最简单的做法是停止服务器,将skip-grant-tables添加到mysql配置文件,然后重新启动服务器。

一旦您解决了您的权限问题,请重复上述操作,但删除 skip-grant-tables 选项。

如果你不知道你的配置文件在哪里,那么登录 mysql 发送SHOW VARIABLES LIKE '%config%' 并且返回的行之一会告诉你你的配置文件在哪里。

【讨论】:

不知道配置文件在哪里。 查看我更新的帖子。但老实说,如果你遇到这个问题并且你不知道你的配置文件在哪里,你应该让更有经验的人为你修复它。除非这只是您正在学习的个人数据库,否则请继续学习。 :) 错误 SQL 查询:编辑 GRANT ALL PRIVILEGES ON * 。 * TO 'root'@'localhost' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; MySQL 说:文档 #1290 - MySQL 服务器正在使用 --skip-grant-tables 选项运行,因此它无法执行此语句你看,我已经使用 --skip-grant-tables 选项登录到 MySQL。但是,当我试图将所有权限恢复给 root 用户时,我失败了。 如此简单。很容易。【参考方案2】:

我遇到了与这个问题的标题相同的问题,所以如果其他人在这个问题上用谷歌搜索并想在 Windows 上以“skip-grant-tables”模式启动 MySql,这就是我所做的。

通过管理员工具、服务停止 MySQL 服务。

修改 my.ini 配置文件(假设默认路径)

C:\Program Files\MySQL\MySQL Server 5.5\my.ini

或者对于 MySQL 版本 >= 5.6

C:\ProgramData\MySQL\MySQL Server 5.6\my.ini 

在 SERVER SECTION 的 [mysqld] 下,添加以下行:

skip-grant-tables

让你拥有

# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this 
# file.
#
[mysqld]

skip-grant-tables

再次启动服务,您应该可以在没有密码的情况下登录到您的数据库。

【讨论】:

my.ini 文件的位置是 C:\ProgramData\MySQL\MySQL Server 5.6 而不是 Program Files 文件夹 太好了,有人知道如何在 unix 上执行此操作吗? /etc/my.cnf 不是放置“skip-grant-tables”的地方,如果我在那里运行 mysql,我会得到“mysql: unknown option '--skip-grant-tables'”。 我编辑了 /etc/my.cnf 并添加了[mysqld],然后在下一行输入了skip-grant-tables,没有--,并且重启了MySQL,它就可以工作了。 @Amalgovinus,你需要 mysqld.cnf。位置取决于分布——使用 locate :)【参考方案3】:

如果你使用mysql 5.6服务器,遇到C:\Program Files\MySQL\MySQL Server 5.6\my.ini问题:

你应该去C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

你应该添加skip-grant-tables,然后你就不需要密码了。

# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this 
# file.
#
# server_type=3
[mysqld]
skip-grant-tables

注意:在您完成skip-grant-tables 的工作后,您应该恢复您的C:\ProgramData\MySQL\MySQL Server 5.6\my.ini 文件。

【讨论】:

对于 linux fedora 用户,文件将是 /etc/ 目录下的 my.cnf。在该文件中添加 skip-grant-tables 行并通过“service mysqld restart”命令重新启动 mysqld 服务。谢谢【参考方案4】:

如果你在Apple MacBook OSX 上运行,那么:

    停止您的 MySQL 服务器(如果它已经在运行)。 找到您的 MySQL 配置文件 my.cnf。 (对我来说,它被放置在@ /Applications/XAMPP/xamppfiles/etc。你可以搜索,如果你 找不到)。 在任何文本编辑器中打开my.cnf 文件。 在[mysqld] 部分的末尾添加"skip-grant-tables"(不带引号)并保存文件。 现在启动您的 MySQL 服务器。它将以 skip-grant-tables 选项开头。

现在就做你想做的!

PS:一旦你完成了你想做的任何事情,请从my.cnf文件中删除skip-grant-tables,否则MySQL服务器将始终在没有访问权限的情况下运行。

【讨论】:

【参考方案5】:

如何在 MySQL 中重新控制 root 用户。

危险:有风险的操作

启动会话 ssh(如果可能,使用 root)。

使用编辑my.cnf 文件。

sudo vi /etc/my.cnf

将行添加到 mysqld 块。*

skip-grant-tables

保存并退出。

重启 MySQL 服务。

service mysql restart

检查服务状态。

service mysql status

连接到mysql。

mysql

使用主数据库。

use mysql;

重新定义用户root密码。

UPDATE user SET `authentication_string` = PASSWORD('myNuevoPassword') WHERE `User` = 'root'; 

编辑文件 my.cnf。

sudo vi /etc/my.cnf

擦除线条。

skip-grant-tables

保存并退出。

重启 MySQL 服务。

service mysqld restart

检查服务状态。

service mysql status

连接到数据库。

mysql -u root -p

出现提示时输入新密码。

这个动作非常危险,它允许任何人在没有用户和密码的情况下不受限制地连接到所有数据库。必须谨慎使用,并且必须迅速恢复以避免风险。

【讨论】:

service mysqld restart 错误 - service mysql restart 正确 对于 MySQL 5.7(在 Ubuntu 上),我必须编辑的 .cnf 文件位于 /etc/mysql/mysql.conf.d 对于 MariaDB 10.2.33 - 我无法运行 SQL UPDATE,它返回此错误:ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement PASSWORD() 函数在 5.7.5 版本之后被弃用。另见***.com/questions/52320576【参考方案6】:

使用以下命令(注意“d”):mysqld --skip-grant-tables

【讨论】:

【参考方案7】:

编辑 my.ini 文件并添加 skip-grant-tables 并重新启动您的 mysql 服务器:

[mysqld]
port= 3306
socket = "C:/xampp/mysql/mysql.sock"
basedir = "C:/xampp/mysql" 
tmpdir = "C:/xampp/tmp" 
datadir = "C:/xampp/mysql/data"
pid_file = "mysql.pid"
# enable-named-pipe
key_buffer = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log_error = "mysql_error.log"
skip-grant-tables
# Change here for bind listening
# bind-address="127.0.0.1" 
# bind-address = ::1 

【讨论】:

【参考方案8】:

在Linux系统上你可以做以下(其他操作系统应该类似)

检查mysql进程是否正在运行:

sudo service mysql status

如果正在运行,则停止该进程: (确保关闭所有 mysql 工具)

sudo service mysql stop

如果您遇到停止问题,请执行以下操作

搜索进程:ps aux | grep mysqld 杀死进程:kill -9 process_id

现在用跳过授权在安全模式下启动 mysql

sudo mysqld_safe --skip-grant-tables &

【讨论】:

【参考方案9】:

在尝试了 很多 的事情之后,这对我有用:

sudo mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword'; 

所以首先我们使用 sudo 以 root 身份登录 mysql,不需要密码。然后我们只需更新root的密码。

之后我重启mysqld

sudo service mysql restart

newpassword 以 root 身份登录!

【讨论】:

其他答案对我没有帮助,但是您的方法有效。谢谢 非常感谢,在amazon linux 2工作过【参考方案10】:

我在 Windows 10 中,使用 WAMP64 服务器。搜索 my.cnfmy.ini。在C:\wamp64\bin\mariadb\mariadb10.2.14 中找到my.ini

听从同事的指示:

    从 Wampserver 打开快速启动菜单,选择“停止所有服务” 在文本编辑器中打开my.ini,搜索[mysqld][mysqld] 部分的末尾添加了'skip-grant-tables'(但在其中) 保存文件,让编辑器保持打开状态 在 Wampserver 菜单中,选择“重新启动服务”。将出现关于 skip-grant-tables 选项的警告 在 Wampserver 菜单中选择 MySQL 以打开提示 要求输入密码,直接回车 粘贴命令ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword'; 它必须报告操作成功(没有表受到影响) 在my.ini 文件中,删除'skip-grant-tables' 行,保存文件 在 WampServer 菜单中,再次选择重新启动服务

现在您可以使用新密码进入。感谢这里的所有答案。

【讨论】:

【参考方案11】:

请从控制台运行以下命令,以在从命令提示符启动 mysql 数据库时跳过用户表验证

mysqld -skip-grant-tables

【讨论】:

对于 linux 用户来说,这应该是公认的答案。谢谢!【参考方案12】:

我看到这个问题很老了,但也许我的配置会对某人有所帮助。我在脚本中使用此配置:

sed -i 's/^#skip-grant-tables.*/skip-grant-tables/g' /etc/my.cnf

服务mysql重启

mysql -e "UPDATE mysql.user SET authentication_string='' WHERE user='root';"

sed -i 's/^skip-grant-tables.*/#skip-grant-tables/g' /etc/my.cnf

服务mysql重启

【讨论】:

以上是关于如何使用--skip-grant-tables 启动 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在启用 skip-grant-table 时授予 root 用户所有权限

码上开心Windows环境mysql数据库使用skip-grant-tables 与用户名密码修改

mysql8.0.18忘记密码问题

使用命令行启停HAProxy的Backend

远山启:用数学照亮人性与自由

windows开机自启随机崩溃如何排查