alist icon indicating copy to clipboard operation
alist copied to clipboard

support for using unixsocket to connect to mysql

Open Mars160 opened this issue 1 year ago • 1 comments

用Unixsocket方式为内存拷贝理论上比TCP更高效

本人已测试,功能正常,望合并

Mars160 avatar Feb 14 '24 10:02 Mars160

Thanks for opening this pull request! Please check out our contributing guidelines.

welcome[bot] avatar Feb 14 '24 10:02 welcome[bot]

请过段时间再考虑合并,计划添加本地直连pg功能

Mars160 avatar Feb 22 '24 20:02 Mars160

~发现本来pg就可以使用unixsocket连接~

Reopen

Mars160 avatar Feb 23 '24 05:02 Mars160

Congrats on merging your first pull request! We here at behavior bot are proud of you!

welcome[bot] avatar Feb 23 '24 07:02 welcome[bot]

求地址格式,感谢分享

msycn avatar Feb 23 '24 14:02 msycn

用Unixsocket方式为内存拷贝理论上比TCP更高效

本人已测试,功能正常,望合并

"dsn": "/tmp/mysql.sock“ 报错

msycn avatar Feb 23 '24 14:02 msycn

@msycn

求地址格式,感谢分享

看了一下并没有采用我的配置方式,而是直接在配置文件中添加了DSN字段

之前是:

"database": {
    "type": "mysql",
    "host": "localhost",
    "port": 3306,
    "user": "XXXXXX",
    "password": "YYYYYY",
    "name": "alist",
    "db_file": "",
    "table_prefix": "alist_",
    "ssl_mode": ""
  },

现在变成:

"database": {
    "type": "mysql",
    "table_prefix": "alist_",
    "dsn": "XXXXXX[:YYYYYY]@unix(/path/to/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local"
  },

如果没有密码,dsn可以改成

"dsn": "XXXXXX@unix(/path/to/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local"

如果需要更加灵活的配置方式,参考GORM的DSN字符串,也就是下面这个,可以自行调整

[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]

我之前设计的配置方式是只需要将host改成unix:/path/to/mysql.sock就好,但是直接配置dsn确实更加灵活

Mars160 avatar Feb 23 '24 15:02 Mars160

@msycn 查清楚了,需要在dsn中添加以下参数:

?charset=utf8mb4&parseTime=True&loc=Local

即

"dsn": "XXXXXX@unix(/path/to/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local"

Mars160 avatar Feb 23 '24 15:02 Mars160

@msycn

求地址格式,感谢分享

看了一下并没有采用我的配置方式,而是直接在配置文件中添加了DSN字段

之前是:

"database": {
    "type": "mysql",
    "host": "localhost",
    "port": 3306,
    "user": "XXXXXX",
    "password": "YYYYYY",
    "name": "alist",
    "db_file": "",
    "table_prefix": "alist_",
    "ssl_mode": ""
  },

现在变成:

"database": {
    "type": "mysql",
    "table_prefix": "alist_",
    "dsn": "XXXXXX[:YYYYYY]@unix(/path/to/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local"
  },

如果没有密码,dsn可以改成

"dsn": "XXXXXX@unix(/path/to/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local"

如果需要更加灵活的配置方式,参考GORM的DSN字符串,也就是下面这个,可以自行调整

[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]

我之前设计的配置方式是只需要将host改成unix:/path/to/mysql.sock就好,但是直接配置dsn确实更加灵活

明白了,感谢大佬 。是这样的格式吧 "database": { "type": "mysql", "table_prefix": "alist_", "dsn": "username[:password]@unix(/tmp/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local" },

请问数据库的用户名在哪里填写

msycn avatar Feb 23 '24 15:02 msycn

@msycn 用户名密码等等你所需要的一切都在dsn里面

我的示例是不能直接用的,需要你自行替换一些内容

username[:password]@unix(/tmp/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local

写成自己的东西就是

//如果有密码
用户名:密码@unix(/tmp/mysql.sock)/数据库名?charset=utf8mb4&parseTime=True&loc=Local

//如果没密码
用户名@unix(/tmp/mysql.sock)/数据库名?charset=utf8mb4&parseTime=True&loc=Local

除去dsn,你的database配置里的其他内容没有问题

Mars160 avatar Feb 23 '24 15:02 Mars160

谢谢

@msycn 用户名密码等等你所需要的一切都在dsn里面

我的示例是不能直接用的,需要你自行替换一些内容

username[:password]@unix(/tmp/mysql.sock)/alist?charset=utf8mb4&parseTime=True&loc=Local

写成自己的东西就是

//如果有密码
用户名:密码@unix(/tmp/mysql.sock)/数据库名?charset=utf8mb4&parseTime=True&loc=Local

//如果没密码
用户名@unix(/tmp/mysql.sock)/数据库名?charset=utf8mb4&parseTime=True&loc=Local

除去dsn,你的database配置里的其他内容没有问题

谢谢 调试了一下默认是 "table_prefix": "x_",

msycn avatar Feb 23 '24 16:02 msycn

What should be the value if we don't want to use DSN in case of mysql

Nirzak avatar May 07 '24 15:05 Nirzak

@Nirzak Just leave the dsn field in the configuration file alone and fill in the other fields (host, port, etc.) as usual

Mars160 avatar Jun 24 '24 09:06 Mars160