从你提供的查询结果来看,`root` 用户只能从 localhost
连接,而没有为远程连接(`%`)配置 root
用户。这就是为什么你无法修改 root
用户的远程连接密码的原因。
### 解决方案
#### 1. 创建一个新的远程用户
如果你希望 root
用户能够从远程连接,可以创建一个新的用户,并授予其远程连接的权限。以下是步骤:
1. 创建远程用户:
```sql
CREATE USER 'root'@'%' IDENTIFIED BY '12345678';
```
2. 授予远程用户权限:
```sql
GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;
```
3. 刷新权限:
```sql
FLUSH PRIVILEGES;
```
4. 验证远程用户:
```sql
SELECT user, host, plugin FROM user WHERE user='root';
```
你应该会看到类似以下的输出:
```
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| root | localhost | mysql_native_password |
| root | % | mysql_native_password |
+------+-----------+-----------------------+
```
#### 2. 修改现有用户的主机名
如果你希望直接修改现有的 root
用户,使其可以从任何 IP 地址连接,可以使用以下命令:
1. 修改用户主机名:
```sql
UPDATE user SET host = '%' WHERE user = 'root' AND host = 'localhost';
```
2. 刷新权限:
```sql
FLUSH PRIVILEGES;
```
3. 验证修改:
```sql
SELECT user, host, plugin FROM user WHERE user='root';
```
你应该会看到类似以下的输出:
```
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| root | % | mysql_native_password |
+------+-----------+-----------------------+
```
### 注意事项
- 安全性:允许 root
用户从任何 IP 地址连接可能会带来安全风险。建议只允许特定的 IP 地址连接,例如:
```sql
CREATE USER 'root'@'192.168.1.100' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON . TO 'root'@'192.168.1.100' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```
- 密码复杂度:确保使用足够复杂的密码,以防止被破解。
### 测试远程连接
在另一台远程机器上,使用新的密码尝试连接 MySQL 数据库,确保密码修改成功。可以使用以下命令测试:
```bash
mysql -u root -h your_mysql_server_ip -p
```
输入新密码后,如果能够成功连接,说明操作成功。
如果你在操作过程中遇到任何问题,请提供具体的错误信息,我可以进一步帮助你解决。