config / database.yml中套接字声明的用途是什么?
示例代码:
staging:
adapter: mysql
encoding: utf8
database: (database)
pool: 5
username: (user)
password: (pass)
socket: /tmp/mysql.sock # <--------- this line
我的应用有效,这条线是否被注释。那有什么用呢?我有什么理由可以留下它,评论它或改变它的价值?
答案 0 :(得分:12)
当两个程序想要通过网络相互通信时,一个程序可能会打开另一个程序的TCP连接(“套接字”)。第一个程序需要知道第二台计算机的IP地址和程序正在监听的端口。
在Linux上,当同一台计算机上的两个程序想要相互通信时,它们仍然可以打开TCP连接。但他们也可以通过“套接字文件”打开连接。 Linux使套接字文件API与TCP API非常相似,因此更新已经通过TCP通过网络进行通信的程序以支持通过套接字文件进行通信并不是什么大问题。套接字文件比TCP快,但仅在两个程序在同一台计算机上时才有效。
答案 1 :(得分:5)
MySQL在unix-ish系统,tcp / ip和域套接字上有两种与它通信的方法。通过指定套接字Rails,或者说数据库驱动程序,将使用套接字而不是网络连接。它可以更快地使用套接字,但YMMV。
答案 2 :(得分:0)
由于我的database.yml中指定了一个套接字,我浪费了整整一个下午 - 测试环境的数据库规范根本没有被解析。 因此,如果您的测试数据库无法访问,虽然一切看起来都不错,但请尝试删除套接字规范。
答案 3 :(得分:0)
这将显示UNIX套接字的文件位置:
mysqladmin version -u 'your user name' -p
结果:
mysqladmin Ver 8.42 Distrib 5.7.26, for Linux on x86_64
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 5.7.26-0ubuntu0.19.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 6 min 40 sec
您的用户必须已授予权限。