我遇到了同样的问题,nabroyan 已经提到了一种解决方案。只需提供一些细节并添加另一个可能的解决方案。
好像当 SQLAPI 发现服务器在本地主机上运行时,它直接进入套接字文件,不幸的是它总是进入 MySQL 的套接字文件,即 /var/lib/mysql/mysql.sock
现在这里有两种可能的解决方案:
1-更新您的 MemSQL 实例以使用与 MySQL 相同的套接字文件(如果您不在同一个盒子上运行 MySQL,它可能只是一个选择)
(我自己没有测试过,所以这里可能遗漏了一些步骤)你可以通过更新 memsql.cnf 文件中“socket”的值来做到这一点,所以它应该如下所示:
socket = /var/lib/mysql/mysql.sock
您可以使用用于计算套接字文件位置的命令找到 memsql.cnf 文件的位置,memsql.cnf 文件将在同一目录中:
memsql -u root --password=YOUR_PASSWORD_HERE -P 3306 -e "show variables like 'socket'"
完成后,您应该重新启动 memsql:
memsql-ops memsql-restart
2-或修改您的连接字符串以提供 MemSQL 套接字路径。
您可以使用第一个选项下提到的命令找出 memsql 套接字文件。
在我的情况下,文件是:/app/memsql/master-3306-NJG846fb0e/data/memsql.sock 所以我修改了我的连接调用以使用这个文件:
Connect("/app/memsql/master-3306-NJG846fb0e/data/memsql.sock@", "myuser", "mypassword", SA_MySQL_Client);