尝试将我们的生产 Rails 7.1.3 服务器从
mysql2
切换到 trilogy
以连接到两个数据库:
DB_IP_ADDR
,位于单独的 DO Droplet PRODUCTION_IP_ADDR
由于 Trilogy 无法使用 mysql 8 的已知问题,我已经在远程 mysql 服务器和生产(本地主机)缓存 mysql 服务器上将
caching_sha2_password
恢复为使用 mysql
:mysql_native_password
# on DB_IP_ADDR
mysql> ALTER USER 'us'@'PRODUCTION_IP_ADDR' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> FLUSH PRIVILEGES;
我们的
# on PRODUCTION_IP_ADDR
mysql> ALTER USER 'us'@'localhost' IDENTIFIED WITH mysql_native_password BY 'cache_password';
mysql> FLUSH PRIVILEGES;
config/database.yml
本地缓存数据库与trilogy连接良好,但
远程数据库连接失败并显示
production:
primary:
adapter: trilogy
database: remote_production_db
host: DB_IP_ADDR
username: us
password: password
socket: /var/run/mysqld/mysqld.sock
encoding: utf8
cache:
adapter: trilogy
database: our_solid_cache_db
host: 127.0.0.1
username: us
password: cache_password
socket: /var/run/mysqld/mysqld.sock
endoding: utf8
migrations_paths: "db/cache/migrate"
ActiveRecord::DatabaseConnectionError: There is an issue connecting to your database with your username/password, username: us. (ActiveRecord::DatabaseConnectionError)
Please check your database configuration to ensure the username/password are valid.
...
Caused by:
Trilogy::BaseConnectionError: 1045: Access denied for user 'us'@'localhost' (using password: YES) (Trilogy::BaseConnectionError)
切换回 database.yml
而不更改任何其他内容,则两个数据库连接都正常。
我注意到错误消息将尝试的用户连接标识为
adapter: mysql2
,但请求不是来自 'us'@'localhost'
,而是来自
localhost
。
Trilogy 连接到远程数据库或识别远程用户是否需要特殊的东西?
想通了。
PRODUCTION_IP_ADDR
host
,但不能同时需要两者。
socket
参数的存在使其假定它处于
socket
。
我删除了遥控器
localhost
并且连接正常。