试着

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。


当前回答

试试这个,我有同样的问题,我尝试了几个选项,但下面的工作。

给我全部。“根”@“%”;

使用的参考资料- https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-20-04#step-6-%E2%80%94-testing-database-connection-from-php-optional

其他回答

检查您的用户名和域是否与之前创建的相同。Mysql通过用户表中的两列选择帐户。如果是不同的,mysql可能认为您想要通过授权创建一个新帐户,这在8.0版本之后不支持。

我在CentOS上也有同样的问题,这为我工作了(版本:8.0.11):

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'

指定的用户在您的MySQL上不存在(因此,MySQL试图像在版本8之前那样使用GRANT创建它,但由于此版本引入的限制而失败)。

MySQL在这一点上是相当愚蠢的,所以如果你有'root'@'localhost',并试图授予'root'@'%'特权,它将它们视为不同的用户,而不是任何主机上的广义root用户,包括localhost。

错误消息也具有误导性。

因此,如果您得到错误消息,请使用以下内容检查现有用户

SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;

然后创建缺失的用户(正如Mike建议的那样),或者将GRANT命令调整为实际存在的用户规范。

复制并立即使用:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

而不是使用单行代码,如:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

然后:

GRANT ALL ON *.* TO 'username'@'localhost';

然后:

FLUSH PRIVILEGES;

用sudo编译mysql

sudo mysql