69

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

4

12 回答 12

57

我遇到了与这个问题的标题相同的问题,所以如果其他人用谷歌搜索这个问题并想在 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

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

于 2012-06-13T11:26:16.453 回答
54

如何在 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;
    
  • 重新定义用户根密码。

    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
    
  • 出现提示时输入新密码。

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

于 2016-02-08T18:57:25.067 回答
15

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

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登录的根!

于 2018-06-30T02:55:50.320 回答
7

在 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 &
于 2017-12-07T04:30:28.760 回答
5

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

按照同事的指示:

  1. 从 Wampserver 打开快速启动菜单,选择“停止所有服务”
  2. 在文本编辑器中打开my.ini,搜索[mysqld]
  3. 'skip-grant-tables'在本节末尾添加[mysqld](但在其中)
  4. 保存文件,让编辑器保持打开状态
  5. 在 Wampserver 菜单中,选择“重新启动服务”。将出现有关该skip-grant-tables选项的警告
  6. 在 Wampserver 菜单中选择 MySQL 打开提示
  7. 它要求输入密码,只需按Enter
  8. 粘贴命令ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
  9. 它必须报告操作成功(没有表受到影响)
  10. my.ini文件中,擦除该'skip-grant-tables'行,保存文件
  11. 在 WampServer 菜单中,再次选择 Restart Service

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

于 2018-10-13T08:52:37.643 回答
4

如果您使用 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

于 2014-01-18T16:35:57.750 回答
3

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

于 2016-04-21T18:54:02.860 回答
2

如果您正在运行,Apple MacBook OSX那么:

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

现在就做你想做的!!

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

于 2014-07-22T13:06:49.810 回答
2

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

mysqld -skip-grant-tables
于 2019-07-09T03:31:03.727 回答
0

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

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

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

于 2009-11-10T15:15:12.957 回答
0

Edit my.ini file and add skip-grant-tables and restart your mysql server :

[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 
于 2017-10-31T11:44:56.730 回答
0

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

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重启

于 2022-01-12T17:59:11.473 回答