执行Phalcon迁移遇MySQL 1045权限错误求助(Ubuntu环境)
解决Phalcon迁移时MySQL 1045访问拒绝问题
核心原因
错误提示Access denied for user 'root'@'localhost' (using password: NO)说明:你的MySQL root用户不允许无密码登录,或者Ubuntu系统默认的MySQL root采用了socket认证(而非密码认证),导致配置里的空密码无法通过验证。
分步解决
1. 确认MySQL root用户的认证方式
执行以下命令登录MySQL(Ubuntu默认root用sudo无需密码):
sudo mysql -u root
进入MySQL命令行后,查看用户认证信息:
SELECT user, host, plugin FROM mysql.user WHERE user='root';
如果输出里plugin字段是auth_socket,说明root用户是通过系统用户身份验证,不是密码验证,这就是问题根源。
2. 选择一种解决方案
方案一:修改root用户为密码认证(简单直接)
在MySQL命令行执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的自定义密码'; FLUSH PRIVILEGES;
然后修改config.php里的password字段为你刚才设置的密码:
return new Config([ 'database' => [ 'adapter' => 'mysql', 'host' => 'localhost', 'username' => 'root', 'password' => '你的自定义密码', // 填写新密码 'dbname' => 'admin', 'charset' => 'utf8', ], ]);
方案二:创建专用数据库用户(更安全,推荐)
不修改root用户,新建一个专门用于项目的数据库用户:
在MySQL命令行执行:
CREATE USER 'admin_user'@'localhost' IDENTIFIED BY '你的自定义密码'; GRANT ALL PRIVILEGES ON admin.* TO 'admin_user'@'localhost'; FLUSH PRIVILEGES;
然后修改config.php的数据库配置:
return new Config([ 'database' => [ 'adapter' => 'mysql', 'host' => 'localhost', 'username' => 'admin_user', // 改为新用户名 'password' => '你的自定义密码', // 改为新密码 'dbname' => 'admin', 'charset' => 'utf8', ], ]);
3. 验证连接是否正常
写一个简单的PHP脚本测试数据库连接,确保配置正确:
<?php $dsn = 'mysql:host=localhost;dbname=admin;charset=utf8'; $username = '你的用户名'; // root或admin_user $password = '你的密码'; try { $pdo = new PDO($dsn, $username, $password); echo '数据库连接成功!'; } catch (PDOException $e) { echo '连接失败: ' . $e->getMessage(); }
执行脚本:php test-connect.php,确认输出连接成功后,再执行迁移命令:
/vendor/bin/phalcon-migrations run
额外注意事项
- 不要用
sudo执行迁移命令,sudo会切换系统用户,可能导致读取的配置文件路径错误,用普通用户权限执行即可。 - 如果迁移命令找不到配置文件,手动指定配置路径:
/vendor/bin/phalcon-migrations run --config=./path/to/your/config.php
内容的提问来源于stack exchange,提问作者Memories
相关产品推荐
相关产品推荐

