首先,在服务器上登录 MySQL:
mysql -u root -p
授予用户远程访问权限:
允许用户 root 从任意 IP 远程访问,并且允许其访问所有数据库:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
这里的 '%' 表示允许任意 IP 连接。你也可以限制为特定的 IP 地址:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'specific_ip_address' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
报错:
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123456' with grant option' at line 1
出现 ERROR 1064 (42000) 错误通常是由于 SQL 语法错误或不兼容的 MySQL 版本导致的。在你提到的情况下,可能是因为使用了不正确的语法。
MySQL 在不同版本中对权限管理的语法有所变动,尤其是 MySQL 8.x 及以上版本。
解决方法
1. MySQL 8.x 版本:使用 CREATE USER 和 GRANT 命令
在 MySQL 8.x 版本中,推荐先使用 CREATE USER 创建用户,再使用 GRANT 分配权限,而不是直接在 GRANT 中使用 IDENTIFIED BY。
-- 1. 创建用户
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
-- 2. 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 3. 刷新权限
FLUSH PRIVILEGES;
2. 如果你使用的是 MySQL 5.x 版本
在 MySQL 5.x 版本中,下面的命令是正确的:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
但是,确保你使用的 MySQL 版本确实支持这种语法。
3. 确认 MySQL 版本
你可以通过以下命令查看当前的 MySQL 版本:
SELECT VERSION();
其他可能的原因
确认密码是否符合 MySQL 的复杂性要求(有些版本可能会对密码设置有更严格的规则)。
检查是否在密码中使用了可能导致冲突的特殊字符。如果密码中包含特殊字符如单引号 (') 或双引号 ("),请用反斜杠 (\) 进行转义,或者换用不含特殊字符的密码进行测试。
如果按照上述步骤操作,问题仍未解决,可以尝试将错误信息完整地提供出来,以进一步排查问题。
故:
-- 1. 创建用户
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
-- 2. 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 3. 刷新权限
FLUSH PRIVILEGES;
依旧报错:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 表示 MySQL 的密码策略不允许你使用当前设置的密码。MySQL 通常会使用一个插件(validate_password)来确保密码符合安全策略,包括长度、复杂度等要求。
解决方法
1. 检查密码策略的要求
你可以通过以下命令查看当前的密码策略设置:
SHOW VARIABLES LIKE 'validate_password%';
这会返回几个重要的变量,例如:
validate_password.policy:密码策略的级别。常见级别:
LOW:只要求密码长度。
MEDIUM:要求密码长度、包含数字、大写和小写字母,以及特殊字符。
STRONG:进一步要求密码不包含字典单词。
validate_password.length:要求的最小密码长度(默认为 8)。
validate_password.mixed_case_count:要求的至少包含的大写和小写字母数量。
validate_password.number_count:要求的至少包含的数字数量。
validate_password.special_char_count:要求的至少包含的特殊字符数量。
2. 设置符合策略要求的密码
根据上述策略要求,设置一个符合条件的密码。例如,如果你的策略是 MEDIUM,那么密码应满足以下条件:
至少 8 个字符。
至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符。
例如:
CREATE USER 'root'@'%' IDENTIFIED BY 'MyStr0ngP@ssw0rd!';
3. 修改密码策略
如果你希望放宽密码策略要求,可以调整策略参数。例如,降低策略级别到 LOW:
SET GLOBAL validate_password.policy = LOW;
或者,修改密码长度要求:
SET GLOBAL validate_password.length = 6;
注意:为了确保系统安全,建议不要完全禁用密码验证策略
flush privileges;
mysql> alter user 'root'@'%' identified by '123456';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%' 错误通常是因为在 MySQL 中尝试操作的用户或主机组合不存在,或者该用户在权限系统中出现了冲突。具体来说,可能是以下几个原因:
该用户不存在。
用户权限或主机信息配置有问题。
在 MySQL 8.x 中,root 用户的权限受到更严格的控制。
解决方法
1. 检查用户是否存在
首先,确认 root 用户是否存在,以及是否允许从 %(任意主机)进行连接。
运行以下 SQL 查询:
SELECT User, Host FROM mysql.user WHERE User = 'root';
检查是否有一行记录显示 User 为 root 且 Host 为 %。
2. 如果用户不存在,重新创建用户
如果发现 root@% 不存在,可以尝试创建该用户:
CREATE USER 'root'@'%' IDENTIFIED BY 'your_password';
然后再授予权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3. 如果用户已存在,尝试更新密码
如果用户存在但仍出现错误,可以尝试通过 ALTER USER 更新密码:
ALTER USER 'root'@'%' IDENTIFIED BY 'your_new_password';
4. 删除并重新创建用户
如果上述方法不起作用,你可以删除并重新创建用户:
DROP USER 'root'@'%';
然后重新创建用户并设置权限:
CREATE USER 'root'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
5. 确保权限已刷新
在修改用户权限或创建用户后,务必运行 FLUSH PRIVILEGES 以刷新权限缓存:
FLUSH PRIVILEGES;
6. 检查 MySQL 配置文件
确保 my.cnf 或 my.ini 中的 bind-address 允许远程连接(通常应设置为 0.0.0.0 以允许所有 IP)。
使用123步都报错,故直接删了root:
mysql> drop user 'root'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
reboot后看MySQL启动没有:
登进去MySQL查看:
打开DBeaver:
数据库-新建数据库连接
点击MySQL
输好IP地址,密码,点击测试连接,初次会下载驱动
点击完成后,右键点击右边创建好的IP,选择SQL编辑器,测试: