我将我的 root 用户锁定在我们的数据库之外。我需要将所有权限都还给 root 用户。我有我的密码,我可以登录 MySQL。但是root用户没有所有权限。
12 回答
我遇到了与这个问题的标题相同的问题,所以如果其他人用谷歌搜索这个问题并想在 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
再次启动该服务,您应该能够在没有密码的情况下登录到您的数据库。
如何在 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
出现提示时输入新密码。
这个动作非常危险,它允许任何人在没有用户和密码的情况下不受限制地连接到所有数据库。必须小心使用,并且必须迅速恢复以避免风险。
在尝试了很多事情之后,这对我有用:
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
登录的根!
在 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 &
我在 Windows 10 中,使用 WAMP64 服务器。搜索my.cnf
和my.ini
。发现my.ini
于C:\wamp64\bin\mariadb\mariadb10.2.14
.
按照同事的指示:
- 从 Wampserver 打开快速启动菜单,选择“停止所有服务”
- 在文本编辑器中打开
my.ini
,搜索[mysqld]
'skip-grant-tables'
在本节末尾添加[mysqld]
(但在其中)- 保存文件,让编辑器保持打开状态
- 在 Wampserver 菜单中,选择“重新启动服务”。将出现有关该
skip-grant-tables
选项的警告 - 在 Wampserver 菜单中选择 MySQL 打开提示
- 它要求输入密码,只需按Enter
- 粘贴命令
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
- 它必须报告操作成功(没有表受到影响)
- 在
my.ini
文件中,擦除该'skip-grant-tables'
行,保存文件 - 在 WampServer 菜单中,再次选择 Restart Service
现在您可以使用新密码进入。感谢这里的所有答案。
如果您使用 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
。
使用以下命令(注意“d”):mysqld --skip-grant-tables
如果您正在运行,Apple MacBook OSX
那么:
- 停止您的 MySQL 服务器(如果它已经在运行)。
- 找到你的 MySQL 配置文件,
my.cnf
. (对我来说,它被放置在 @/Applications/XAMPP/xamppfiles/etc
。如果找不到,您可以搜索)。 my.cnf
在任何文本编辑器中打开文件。"skip-grant-tables"
在部分末尾添加(不带引号)[mysqld]
并保存文件。- 现在启动你的 MySQL 服务器。它将从
skip-grant-tables
选项开始。
现在就做你想做的!!
PS:一旦你完成了你想做的任何事情,请skip-grant-tables
从文件中删除,否则 MySQL 服务器将始终在没有访问权限的情况下运行。my.cnf
请从控制台运行以下命令以跳过用户表验证,同时从命令提示符启动 mysql 数据库
mysqld -skip-grant-tables
如果这是一个 windows 盒子,最简单的做法是停止服务器,将 skip-grant-tables 添加到 mysql 配置文件,然后重新启动服务器。
一旦您解决了您的权限问题,请重复上述操作,但删除 skip-grant-tables 选项。
如果你不知道你的配置文件在哪里,那么登录到 mysql sendSHOW VARIABLES LIKE '%config%'
并且返回的行之一会告诉你你的配置文件在哪里。
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
我看到这个问题很老,但也许我的配置会对某人有所帮助。我在脚本中使用此配置:
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重启