我已经登录到MySQL与使用--skip-grant-tables选项。但我不知道如何让所有特权回root用户。
错误
SQL查询:
GRANT ALL PRIVILEGES ON *。 * TO '根' @ '本地主机';
MySQL表示:文档
1290 - The MySQL server is running with the --skip-grant-tables option so
它不能执行该语句
错误
SQL查询:编辑
GRANT ALL PRIVILEGES ON *。 * TO '根' @ '本地主机' WITH MAX_QUERIES_PER_HOUR 0 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS;
MySQL表示:文档
1290 - The MySQL server is running with the --skip-grant-tables option so
它不能执行该语句
如果您无法访问MySQL服务器的根,你应该删除或mysql.user表不能恢复所有根的记录,全部删除,并添加一个新的记录。
您应该使用mysql的PASSWORD()函数来散列您的明文密码。检查更多信息http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html
第一站MySQL服务器并启动mysqld的用--skip-赠款表。
[root@mysql ~]# service mysqld stop; mysqld_safe --skip-grant-tables &
哈希您的明文密码。
mysql> select PASSWORD('CLEARTEXT_PASSWORD');
+-------------------------------------------+
| PASSWORD('CLEARTEXT_PASSWORD') |
+-------------------------------------------+
| *1EADAEB11872E413816FE51216C9134766DF39F9 |
+-------------------------------------------+
1 row in set (0.00 sec)
使用MySQL数据库应用更改。
mysql> use mysql;
删除所有记录根
mysql> delete from user where User='root';
添加新的记录是root用户可以从您的IP地址的所有特权访问。
mysql> insert into `user` VALUES('YOUR_IP_ADDRESS','root','*1EADAEB11872E413816FE51216C9134766DF39F9','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','');
同花顺的变化。
mysql> FLUSH PRIVILEGES;
退出mysql命令行。
mysql> exit;
重新启动mysqld服务。
[root@mysql ~]# /etc/init.d/mysqld restart
如果你运行这个的MySQL命令/查询,你会得到MySQL服务器的新的接入。
首先,停止MySQL服务器,然后使用--skip-grant-tables
选项启动它。
[root@backups1 mysql5.7]# /etc/init.d/mysqld stop
[root@backups1 mysql5.7]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql
然后,连接到您的实例没有密码:
[root@backups1 mysql5.7]# mysql -u root
然后,重新设置root用户的密码。
mysql> flush privileges;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
mysql> flush privileges;
切换到MySQL的正常模式,则连接而无需密码。
对于MySQL 8.0.12+ 我试过的文档(不工作),我已经试过各种其他的选择,都以失败告终。
PASSWORD()已过时,SET PASSWORD被禁用,ALTER USER也被禁用。 1.停止mysql服务 2.启动它是这样的:在/ usr /本地/ MySQL的/斌/ mysqld_safe的--skip-赠款表 3.登录(MySQL的)和exec:更新用户集合authentication_string = '',其中 用户=“根”; 4. killall mysqld的 5.再次启动服务
现在你可以使用“设置密码”或“更改用户”密码之内登录后
当您使用--skip-grant-tables
MySQL将不检查任何权限运行mysql。所以基本上你可以做任何事情。
找回root权限,您将需要在mysql
DB运行这样的查询
select * from user where user = 'root'
只是为了检查root用户仍然存在,如果确定:
UPDATE user SET Grant_priv = 1, Super_priv = 1 WHERE user = 'root'
之后重新启动mysql的不--skip-grant-tables
和root用户应该能够做一些补助,以便您的查询应该工作
如果您--skip-赠款表的目标是插入一个新的授权,可以通过插入在mysql.user行这样做(见其他答案)
如果你的挑战是在给这个新授予所有必需的权限(许多Y / N colums),那么您可以复制现有的根授权。而且,只有您所需要的调整。
CREATE TEMPORARY TABLE mysql.tmpUser SELECT * FROM mysql.user WHERE host="old" and user="root";
UPDATE mysql.tmpUser SET host="new" WHERE user = "root";
INSERT INTO mysql.user SELECT * FROM mysql.tmpUser;
要运行GRANT
查询,你只是不skip-grant-tables
运行mysql - 有什么复杂有关......?