🚨 错误分析:1044 - Access denied for user ‘root’@‘%’ to database ‘db_order_plus’
该错误表明 用户 root
在 MySQL 主库或从库 上没有对 db_order_plus
数据库 的访问权限。
即使您已经在 ProxySQL 中配置了用户,但如果 MySQL 主库或从库的权限不足,也会导致这个错误。
✅ 完整解决方案步骤
我将提供以下步骤来解决这个问题:
- 检查并授予 MySQL 主库和从库上的权限
- 检查 ProxySQL 的用户配置
- 重新加载 ProxySQL 配置
- 验证连接
🔧 步骤 1:在 MySQL 主库和从库上授予权限
请确保 root
用户 在 主库 和 从库 上有权限访问 db_order_plus
数据库。
1️⃣ 登录 MySQL 主库
mysql -u root -p
2️⃣ 授予 root
用户权限
执行以下 SQL:
GRANT ALL PRIVILEGES ON db_order_plus.* TO 'root'@'%';
FLUSH PRIVILEGES;
3️⃣ 验证权限
执行以下命令,查看用户权限:
SHOW GRANTS FOR 'root'@'%';
正确的输出示例:
GRANT ALL PRIVILEGES ON `db_order_plus`.* TO 'root'@'%'
🔧 步骤 2:检查 ProxySQL 的用户配置
确保 ProxySQL 中的 root
用户 配置正确,并可以访问 db_order_plus
数据库。
1️⃣ 登录到 ProxySQL 管理接口
mysql -u admin -p -h 127.0.0.1 -P 6032
2️⃣ 查看用户配置
执行以下查询:
SELECT * FROM mysql_users;
确保用户配置正确,类似如下:
username | password | default_hostgroup | default_schema |
---|---|---|---|
root | root | 10 | db_order_plus |
3️⃣ 更新用户配置
如果有必要,更新 root
用户 的配置:
UPDATE mysql_users SET default_schema='db_order_plus' WHERE username='root';
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
🔧 步骤 3:重新加载 ProxySQL 配置
确保 ProxySQL 加载了最新的用户配置。
在 ProxySQL 管理界面中执行:
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
🔧 步骤 4:验证数据库是否存在
请确认 db_order_plus
数据库是否在主库和从库中存在。
在主库中执行:
SHOW DATABASES;
如果数据库不存在,请创建它:
CREATE DATABASE db_order_plus;
🔧 步骤 5:检查主从同步状态(如果使用主从架构)
确保 主库和从库 之间的用户和权限已经同步。
在从库中执行:
SHOW SLAVE STATUS\G
确保 Slave_IO_Running
和 Slave_SQL_Running
都是 Yes
。
✅ 验证连接
完成上述步骤后,在 Navicat 中重新连接 ProxySQL:
参数 | 值 |
---|---|
主机名 | 127.0.0.1 或 ProxySQL 的 IP 地址 |
端口 | 6033 |
用户名 | root |
密码 | root |
🎯 总结
步骤 | 描述 |
---|---|
授予用户权限 | 在 MySQL 主库和从库上为用户授予权限 |
检查 ProxySQL 用户配置 | 确保 ProxySQL 中的用户配置正确 |
重新加载 ProxySQL 配置 | 确保 ProxySQL 加载了最新的用户配置 |
检查数据库是否存在 | 确保目标数据库 db_order_plus 已创建 |
检查主从同步状态 | 确保主库和从库之间的同步状态正常 |