英文:
How to connect with MySQL using a unix socket?
问题
我想使用Unix套接字连接到MySQL。我不确定如何在连接字符串中传递变量。我在某个地方读到可以使用Config.FormatDSN结构来定义这些值,但我不确定具体的用法。
// 创建数据库连接并返回其实例
func Connection() (*sql.DB, error) {
conn, err := sql.Open("mysql", "username/password@unix(socketpath)/dbname")
return conn, err
}
英文:
I want to connect to MySQL using a Unix socket connection. I am not sure how to pass the variables in the connection string. I have read somewhere that I can also use Config.FormatDSN struct to define the values, but I am not sure how.
// Creates a database connection and returns its instance
func Connection() (*sql.DB, error) {
conn, err := sql.Open("mysql", "username/password@unix(socketpath)/dbname")
return conn, err
}
答案1
得分: 4
所以,在一些尝试和试错的方法之后,我找到了解决我的问题的方法。如果你想要使用 Unix socket 连接在 Golang 中连接到 MySQL,你可以按照以下方式准备你的连接字符串:
{{username}}:{{password}}@unix({{socketPath}})/{{dbname}}?charset=utf8
{{}}
中的值是变量。
注意:socket 路径必须是绝对路径。例如:
/usr/local/bin/path/to/socket
我发现这个参考资料非常有帮助:
https://chromium.googlesource.com/external/github.com/go-sql-driver/mysql/+/a48f79b55b5a2107793c84c3bbd445138dc7f0d5/README.md
如果你感兴趣,这是完整的实现:
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type ConnectionSpecs struct {
username string
password string
socketPath string
database string
}
func GetConnStr() string {
connConfig := ConnectionSpecs{
username: "root",
password: "my-password",
socketPath: "/usr/local/bin/path/to/socket",
database: "test",
}
connStr := connConfig.username + ":" + connConfig.password +
"@unix(" + connConfig.socketPath + ")" +
"/" + connConfig.database +
"?charset=utf8"
return connStr
}
// 创建一个数据库连接并返回该连接
func Connection() (*sql.DB, error) {
var connStr = GetConnStr()
fmt.Println(connStr)
conn, err := sql.Open("mysql", GetConnStr())
return conn, err
}
英文:
So, after some hit and trial methods, I found the solution to my problem. If you want to connect to MySQL in Golang using a Unix socket connection, you can prepare your connection string in the following manner
{{username}}:{{password}}@unix({{socketPath}})/{{dbname}}?charset=utf8
values enclosed in {{}}
are variables.
Note: socket path must be absolute. For example:
/usr/local/bin/path/to/socket
I found this reference very helpful
https://chromium.googlesource.com/external/github.com/go-sql-driver/mysql/+/a48f79b55b5a2107793c84c3bbd445138dc7f0d5/README.md
Here is the full implementation if you are interested
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type ConnectionSpecs struct {
username string
password string
socketPath string
database string
}
func GetConnStr() string {
connConfig := ConnectionSpecs{
username: "root",
password: "my-password",
socketPath: "/usr/local/bin/path/to/socket",
database: "test",
}
connStr := connConfig.username + ":" + connConfig.password +
"@unix(" + connConfig.socketPath + ")" +
"/" + connConfig.database +
"?charset=utf8"
return connStr
}
// Creates a database connection and returns the same
func Connection() (*sql.DB, error) {
var connStr = GetConnStr()
fmt.Println(connStr)
conn, err := sql.Open("mysql", GetConnStr())
return conn, err
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论