首页 > 解决方案 > 如何修复mysql访问被拒绝?适用于家庭服务器但不适用于生产服务器

问题描述

在我的运行 rails 5.2.2 和 ruby​​ 2.6.1 的家庭服务器上,一切正常;但是在我的 linode 上,我得到用户 'deploy'@'localhost' 的访问被拒绝(使用密码:YES) 在主服务器上的 database.yml 中,我使用 david 作为用户,这是 unix 帐户。在 linode 上使用相同的 database.yml,我在 database.yml 文件中以用户身份部署。deploy 是 linode 服务器的 unix 帐户。

我已经尝试了 root 帐户并将所有权限授予 root 和部署,但都不起作用

... mysql> 显示授权;+-------------------------------------------------- ----------+ | deploy@localhost 的赠款 | +-------------------------------------------------- ----------+ | 授予所有特权TO '部署'@'localhost' | | 授予 .* 上的所有权限mysql到 'deploy'@'localhost' | +-------------------------------------------------- ----------+ 2 行(0.00 秒) ... ...

主服务器上的 database.yml

  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mysql_development
  pool: 5
  username: david
  password: "password"
  host: localhost
  port: 3306


test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mysql_test
  pool: 5
  username: david
  password: "password"
  host: localhost
  port: 3306

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mysql_production
  pool: 5
  host: localhost
  port: 3306

...

linode 服务器上的 database.yml

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mysql_development
  pool: 5
  username: deploy
  password: "password"
  host: localhost
  port: 3306


test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mysql_test
  pool: 5
  username: deploy
  password: "password"
  host: localhost
  port: 3306

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mysql_production
  pool: 5
  host: localhost
  port: 3306

...

标签: mysqlruby-on-rails-5

解决方案


等等,你有两个不同的database.yml文件?

据我所知,你有david@localhost一个,deploy@localhost另一个。

我看不出有这样做的理由。

database.yml 文件的全部目的是定义本地主机、登台、测试等和生产的登录。在生产环境中,您通常会使用 .env 文件或使用 Rails 5.2 的加密凭据进行设置。

这样,您就可以在不牺牲功能的情况下将您的 Linode 服务器凭据存储在安全的地方。

这是我们自己的database.yml文件的示例:

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  reconnect: true
  host: <%= ENV.fetch('DB_HOST') {'127.0.0.1'} %>
  port: <%= ENV.fetch('DB_PORT') {'3306'} %>
  database: <%= ENV.fetch('DB_NAME') {'our_dev_server'} %>
  username: <%= ENV.fetch('DB_USER') {'root'} %>
  password: <%= ENV.fetch('DB_PASSWORD') { '' } %>
  variables:
    sql_mode: TRADITIONAL # Read more: https://github.com/rails/rails/issues/25924

development:
  <<: *default

test:
  <<: *default
  database: our_test_server

production:
  <<: *default

推荐阅读