试着
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
得到
错误1064(42000):你有一个错误的SQL语法;查看手册
对应于你的MySQL服务器版本,正确的语法使用'IDENTIFIED BY 'root' WITH GRANT OPTION'在第一行。
注意:在以前的版本中尝试时,相同的工作。
也试过
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
得到
错误1410(42000):不允许使用GRANT创建用户
MySQL(8.0.11.0)用户名/密码为root/root。
我的规格:
mysql --version
mysql Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)
对我有用的是:
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;
两个查询的响应:
Query OK, O rows affected (0.10 sec*)
注意:我之前创建了一个数据库(db_name),并创建了一个用户凭据,赋予数据库中所有表的所有特权,而不是使用我在某处读到的默认根用户,这是一个最佳实践。
对于那些已经对创建用户'root'@'localhost'感到困惑的人,当你已经在服务器机器上有一个root帐户时,请记住,你的'root'@'localhost'和'root'@'your_remote_ip'是mysql服务器中两个不同的用户(相同的用户名,但不同的范围)。因此,创建一个带有your_remote_ip后缀的新用户实际上会创建一个新的有效的根用户,您可以使用该用户从远程机器访问mysql服务器。
例如,如果您使用root从IP为10.154.10.241的远程机器连接到mysql服务器,并且您希望为远程root帐户设置一个密码,该密码为'Abcdef123!@#',下面是你需要遵循的步骤:
On your mysql server machine, do mysql -u root -p, then enter your password for root to login.
Once in mysql> session, do this to create root user for the remote scope:
mysql> CREATE USER 'root'@'10.154.10.241' IDENTIFIED BY 'Abcdef123!@#';
After the Query OK message, do this to grant the newly created root user all privileges:
mysql> GRANT ALL ON *.* TO 'root'@'10.154.10.241';
And then:
FLUSH PRIVILEGES;
Restart the mysqld service:
sudo service mysqld restart
Confirm that the server has successfully restarted:
sudo service mysqld status
如果上面的步骤没有任何错误地执行,那么您现在可以使用root从远程机器访问mysql服务器。
这只是我对这个问题的看法。我有完全相同的问题,试图从MySQL工作台连接。我正在运行一个bitnami-mysql虚拟机来为开发设置一个本地沙盒。
Bitnami的教程说要运行“Grant All Privileges”命令:
/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";
这显然行不通,最后我用Mike Lischke的答案让它起作用了。
我认为发生的情况是root@%用户有与之关联的错误凭据。因此,如果你试图修改用户的特权,但运气不好,尝试:
删除用户。
重新创建用户。
确保在MySQL配置文件上有正确的绑定。
在我的例子中,我已经注释掉了这行,因为它只是用于沙盒环境。
1. 删除用户。
从Mysql控制台:
列出用户(有助于查看所有用户):
select user, host from mysql.user;
删除期望用户:
drop user '{{ username }}'@'%';
2. 重新创建用户。
创建用户并授予权限:
CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;
执行如下命令:
FLUSH PRIVILEGES;
3.确保在MySQL配置文件上有正确的绑定。
找到您的MySQL配置文件(附加说明在最后)。如果你想让MySQL监听多个网络上的连接,在配置文件中找到下面这行:
bind-address=127.0.0.1
并使用“#”注释它:
#bind-address=127.0.0.1
对于生产环境,您可能希望使用限制网络访问(最后的附加说明)。
然后重新启动MySQL服务。
希望这对有同样问题的人有所帮助!
绑定:如果你想了解更多,我建议你看看下面的内容
解决方案如何将MySQL服务器绑定到多个IP地址。它
基本上是说你可以打开MySQL,限制连接
防火墙,或者如果你的MySQL版本是8.0.13或更高。
该文件可以有不同的位置,这取决于你的
Linux分发和安装。在我的系统里,地址是
”“/ etc / my . cnf中所做。以下是其他推荐地点:
/etc/mysql/mysql.conf.d
/etc/mysql/my.cnf
你也可以搜索配置位置,如本网站所示:
如何找到MySQL配置文件的位置。