数据库
首页 > 数据库> > mysql – “使用Capistrano部署Rails时”访问被拒绝用户’用户名’@’localhost'(使用密码:YES)“

mysql – “使用Capistrano部署Rails时”访问被拒绝用户’用户名’@’localhost'(使用密码:YES)“

作者:互联网

我正在建立一个运行MySQL的新Ubuntu服务器.我在我的开发服务器上设置了Capistrano并尝试部署:运行deploy:setup后冷.部署脚本尝试运行后

executing "cd /home/adm1n/www/knowit/releases/20121112152400 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"

我一直收到这条消息:

Rake Aborted!
Access denied for user 'specialusername'@'localhost' (using password: YES)
Tasks: TOP => environment

我在mysql服务器上的数据库中为localhost和%创建了’specialusername’.
我删除了用户数据库中的空用户”@ localhost行.
我已将服务器的IP地址添加到my.cnf文件中并注释掉了127.0.0.1行.

这是我的deploy.rb文件用于生产:

production:
adapter: mysql2
encoding: utf8
reconnect: false
database: mydatabasename
username: specialusername
password: crazypassword
socket: /tmp/mysql.sock
pool: 5
timeout: 5000

我想我可能不理解这是如何工作的.在我的Site5服务器上,我从来没有必要指定我从哪个主机访问mysql.但在我的所有阅读中,我似乎必须指定一个特定的用户@ hostname.如果我在旅​​行期间从全国各地的许多不同地点部署,这将使其变得有点困难.或者我是否只需要使用笔记本电脑的主机名而不管我当前的IP地址?感谢您提供的任何见解和解决方案.我没有发现任何文章正确地提供了我解决这个问题的方法.

解决方法:

有两种方法可以连接到MySQL服务器.

首先,使用UNIX套接字,例如/tmp/mysql.sock,在这种情况下没有“host”,因此身份验证使用username @ localhost.这仅适用于来自同一台机器的连接.

其次,使用TCP / IP连接.在这种情况下,服务器侦听运行数据库的盒子上的特定端口,连接它的方法是提供主机端口号.端口号可以是可选的(将使用默认值),主机可以通过主机名或IP地址给出.这允许本地或远程连接.

注意:我无法实际验证这一点(无法访问您的服务器),所以下面只是一个可能的解释……

在mysql -u knowitdbadmin -p -h192.168.0.50中,给出了主机(-h),因此使用TCP / IP,导致身份验证使用username @ hostname或username @%rules,但这不会使用username @本地主机.

在mysql -u knowitdbadmin -p中,没有给出主机(-h),因此使用默认的UNIX套接字,导致身份验证使用username @ localhost(因此失败).

如果要使用UNIX套接字(/tmp/mysql.sock)和username @ localhost禁用访问,并始终使用TCP / IP连接,请执行以下操作:
*删除授权用户名@ localhost(已完成)
*始终在应用程序的配置文件中指定主机/ IP(端口).

我认为问题在于:

socket: /tmp/mysql.sock

请尝试使用主机名端口号.

作为旁注,如果您以某种方式对数据库本身进行SQL访问,从5.5开始,新表performance_schema.host_cache将向您显示连接失败的所有原因,这样可以在排除故障时节省大量时间.

标签:mysql,ruby-on-rails,capistrano
来源: https://codeday.me/bug/20190629/1330645.html